From 9d254ac4b7e65381c817aabd340d40438edea2e7 Mon Sep 17 00:00:00 2001 From: Kharec Date: Sat, 20 Dec 2025 17:23:35 +0100 Subject: [PATCH] refactor: delete unitary "actions" py files --- skywipe/bookmarks.py | 78 ------------------------------------ skywipe/follows.py | 73 ---------------------------------- skywipe/likes.py | 73 ---------------------------------- skywipe/medias.py | 95 -------------------------------------------- skywipe/posts.py | 59 --------------------------- skywipe/quotes.py | 77 ----------------------------------- skywipe/reposts.py | 73 ---------------------------------- 7 files changed, 528 deletions(-) delete mode 100644 skywipe/bookmarks.py delete mode 100644 skywipe/follows.py delete mode 100644 skywipe/likes.py delete mode 100644 skywipe/medias.py delete mode 100644 skywipe/posts.py delete mode 100644 skywipe/quotes.py delete mode 100644 skywipe/reposts.py diff --git a/skywipe/bookmarks.py b/skywipe/bookmarks.py deleted file mode 100644 index 274ea17..0000000 --- a/skywipe/bookmarks.py +++ /dev/null @@ -1,78 +0,0 @@ -"""Bookmark deletion module for Skywipe""" - -import time -from atproto import models -from .auth import Auth -from .configure import Configuration -from .logger import get_logger, ProgressTracker - - -def delete_bookmarks(): - logger = get_logger() - auth = Auth() - client = auth.login() - config = Configuration() - config_data = config.load() - - batch_size = config_data.get("batch_size", 10) - delay = config_data.get("delay", 1) - - logger.info( - f"Starting bookmark deletion with batch_size={batch_size}, delay={delay}s") - - cursor = None - total_deleted = 0 - batch_num = 0 - progress = ProgressTracker(operation="Deleting bookmarks") - - while True: - batch_num += 1 - get_params = models.AppBskyBookmarkGetBookmarks.Params( - limit=batch_size, - cursor=cursor - ) - - response = client.app.bsky.bookmark.get_bookmarks(params=get_params) - - bookmarks = response.bookmarks - if not bookmarks: - break - - progress.batch(batch_num, len(bookmarks)) - - for bookmark in bookmarks: - try: - bookmark_uri = None - if hasattr(bookmark, "uri"): - bookmark_uri = bookmark.uri - else: - for attr_name in ("subject", "record", "post", "item"): - if hasattr(bookmark, attr_name): - nested = getattr(bookmark, attr_name) - if hasattr(nested, "uri"): - bookmark_uri = nested.uri - break - - if not bookmark_uri: - logger.debug("Skipping bookmark: unable to find uri") - continue - - delete_data = models.AppBskyBookmarkDeleteBookmark.Data( - uri=bookmark_uri - ) - client.app.bsky.bookmark.delete_bookmark(data=delete_data) - total_deleted += 1 - progress.update(1) - logger.debug(f"Deleted bookmark: {bookmark_uri}") - except Exception as e: - bookmark_uri = getattr(bookmark, "uri", "unknown") - logger.error(f"Error deleting bookmark {bookmark_uri}: {e}") - - cursor = response.cursor - if not cursor: - break - - if delay > 0: - time.sleep(delay) - - logger.info(f"Deleted {total_deleted} bookmarks.") diff --git a/skywipe/follows.py b/skywipe/follows.py deleted file mode 100644 index c8fdf14..0000000 --- a/skywipe/follows.py +++ /dev/null @@ -1,73 +0,0 @@ -"""Follow undoing module for Skywipe""" - -import time -from atproto import models -from .auth import Auth -from .configure import Configuration -from .logger import get_logger, ProgressTracker - - -FOLLOW_COLLECTION = "app.bsky.graph.follow" - - -def unfollow_all(): - logger = get_logger() - auth = Auth() - client = auth.login() - config = Configuration() - config_data = config.load() - - batch_size = config_data.get("batch_size", 10) - delay = config_data.get("delay", 1) - - logger.info( - f"Starting unfollow operation with batch_size={batch_size}, delay={delay}s") - - did = client.me.did - cursor = None - total_unfollowed = 0 - batch_num = 0 - progress = ProgressTracker(operation="Unfollowing accounts") - - while True: - batch_num += 1 - list_params = models.ComAtprotoRepoListRecords.Params( - repo=did, - collection=FOLLOW_COLLECTION, - limit=batch_size, - cursor=cursor - ) - - response = client.com.atproto.repo.list_records(params=list_params) - - records = response.records - if not records: - break - - progress.batch(batch_num, len(records)) - - for record in records: - try: - record_uri = record.uri - rkey = record_uri.rsplit("/", 1)[-1] - delete_data = { - "repo": did, - "collection": FOLLOW_COLLECTION, - "rkey": rkey - } - client.com.atproto.repo.delete_record(data=delete_data) - total_unfollowed += 1 - progress.update(1) - logger.debug(f"Unfollowed: {record_uri}") - except Exception as e: - record_uri = getattr(record, "uri", "unknown") - logger.error(f"Error unfollowing {record_uri}: {e}") - - cursor = response.cursor - if not cursor: - break - - if delay > 0: - time.sleep(delay) - - logger.info(f"Unfollowed {total_unfollowed} accounts.") diff --git a/skywipe/likes.py b/skywipe/likes.py deleted file mode 100644 index 9f2228e..0000000 --- a/skywipe/likes.py +++ /dev/null @@ -1,73 +0,0 @@ -"""Like undoing module for Skywipe""" - -import time -from atproto import models -from .auth import Auth -from .configure import Configuration -from .logger import get_logger, ProgressTracker - - -LIKE_COLLECTION = "app.bsky.feed.like" - - -def undo_likes(): - logger = get_logger() - auth = Auth() - client = auth.login() - config = Configuration() - config_data = config.load() - - batch_size = config_data.get("batch_size", 10) - delay = config_data.get("delay", 1) - - logger.info( - f"Starting like deletion with batch_size={batch_size}, delay={delay}s") - - did = client.me.did - cursor = None - total_undone = 0 - batch_num = 0 - progress = ProgressTracker(operation="Undoing likes") - - while True: - batch_num += 1 - list_params = models.ComAtprotoRepoListRecords.Params( - repo=did, - collection=LIKE_COLLECTION, - limit=batch_size, - cursor=cursor - ) - - response = client.com.atproto.repo.list_records(params=list_params) - - records = response.records - if not records: - break - - progress.batch(batch_num, len(records)) - - for record in records: - try: - record_uri = record.uri - rkey = record_uri.rsplit("/", 1)[-1] - delete_data = { - "repo": did, - "collection": LIKE_COLLECTION, - "rkey": rkey - } - client.com.atproto.repo.delete_record(data=delete_data) - total_undone += 1 - progress.update(1) - logger.debug(f"Undone like: {record_uri}") - except Exception as e: - record_uri = getattr(record, "uri", "unknown") - logger.error(f"Error undoing like {record_uri}: {e}") - - cursor = response.cursor - if not cursor: - break - - if delay > 0: - time.sleep(delay) - - logger.info(f"Undone {total_undone} likes.") diff --git a/skywipe/medias.py b/skywipe/medias.py deleted file mode 100644 index ad119e6..0000000 --- a/skywipe/medias.py +++ /dev/null @@ -1,95 +0,0 @@ -"""Media post deletion module for Skywipe""" - -import time -from .auth import Auth -from .configure import Configuration -from .logger import get_logger, ProgressTracker - - -def delete_posts_with_medias(): - logger = get_logger() - auth = Auth() - client = auth.login() - config = Configuration() - config_data = config.load() - - batch_size = config_data.get("batch_size", 10) - delay = config_data.get("delay", 1) - - logger.info( - f"Starting media post deletion with batch_size={batch_size}, delay={delay}s") - - did = client.me.did - cursor = None - total_deleted = 0 - batch_num = 0 - progress = ProgressTracker(operation="Deleting posts with media") - - while True: - batch_num += 1 - response = client.get_author_feed( - actor=did, limit=batch_size, cursor=cursor) - - posts = response.feed - if not posts: - break - - progress.batch(batch_num, len(posts)) - - for post in posts: - post_record = post.post - - embed = getattr(post_record, 'embed', None) - has_media = False - if embed: - embed_type = getattr(embed, 'py_type', None) - media_types = { - 'app.bsky.embed.images', - 'app.bsky.embed.video', - 'app.bsky.embed.external' - } - - if embed_type: - embed_type_base = embed_type.split('#')[0] - - if embed_type_base in media_types: - has_media = True - - if not has_media and embed_type_base in ('app.bsky.embed.recordWithMedia', 'app.bsky.embed.record_with_media'): - media = getattr(embed, 'media', None) - if media: - media_type = getattr(media, 'py_type', None) - if media_type: - media_type_base = media_type.split('#')[0] - if media_type_base in media_types: - has_media = True - - if not has_media: - for attr in ('images', 'video', 'external'): - if hasattr(embed, attr): - has_media = True - break - if isinstance(embed, dict) and embed.get(attr): - has_media = True - break - - if not has_media: - logger.debug(f"Skipping post without media: {post_record.uri}") - continue - - try: - client.delete_post(post_record.uri) - total_deleted += 1 - progress.update(1) - logger.debug(f"Deleted post with media: {post_record.uri}") - except Exception as e: - logger.error(f"Error deleting post {post_record.uri}: {e}") - - cursor = response.cursor - if not cursor: - break - - if delay > 0: - time.sleep(delay) - - logger.info(f"Deleted {total_deleted} posts with media.") diff --git a/skywipe/posts.py b/skywipe/posts.py deleted file mode 100644 index 1068457..0000000 --- a/skywipe/posts.py +++ /dev/null @@ -1,59 +0,0 @@ -"""Post deletion module for Skywipe""" - -import time -from .auth import Auth -from .configure import Configuration -from .logger import get_logger, ProgressTracker - - -def delete_all_posts(): - logger = get_logger() - auth = Auth() - client = auth.login() - config = Configuration() - config_data = config.load() - - batch_size = config_data.get("batch_size", 10) - delay = config_data.get("delay", 1) - - logger.info( - f"Starting post deletion with batch_size={batch_size}, delay={delay}s") - - did = client.me.did - cursor = None - total_deleted = 0 - batch_num = 0 - progress = ProgressTracker(operation="Deleting posts") - - while True: - batch_num += 1 - if cursor: - response = client.get_author_feed( - actor=did, limit=batch_size, cursor=cursor) - else: - response = client.get_author_feed(actor=did, limit=batch_size) - - posts = response.feed - if not posts: - break - - post_uris = [post.post.uri for post in posts] - progress.batch(batch_num, len(post_uris)) - - for uri in post_uris: - try: - client.delete_post(uri) - total_deleted += 1 - progress.update(1) - logger.debug(f"Deleted post: {uri}") - except Exception as e: - logger.error(f"Error deleting post {uri}: {e}") - - cursor = response.cursor - if not cursor: - break - - if delay > 0: - time.sleep(delay) - - logger.info(f"Deleted {total_deleted} posts.") diff --git a/skywipe/quotes.py b/skywipe/quotes.py deleted file mode 100644 index c6bbcdc..0000000 --- a/skywipe/quotes.py +++ /dev/null @@ -1,77 +0,0 @@ -"""Quote post deletion module for Skywipe""" - -import time -from .auth import Auth -from .configure import Configuration -from .logger import get_logger, ProgressTracker - - -def delete_quotes_posts(): - logger = get_logger() - auth = Auth() - client = auth.login() - config = Configuration() - config_data = config.load() - - batch_size = config_data.get("batch_size", 10) - delay = config_data.get("delay", 1) - - logger.info(f"Starting quote post deletion with batch_size={batch_size}, delay={delay}s") - - did = client.me.did - cursor = None - total_deleted = 0 - batch_num = 0 - progress = ProgressTracker(operation="Deleting quote posts") - - while True: - batch_num += 1 - response = client.get_author_feed( - actor=did, limit=batch_size, cursor=cursor) - - posts = response.feed - if not posts: - break - - progress.batch(batch_num, len(posts)) - - for post in posts: - post_record = post.post - - embed = getattr(post_record, 'embed', None) - has_quote = False - if embed: - embed_type = getattr(embed, 'py_type', None) - if embed_type: - embed_type_base = embed_type.split('#')[0] - quote_types = { - 'app.bsky.embed.record', - 'app.bsky.embed.recordWithMedia', - 'app.bsky.embed.record_with_media' - } - if embed_type_base in quote_types: - has_quote = True - - if not has_quote and (hasattr(embed, 'record') or (isinstance(embed, dict) and embed.get('record'))): - has_quote = True - - if not has_quote: - logger.debug(f"Skipping post without quote: {post_record.uri}") - continue - - try: - client.delete_post(post_record.uri) - total_deleted += 1 - progress.update(1) - logger.debug(f"Deleted quote post: {post_record.uri}") - except Exception as e: - logger.error(f"Error deleting quote post {post_record.uri}: {e}") - - cursor = response.cursor - if not cursor: - break - - if delay > 0: - time.sleep(delay) - - logger.info(f"Deleted {total_deleted} quote posts.") diff --git a/skywipe/reposts.py b/skywipe/reposts.py deleted file mode 100644 index f1c6ada..0000000 --- a/skywipe/reposts.py +++ /dev/null @@ -1,73 +0,0 @@ -"""Repost undoing module for Skywipe""" - -import time -from atproto import models -from .auth import Auth -from .configure import Configuration -from .logger import get_logger, ProgressTracker - - -REPOST_COLLECTION = "app.bsky.feed.repost" - - -def undo_reposts(): - logger = get_logger() - auth = Auth() - client = auth.login() - config = Configuration() - config_data = config.load() - - batch_size = config_data.get("batch_size", 10) - delay = config_data.get("delay", 1) - - logger.info( - f"Starting repost deletion with batch_size={batch_size}, delay={delay}s") - - did = client.me.did - cursor = None - total_undone = 0 - batch_num = 0 - progress = ProgressTracker(operation="Undoing reposts") - - while True: - batch_num += 1 - list_params = models.ComAtprotoRepoListRecords.Params( - repo=did, - collection=REPOST_COLLECTION, - limit=batch_size, - cursor=cursor - ) - - response = client.com.atproto.repo.list_records(params=list_params) - - records = response.records - if not records: - break - - progress.batch(batch_num, len(records)) - - for record in records: - try: - record_uri = record.uri - rkey = record_uri.rsplit("/", 1)[-1] - delete_data = { - "repo": did, - "collection": REPOST_COLLECTION, - "rkey": rkey - } - client.com.atproto.repo.delete_record(data=delete_data) - total_undone += 1 - progress.update(1) - logger.debug(f"Undone repost: {record_uri}") - except Exception as e: - record_uri = getattr(record, "uri", "unknown") - logger.error(f"Error undoing repost {record_uri}: {e}") - - cursor = response.cursor - if not cursor: - break - - if delay > 0: - time.sleep(delay) - - logger.info(f"Undone {total_undone} reposts.")