Add delete method
This commit is contained in:
parent
639304f311
commit
d338c881aa
|
@ -195,6 +195,10 @@ def append_post_tags(post_id, new_tags, danbooru_url, api_key, username, clear_t
|
||||||
# Get the current tags
|
# Get the current tags
|
||||||
current_tags = get_post_tags(post_id, danbooru_url, api_key, username)
|
current_tags = get_post_tags(post_id, danbooru_url, api_key, username)
|
||||||
|
|
||||||
|
# Handle case where get_post_tags returns None
|
||||||
|
if current_tags is None:
|
||||||
|
current_tags = []
|
||||||
|
|
||||||
# Ensure we can iterate the tags even if they're not a list
|
# Ensure we can iterate the tags even if they're not a list
|
||||||
if not isinstance(new_tags, list):
|
if not isinstance(new_tags, list):
|
||||||
new_tags = [new_tags]
|
new_tags = [new_tags]
|
||||||
|
@ -476,3 +480,94 @@ def get_autotagger_suggestions(post_id, api_url, api_key, username, min_score=95
|
||||||
logging.warning(f"Failed to get autotagger suggestions for post {post_id}")
|
logging.warning(f"Failed to get autotagger suggestions for post {post_id}")
|
||||||
logging.debug(response)
|
logging.debug(response)
|
||||||
return []
|
return []
|
||||||
|
|
||||||
|
|
||||||
|
def get_user_profile(danbooru_url, api_key, username):
|
||||||
|
"""
|
||||||
|
Get the user profile to check permissions and user level.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
danbooru_url (str): The base URL of the booru
|
||||||
|
api_key (str): The API key for authentication
|
||||||
|
username (str): The username for authentication
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
dict: User profile information or None if failed
|
||||||
|
"""
|
||||||
|
url = f"{danbooru_url}/profile.json"
|
||||||
|
params = {
|
||||||
|
"login": username,
|
||||||
|
"api_key": api_key,
|
||||||
|
}
|
||||||
|
|
||||||
|
try:
|
||||||
|
response = requests.get(url, params=params)
|
||||||
|
if response.status_code == 200:
|
||||||
|
return response.json()
|
||||||
|
else:
|
||||||
|
print(f"Failed to get user profile. Status code: {response.status_code}")
|
||||||
|
print(f"Response: {response.text}")
|
||||||
|
return None
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Exception getting user profile: {e}")
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
def delete_post(post_id, danbooru_url, api_key, username, reason=""):
|
||||||
|
"""
|
||||||
|
Deletes a post from the booru with an optional reason.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
post_id (int): The ID of the post to delete
|
||||||
|
danbooru_url (str): The base URL of the booru
|
||||||
|
api_key (str): The API key for authentication
|
||||||
|
username (str): The username for authentication
|
||||||
|
reason (str): Optional reason for deletion
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
bool: True if deletion was successful, False otherwise
|
||||||
|
"""
|
||||||
|
url = f"{danbooru_url}/posts/{post_id}.json"
|
||||||
|
print(f"Attempting to delete post {post_id} from {url}")
|
||||||
|
|
||||||
|
data = {
|
||||||
|
"commit": "Delete",
|
||||||
|
"post[move_favorites]": "true",
|
||||||
|
}
|
||||||
|
if reason:
|
||||||
|
data["post[reason]"] = reason
|
||||||
|
|
||||||
|
headers = {"Content-Type": "application/x-www-form-urlencoded"}
|
||||||
|
|
||||||
|
try:
|
||||||
|
response = requests.delete(url, auth=(username, api_key), data=data, headers=headers)
|
||||||
|
print(f"Response status code: {response.status_code}")
|
||||||
|
|
||||||
|
if response.status_code in [200, 204, 202]:
|
||||||
|
# Check if the post was actually marked as deleted
|
||||||
|
if response.status_code == 200:
|
||||||
|
try:
|
||||||
|
post_data = response.json()
|
||||||
|
if post_data.get("is_deleted", False):
|
||||||
|
print(f"Post {post_id} was successfully deleted")
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
print(f"Post {post_id} was not marked as deleted")
|
||||||
|
return False
|
||||||
|
except:
|
||||||
|
# If we can't parse JSON, assume success for 200 status
|
||||||
|
print(f"Post {post_id} deletion successful (status 200)")
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
# For 204/202, assume success
|
||||||
|
print(f"Post {post_id} deletion successful (status {response.status_code})")
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
print(f"Failed to delete post {post_id}. Status code: {response.status_code}")
|
||||||
|
if "ActiveRecord::RecordInvalid" in response.text:
|
||||||
|
print("Error: Post validation failed - the post may have children, favorites, or other dependencies that prevent deletion.")
|
||||||
|
return False
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Exception during deletion: {e}")
|
||||||
|
return False
|
||||||
|
|
Loading…
Reference in New Issue