ofscraper 3.13.dev7__tar.gz → 3.13.dev9__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- ofscraper-3.13.dev9/.gitattributes +1 -0
- ofscraper-3.13.dev9/.github/ISSUE_TEMPLATE/bug_report.md +66 -0
- ofscraper-3.13.dev9/.github/ISSUE_TEMPLATE/feature_request.md +19 -0
- ofscraper-3.13.dev9/.github/dependabot.yml +11 -0
- ofscraper-3.13.dev9/.github/workflows/codecov.yml +32 -0
- ofscraper-3.13.dev9/.github/workflows/commit_bundler.yml +207 -0
- ofscraper-3.13.dev9/.github/workflows/docker-daily.yml +117 -0
- ofscraper-3.13.dev9/.github/workflows/docker-purge.yml +35 -0
- ofscraper-3.13.dev9/.github/workflows/package-builder-release.yml +163 -0
- ofscraper-3.13.dev9/.github/workflows/package-delete.yml +23 -0
- ofscraper-3.13.dev9/.github/workflows/publish-release-binaries.yml +194 -0
- ofscraper-3.13.dev9/.github/workflows/publish-release-dockers.yml +329 -0
- ofscraper-3.13.dev9/.gitignore +156 -0
- ofscraper-3.13.dev9/.gitmodules +6 -0
- ofscraper-3.13.dev9/CHANGES.md +36 -0
- ofscraper-3.13.dev9/Dockerfile +65 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/PKG-INFO +61 -56
- ofscraper-3.13.dev9/cosign.pub +4 -0
- ofscraper-3.13.dev9/docker-compose.yml +40 -0
- ofscraper-3.13.dev9/donate/btc +1 -0
- ofscraper-3.13.dev9/donate/eth +1 -0
- ofscraper-3.13.dev9/media/browser_tools_open.png +0 -0
- ofscraper-3.13.dev9/media/dp.png +0 -0
- ofscraper-3.13.dev9/media/example.png +0 -0
- ofscraper-3.13.dev9/media/headers.png +0 -0
- ofscraper-3.13.dev9/media/icon.png +0 -0
- ofscraper-3.13.dev9/media/init.png +0 -0
- ofscraper-3.13.dev9/media/list_or_username.png +0 -0
- ofscraper-3.13.dev9/media/main_menu.png +0 -0
- ofscraper-3.13.dev9/media/network_tab.png +0 -0
- ofscraper-3.13.dev9/media/request_headers.png +0 -0
- ofscraper-3.13.dev9/media/xhr_tab.png +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/__main__.py +1 -0
- ofscraper-3.13.dev9/ofscraper/__version__.py +12 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/commands/scraper/actions/download/managers/alt_download.py +2 -2
- ofscraper-3.13.dev9/ofscraper/commands/scraper/actions/download/utils/ffmpeg.py +102 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/commands/scraper/actions/download/utils/keyhelpers.py +2 -2
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/const/constants.py +0 -1
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/const/values/dynamic.py +1 -1
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/main/open/load.py +0 -1
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/prompts/prompt_groups/config.py +0 -5
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/prompts/prompt_validators.py +0 -30
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/prompts/prompts.py +0 -1
- ofscraper-3.13.dev9/ofscraper/utils/args/accessors/actions.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/args/callbacks/arguments/username.py +3 -3
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/checkers.py +1 -9
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/config/config.py +0 -12
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/config/data.py +2 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/settings.py +0 -1
- ofscraper-3.13.dev9/pyproject.toml +128 -0
- ofscraper-3.13.dev9/scripts/commit_version.sh +151 -0
- ofscraper-3.13.dev9/scripts/determine_docker_stable_dev_tags.py +172 -0
- ofscraper-3.13.dev9/scripts/entrypoint.sh +19 -0
- ofscraper-3.13.dev9/scripts/release_version.sh +135 -0
- ofscraper-3.13.dev9/test/calls/example.py +7 -0
- ofscraper-3.13.dev9/test/calls/utils_test.py +56 -0
- ofscraper-3.13.dev9/test/db/archive_test.py +78 -0
- ofscraper-3.13.dev9/test/db/highlights_test.py +74 -0
- ofscraper-3.13.dev9/test/db/media_test.py +82 -0
- ofscraper-3.13.dev9/test/db/message_test.py +73 -0
- ofscraper-3.13.dev9/test/db/pinned_test.py +78 -0
- ofscraper-3.13.dev9/test/db/post_test.py +77 -0
- ofscraper-3.13.dev9/test/db/profile_test.py +73 -0
- ofscraper-3.13.dev9/test/db/stories_test.py +64 -0
- ofscraper-3.13.dev9/test/general/auth_test.py +0 -0
- ofscraper-3.13.dev9/test/general/config_test.py +337 -0
- ofscraper-3.13.dev9/test/general/filter_test.py +112 -0
- ofscraper-3.13.dev9/test/general/like_test.py +64 -0
- ofscraper-3.13.dev9/test/general/misc_test.py +43 -0
- ofscraper-3.13.dev9/test/general/path_test.py +640 -0
- ofscraper-3.13.dev9/test/general/profile_folder_test.py +184 -0
- ofscraper-3.13.dev9/test/general/profile_scrape_test.py +57 -0
- ofscraper-3.13.dev9/test/general/validator_test.py +254 -0
- ofscraper-3.13.dev9/test/post/archived_post_test.py +598 -0
- ofscraper-3.13.dev9/test/post/highlight_post_test.py +595 -0
- ofscraper-3.13.dev9/test/post/messages_post_test.py +597 -0
- ofscraper-3.13.dev9/test/post/paid_post_test.py +596 -0
- ofscraper-3.13.dev9/test/post/pinned_post_test.py +598 -0
- ofscraper-3.13.dev9/test/post/stories_post_test.py +610 -0
- ofscraper-3.13.dev9/test/post/timeline_post_test.py +598 -0
- ofscraper-3.13.dev9/uv.lock +2180 -0
- ofscraper-3.13.dev7/ofscraper/__version__.py +0 -34
- ofscraper-3.13.dev7/ofscraper/const/values/binary.py +0 -1
- ofscraper-3.13.dev7/ofscraper/prompts/prompt_groups/binary.py +0 -73
- ofscraper-3.13.dev7/ofscraper/utils/binaries.py +0 -125
- ofscraper-3.13.dev7/ofscraper/utils/paths/check.py +0 -39
- ofscraper-3.13.dev7/pyproject.toml +0 -104
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/LICENSE +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/README.md +0 -0
- /ofscraper-3.13.dev7/ofscraper/commands/scraper/actions/utils/buffer.py → /ofscraper-3.13.dev9/crypto +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/__version__.pye +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/classes/labels.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/classes/of/base.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/classes/of/media.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/classes/of/posts.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/classes/placeholder.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/classes/sessionmanager/download.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/classes/sessionmanager/ofsession.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/classes/sessionmanager/sessionmanager.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/classes/table/app.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/classes/table/compose.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/classes/table/const.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/classes/table/css.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/classes/table/fields/boolfield.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/classes/table/fields/datefield.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/classes/table/fields/downloadfield.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/classes/table/fields/mediafield.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/classes/table/fields/numfield.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/classes/table/fields/pricefield.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/classes/table/fields/responsefield.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/classes/table/fields/selectfield.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/classes/table/fields/sizefield.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/classes/table/fields/textsearch.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/classes/table/fields/timefield.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/classes/table/inputs/filterinput.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/classes/table/inputs/intergerinput.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/classes/table/inputs/strinput.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/classes/table/sections/sidebar.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/classes/table/sections/table.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/classes/table/sections/table_console.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/classes/table/utils/lock.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/classes/table/utils/names.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/commands/check.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/commands/db.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/commands/manual.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/commands/metadata/consumer.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/commands/metadata/desc.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/commands/metadata/manager.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/commands/metadata/metadata.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/commands/scraper/actions/download/download.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/commands/scraper/actions/download/managers/downloadmanager.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/commands/scraper/actions/download/managers/main_download.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/commands/scraper/actions/download/run.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/commands/scraper/actions/download/utils/chunk.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/commands/scraper/actions/download/utils/desc.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/commands/scraper/actions/download/utils/leaky.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/commands/scraper/actions/download/utils/retries.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/commands/scraper/actions/download/utils/text.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/commands/scraper/actions/like/like.py +0 -0
- /ofscraper-3.13.dev7/ofscraper/commands/scraper/utils/daemon.py → /ofscraper-3.13.dev9/ofscraper/commands/scraper/actions/utils/buffer.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/commands/scraper/actions/utils/general.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/commands/scraper/actions/utils/globals.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/commands/scraper/actions/utils/log.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/commands/scraper/actions/utils/params.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/commands/scraper/actions/utils/paths/media.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/commands/scraper/actions/utils/paths/paths.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/commands/scraper/actions/utils/progress/convert.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/commands/scraper/actions/utils/progress/update.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/commands/scraper/actions/utils/retries.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/commands/scraper/actions/utils/send/chunk.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/commands/scraper/actions/utils/send/message.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/commands/scraper/actions/utils/threads.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/commands/scraper/actions/utils/workers.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/commands/scraper/scraper.py +0 -0
- /ofscraper-3.13.dev7/ofscraper/const/values/req/like.py → /ofscraper-3.13.dev9/ofscraper/commands/scraper/utils/daemon.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/commands/scraper/utils/jobqueue.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/commands/scraper/utils/prepare.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/commands/scraper/utils/print.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/commands/scraper/utils/schedule.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/commands/utils/command.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/commands/utils/scrape_context.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/commands/utils/strings.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/const/values/action/download.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/const/values/action/like.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/const/values/action/metadata.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/const/values/config.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/const/values/date.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/const/values/download.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/const/values/general.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/const/values/list.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/const/values/live.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/const/values/logger.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/const/values/path/bytes.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/const/values/path/files.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/const/values/path/general.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/const/values/path/path.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/const/values/prompts.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/const/values/req/anon.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/const/values/req/api.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/const/values/req/cdm.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/const/values/req/discord.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/const/values/req/git.py +0 -0
- /ofscraper-3.13.dev7/ofscraper/utils/args/accessors/actions.py → /ofscraper-3.13.dev9/ofscraper/const/values/req/like.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/const/values/req/mpd.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/const/values/req/req.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/const/values/rich.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/const/values/system.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/const/values/table.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/const/values/test/test_constants.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/const/values/time.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/const/values/url/other_url.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/const/values/url/url.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/data/api/archive.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/data/api/common/after.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/data/api/common/cache/read.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/data/api/common/cache/write.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/data/api/common/check.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/data/api/common/logs/logs.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/data/api/common/logs/strings.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/data/api/common/timeline.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/data/api/highlights.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/data/api/init.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/data/api/labels.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/data/api/me.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/data/api/messages.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/data/api/paid.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/data/api/pinned.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/data/api/profile.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/data/api/streams.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/data/api/subscriptions/common.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/data/api/subscriptions/individual.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/data/api/subscriptions/lists.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/data/api/subscriptions/subscriptions.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/data/api/timeline.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/data/models/manager.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/data/models/models.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/data/models/utils/retriver.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/data/posts/post.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/data/posts/scrape_paid.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/db/__init__.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/db/backup.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/db/difference.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/db/merge.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/db/operations.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/db/operations_/empty.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/db/operations_/labels.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/db/operations_/media.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/db/operations_/messages.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/db/operations_/others.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/db/operations_/posts.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/db/operations_/profile.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/db/operations_/stories.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/db/operations_/wrapper.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/db/transition.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/db/utils/convert.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/filters/media/filters.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/filters/media/main.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/filters/models/date.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/filters/models/flags.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/filters/models/other.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/filters/models/price.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/filters/models/sort.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/filters/models/subtype.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/filters/models/utils/logs.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/main/close/exit.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/main/close/final/final.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/main/close/final/final_log.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/main/close/final/final_script.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/main/close/final/final_user.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/main/manager.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/main/open/run.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/prompts/keybindings.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/prompts/promptConvert.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/prompts/prompt_groups/actions.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/prompts/prompt_groups/area.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/prompts/prompt_groups/auth.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/prompts/prompt_groups/menu.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/prompts/prompt_groups/merge.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/prompts/prompt_groups/model.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/prompts/prompt_groups/profile.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/prompts/prompt_strings.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/prompts/utils/model_helpers.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/prompts/utils/prompt_helpers.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/__init__.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/actions.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/ads.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/args/accessors/areas.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/args/accessors/output.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/args/accessors/quality.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/args/accessors/read.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/args/accessors/time.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/args/callbacks/arguments/post.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/args/callbacks/parse/choice.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/args/callbacks/parse/file.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/args/callbacks/parse/string.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/args/callbacks/parse/username.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/args/globals.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/args/helpers/hide_args.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/args/main.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/args/mutators/before.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/args/mutators/change.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/args/mutators/user.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/args/mutators/write.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/args/parse/arguments/advanced_processing.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/args/parse/arguments/advanced_program.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/args/parse/arguments/advanced_user_filter.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/args/parse/arguments/automatic.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/args/parse/arguments/check.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/args/parse/arguments/download.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/args/parse/arguments/file.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/args/parse/arguments/logging.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/args/parse/arguments/media_content.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/args/parse/arguments/metadata_filters.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/args/parse/arguments/post_content.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/args/parse/arguments/program.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/args/parse/arguments/shared.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/args/parse/arguments/user_list.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/args/parse/arguments/user_select.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/args/parse/arguments/user_sort.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/args/parse/arguments/utils/date.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/args/parse/arguments/utils/retry.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/args/parse/commands/db.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/args/parse/commands/main.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/args/parse/commands/manual.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/args/parse/commands/message.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/args/parse/commands/metadata.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/args/parse/commands/paid.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/args/parse/commands/post.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/args/parse/commands/story.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/args/parse/group_bundles/advanced_common.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/args/parse/group_bundles/check.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/args/parse/group_bundles/common.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/args/parse/group_bundles/db.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/args/parse/group_bundles/main.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/args/parse/group_bundles/manual.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/args/parse/group_bundles/message_check.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/args/parse/group_bundles/metadata.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/args/parse/group_bundles/paid_check.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/args/parse/group_bundles/post_check.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/args/parse/group_bundles/story_check.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/args/parse/group_bundles/utils/check.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/args/parse/groups/advanced_processing.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/args/parse/groups/advanced_program.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/args/parse/groups/advanced_user_filter.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/args/parse/groups/automatic.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/args/parse/groups/check_content.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/args/parse/groups/download.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/args/parse/groups/file.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/args/parse/groups/logging.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/args/parse/groups/media_filter.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/args/parse/groups/post_filter.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/args/parse/groups/program.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/args/parse/groups/user_list.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/args/parse/groups/user_select.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/args/parse/groups/user_sort.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/args/types/arrow.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/args/types/choice.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/auth/data.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/auth/file.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/auth/make.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/auth/request.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/auth/schema.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/auth/utils/context.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/auth/utils/dict.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/auth/utils/prompt.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/auth/utils/warning/check.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/auth/utils/warning/print.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/auth/utils/warning/warning.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/cache.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/config/custom.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/config/file.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/config/menu.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/config/schema.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/config/utils/context.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/config/utils/wrapper.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/console.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/constants.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/context/exit.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/context/run_async.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/context/stdout.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/dates.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/encoding.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/hash.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/live/classes/progress.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/live/classes/task.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/live/classes/transfercol.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/live/clear.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/live/empty.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/live/groups.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/live/live.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/live/panel.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/live/progress.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/live/screens.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/live/tasks.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/live/updater.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/logs/classes/classes.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/logs/classes/handlers/discord.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/logs/classes/handlers/file.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/logs/classes/handlers/text.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/logs/close.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/logs/globals.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/logs/handle.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/logs/logger.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/logs/logs.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/logs/other.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/logs/stdout.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/logs/utils/level.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/logs/utils/trace.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/manager.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/me.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/menu.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/merge.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/paths/common.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/paths/db.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/paths/manage.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/paths/paths.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/profiles/data.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/profiles/manage.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/profiles/tools.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/sems.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/separate.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/string.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/system/free.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/system/network.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/system/priority.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/system/speed.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/system/subprocess.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/system/system.py +0 -0
- {ofscraper-3.13.dev7 → ofscraper-3.13.dev9}/ofscraper/utils/text.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.git_archival.json export-subst
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Bug report
|
|
3
|
+
about: Report an issue with running the script
|
|
4
|
+
title: "# Clear Description of issue"
|
|
5
|
+
labels: ""
|
|
6
|
+
assignees: ""
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
<!---
|
|
10
|
+
Issues pertaining to the script not working
|
|
11
|
+
Must have a log file and config, otherwhise they will be closed
|
|
12
|
+
|
|
13
|
+
You may submit tickets privately on discord
|
|
14
|
+
In other cases a log and config may be helpful
|
|
15
|
+
-->
|
|
16
|
+
|
|
17
|
+
## Describe the bug
|
|
18
|
+
|
|
19
|
+
A clear and concise description of what the bug is.
|
|
20
|
+
|
|
21
|
+
## To Reproduce
|
|
22
|
+
|
|
23
|
+
Steps to reproduce the behavior:
|
|
24
|
+
Hint: enter the command and args would be a good idea
|
|
25
|
+
|
|
26
|
+
Example
|
|
27
|
+
|
|
28
|
+
1. Go to '...'
|
|
29
|
+
2. Click on '....'
|
|
30
|
+
3. Scroll down to '....'
|
|
31
|
+
4. See error
|
|
32
|
+
|
|
33
|
+
## Expected behavior
|
|
34
|
+
|
|
35
|
+
A clear and concise description of what you expected to happen.
|
|
36
|
+
|
|
37
|
+
## Screenshots/Logs
|
|
38
|
+
|
|
39
|
+
Logs are required for any reports of any issue, unless the issue is related to setup of script
|
|
40
|
+
Logs must be at least debug level
|
|
41
|
+
|
|
42
|
+
Hint: Please make sure that the log formatting is readable, use a paste site
|
|
43
|
+
like
|
|
44
|
+
[Private Bin](https://privatebin.io/)
|
|
45
|
+
|
|
46
|
+
## Config
|
|
47
|
+
|
|
48
|
+
Please provide details about your correct config
|
|
49
|
+
This is required for all reports
|
|
50
|
+
|
|
51
|
+
Feel free to anonymize information
|
|
52
|
+
|
|
53
|
+
- for example home directory
|
|
54
|
+
- keydb api key
|
|
55
|
+
|
|
56
|
+
## System Info
|
|
57
|
+
|
|
58
|
+
- OS: [e.g. iOS]
|
|
59
|
+
- Browser [e.g. chrome, safari]
|
|
60
|
+
- Version [e.g. 22]
|
|
61
|
+
- binary or python
|
|
62
|
+
- python version if installed via pip or pypi
|
|
63
|
+
|
|
64
|
+
## Additional context
|
|
65
|
+
|
|
66
|
+
Add any other context about the problem here.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Feature request
|
|
3
|
+
about: Suggest an idea for this project
|
|
4
|
+
title: ""
|
|
5
|
+
labels: ""
|
|
6
|
+
assignees: ""
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
**Is your feature request related to a problem? Please describe.**
|
|
10
|
+
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
|
11
|
+
|
|
12
|
+
**Describe the solution you'd like**
|
|
13
|
+
A clear and concise description of what you want to happen.
|
|
14
|
+
|
|
15
|
+
**Describe alternatives you've considered**
|
|
16
|
+
A clear and concise description of any alternative solutions or features you've considered.
|
|
17
|
+
|
|
18
|
+
**Additional context**
|
|
19
|
+
Add any other context or screenshots about the feature request here.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# To get started with Dependabot version updates, you'll need to specify which
|
|
2
|
+
# package ecosystems to update and where the package manifests are located.
|
|
3
|
+
# Please see the documentation for all configuration options:
|
|
4
|
+
# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
|
|
5
|
+
|
|
6
|
+
version: 2
|
|
7
|
+
updates:
|
|
8
|
+
- package-ecosystem: "" # See documentation for possible values
|
|
9
|
+
directory: / # Location of package manifests
|
|
10
|
+
schedule:
|
|
11
|
+
interval: weekly
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
name: codecov
|
|
2
|
+
permissions: read-all
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: main
|
|
6
|
+
# Publish semver tags as releases.
|
|
7
|
+
tags: [v*.*.*]
|
|
8
|
+
pull_request:
|
|
9
|
+
branches: main
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
run:
|
|
13
|
+
runs-on: ubuntu-latest
|
|
14
|
+
steps:
|
|
15
|
+
- name: Checkout
|
|
16
|
+
uses: actions/checkout@v4
|
|
17
|
+
- name: Set up Python 3.11.5
|
|
18
|
+
uses: actions/setup-python@v4
|
|
19
|
+
with:
|
|
20
|
+
python-version: 3.11.5
|
|
21
|
+
- name: install poetry
|
|
22
|
+
uses: abatilo/actions-poetry@v2
|
|
23
|
+
with:
|
|
24
|
+
poetry-version: 1.4.1
|
|
25
|
+
- name: Install dependencies
|
|
26
|
+
run: poetry install --with test
|
|
27
|
+
- name: create required folder
|
|
28
|
+
run: mkdir -p /home/runner/.config/ofscraper/main_profile
|
|
29
|
+
- name: Run tests and collect coverage
|
|
30
|
+
run: poetry run pytest --cov-report term --cov-report xml:coverage.xml --cov=src
|
|
31
|
+
- name: Upload coverage to Codecov
|
|
32
|
+
uses: codecov/codecov-action@v3
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
name: Build and Package
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
- '**'
|
|
7
|
+
tags-ignore:
|
|
8
|
+
- '**'
|
|
9
|
+
|
|
10
|
+
permissions:
|
|
11
|
+
contents: read # Required for git checkout and gh CLI to read workflow runs
|
|
12
|
+
|
|
13
|
+
jobs:
|
|
14
|
+
generate_version:
|
|
15
|
+
name: Generate Version Info
|
|
16
|
+
runs-on: ubuntu-latest
|
|
17
|
+
env:
|
|
18
|
+
GH_TOKEN: ${{ github.token }}
|
|
19
|
+
GITHUB_REPOSITORY: ${{ github.repository }}
|
|
20
|
+
GITHUB_REF: ${{ github.ref }}
|
|
21
|
+
GITHUB_EVENT_BEFORE: ${{ github.event.before }}
|
|
22
|
+
outputs:
|
|
23
|
+
version: ${{ steps.version.outputs.VERSION }}
|
|
24
|
+
sanitized_version: ${{ steps.version.outputs.SANITIZED_VERSION }}
|
|
25
|
+
short_hash: ${{ steps.version.outputs.SHORT_HASH }}
|
|
26
|
+
long_hash: ${{ steps.version.outputs.LONG_HASH }}
|
|
27
|
+
commit_timestamp: ${{ steps.version.outputs.COMMIT_TIMESTAMP }}
|
|
28
|
+
base_version: ${{ steps.version.outputs.BASE_VERSION }}
|
|
29
|
+
push_type: ${{ steps.version.outputs.PUSH_TYPE }}
|
|
30
|
+
is_newer_than_last_successful_run: ${{ steps.version.outputs.IS_NEWER_THAN_LAST_SUCCESSFUL_RUN }}
|
|
31
|
+
steps:
|
|
32
|
+
- name: Checkout Code
|
|
33
|
+
uses: actions/checkout@v4
|
|
34
|
+
with:
|
|
35
|
+
fetch-depth: 0 # Essential for git merge-base to compare full history
|
|
36
|
+
fetch-tags: true
|
|
37
|
+
|
|
38
|
+
- name: Make script executable
|
|
39
|
+
run: chmod +x ./scripts/commit_version.sh
|
|
40
|
+
- name: Generate Version and Git Info
|
|
41
|
+
id: version # This step runs your commit_version.sh script
|
|
42
|
+
# Pass GitHub Actions context variables as environment variables to the script
|
|
43
|
+
run: ./scripts/commit_version.sh
|
|
44
|
+
|
|
45
|
+
build_binaries:
|
|
46
|
+
name: Build on ${{ matrix.os }}
|
|
47
|
+
needs: [generate_version]
|
|
48
|
+
runs-on: ${{ matrix.os }}
|
|
49
|
+
|
|
50
|
+
strategy:
|
|
51
|
+
fail-fast: false # <-- ADDED: Allows all OS builds to complete even if one fails
|
|
52
|
+
matrix:
|
|
53
|
+
os: [ubuntu-latest, windows-latest, macos-latest]
|
|
54
|
+
include:
|
|
55
|
+
- os: ubuntu-latest
|
|
56
|
+
artifact_suffix: linux
|
|
57
|
+
shell: bash
|
|
58
|
+
- os: windows-latest
|
|
59
|
+
artifact_suffix: windows
|
|
60
|
+
shell: pwsh
|
|
61
|
+
- os: macos-latest
|
|
62
|
+
artifact_suffix: macos
|
|
63
|
+
shell: bash
|
|
64
|
+
|
|
65
|
+
steps:
|
|
66
|
+
- name: Checkout Code
|
|
67
|
+
uses: actions/checkout@v4
|
|
68
|
+
with:
|
|
69
|
+
fetch-depth: 0
|
|
70
|
+
fetch-tags: true
|
|
71
|
+
- name: Set up Python
|
|
72
|
+
uses: actions/setup-python@v5
|
|
73
|
+
with:
|
|
74
|
+
python-version: 3.12.0
|
|
75
|
+
- name: Install uv
|
|
76
|
+
uses: astral-sh/setup-uv@v1
|
|
77
|
+
|
|
78
|
+
- name: Set Version Environment Variables
|
|
79
|
+
shell: bash
|
|
80
|
+
run: |
|
|
81
|
+
echo "SETUPTOOLS_SCM_PRETEND_VERSION=${{ needs.generate_version.outputs.version }}" >> $GITHUB_ENV
|
|
82
|
+
echo "HATCH_VCS_PRETEND_VERSION=${{ needs.generate_version.outputs.version }}" >> $GITHUB_ENV
|
|
83
|
+
|
|
84
|
+
- name: Install Dependencies and Build Tools
|
|
85
|
+
shell: bash
|
|
86
|
+
run: |
|
|
87
|
+
uv venv
|
|
88
|
+
if [ "${{ runner.os }}" == "Windows" ]; then
|
|
89
|
+
. .venv/Scripts/activate
|
|
90
|
+
else
|
|
91
|
+
source .venv/bin/activate
|
|
92
|
+
fi
|
|
93
|
+
uv sync --verbose --extra ffmpeg --extra dev
|
|
94
|
+
|
|
95
|
+
- name: Set UTF-8 environment (Windows)
|
|
96
|
+
if: runner.os == 'Windows'
|
|
97
|
+
run: |
|
|
98
|
+
echo "PYTHONUTF8=1" >> $env:GITHUB_ENV
|
|
99
|
+
echo "PYTHONLEGACYWINDOWSSTDIO=utf8" >> $env:GITHUB_ENV
|
|
100
|
+
shell: pwsh
|
|
101
|
+
|
|
102
|
+
- name: Build Executable using Spec Files (One-File)
|
|
103
|
+
id: build_onefile
|
|
104
|
+
shell: bash
|
|
105
|
+
continue-on-error: true # <-- ADDED: Allows this step to fail without stopping this OS matrix axis
|
|
106
|
+
run: |
|
|
107
|
+
SANITIZED_VERSION="${{ needs.generate_version.outputs.sanitized_version }}"
|
|
108
|
+
EXE_NAME="ofscraper_${{ matrix.artifact_suffix }}_${SANITIZED_VERSION}"
|
|
109
|
+
|
|
110
|
+
if [ "${{ runner.os }}" == "Windows" ]; then
|
|
111
|
+
source .venv/Scripts/activate
|
|
112
|
+
EXE_EXT=".exe"
|
|
113
|
+
else
|
|
114
|
+
source .venv/bin/activate
|
|
115
|
+
EXE_EXT=""
|
|
116
|
+
fi
|
|
117
|
+
|
|
118
|
+
echo "Building one-file executable from specs/onefile.spec..."
|
|
119
|
+
pyinstaller specs/onefile.spec
|
|
120
|
+
mv dist/ofscraper_file${EXE_EXT} dist/${EXE_NAME}${EXE_EXT}
|
|
121
|
+
echo "one_file_path=dist/${EXE_NAME}${EXE_EXT}" >> $GITHUB_OUTPUT
|
|
122
|
+
echo "one_file_name=${EXE_NAME}${EXE_EXT}" >> $GITHUB_OUTPUT
|
|
123
|
+
|
|
124
|
+
- name: Upload One-File Artifact
|
|
125
|
+
uses: actions/upload-artifact@v4
|
|
126
|
+
with:
|
|
127
|
+
name: ${{ steps.build_onefile.outputs.one_file_name }}
|
|
128
|
+
path: ${{ steps.build_onefile.outputs.one_file_path }}
|
|
129
|
+
if-no-files-found: ignore # Ensures upload step doesn't fail if previous build step failed
|
|
130
|
+
|
|
131
|
+
- name: Build and Zip One-Dir Bundle
|
|
132
|
+
id: build_onedir_zip
|
|
133
|
+
shell: bash
|
|
134
|
+
continue-on-error: true # Already present: Allows this step to fail without stopping this OS matrix axis
|
|
135
|
+
run: |
|
|
136
|
+
SANITIZED_VERSION="${{ needs.generate_version.outputs.sanitized_version }}"
|
|
137
|
+
DIR_NAME="ofscraper_${{ matrix.artifact_suffix }}_dir"
|
|
138
|
+
ZIP_NAME="ofscraper_${{ matrix.artifact_suffix }}_${SANITIZED_VERSION}.zip"
|
|
139
|
+
|
|
140
|
+
if [ "${{ runner.os }}" == "Windows" ]; then
|
|
141
|
+
source .venv/Scripts/activate
|
|
142
|
+
else
|
|
143
|
+
source .venv/bin/activate
|
|
144
|
+
fi
|
|
145
|
+
|
|
146
|
+
echo "Building one-dir bundle from specs/onedir.spec..."
|
|
147
|
+
pyinstaller specs/onedir.spec
|
|
148
|
+
mv dist/ofscraper_dir dist/${DIR_NAME}
|
|
149
|
+
|
|
150
|
+
echo "Zipping one-dir build..."
|
|
151
|
+
if [ "${{ runner.os }}" == "Windows" ]; then
|
|
152
|
+
powershell -Command "Compress-Archive -Path dist/${DIR_NAME} -DestinationPath dist/${ZIP_NAME} -Force"
|
|
153
|
+
else
|
|
154
|
+
zip -r "dist/${ZIP_NAME}" "dist/${DIR_NAME}"
|
|
155
|
+
fi
|
|
156
|
+
echo "zip_path=dist/${ZIP_NAME}" >> $GITHUB_OUTPUT
|
|
157
|
+
echo "zip_name=${ZIP_NAME}" >> $GITHUB_OUTPUT
|
|
158
|
+
echo "dir_path=dist/${DIR_NAME}" >> $GITHUB_OUTPUT
|
|
159
|
+
echo "dir_name=dist/${DIR_NAME}" >> $GITHUB_OUTPUT
|
|
160
|
+
|
|
161
|
+
- name: Upload Zipped One-Dir Artifact
|
|
162
|
+
if: success() && steps.build_onedir_zip.outcome == 'success'
|
|
163
|
+
uses: actions/upload-artifact@v4
|
|
164
|
+
with:
|
|
165
|
+
name: ${{ steps.build_onedir_zip.outputs.zip_name }}
|
|
166
|
+
path: ${{ steps.build_onedir_zip.outputs.zip_path }}
|
|
167
|
+
if-no-files-found: ignore # Ensures upload step doesn't fail if previous build step failed
|
|
168
|
+
|
|
169
|
+
- name: Upload One-Dir Folder (if zip failed)
|
|
170
|
+
if: failure() && steps.build_onedir_zip.outcome == 'failure'
|
|
171
|
+
uses: actions/upload-artifact@v4
|
|
172
|
+
with:
|
|
173
|
+
name: ${{ steps.build_onedir_zip.outputs.dir_name }}
|
|
174
|
+
path: ${{ steps.build_onedir_zip.outputs.dir_path }}
|
|
175
|
+
if-no-files-found: ignore # Ensures upload step doesn't fail if previous build step failed
|
|
176
|
+
|
|
177
|
+
publish_release:
|
|
178
|
+
name: Publish GitHub Release
|
|
179
|
+
if: github.event_name == 'push' && !contains(github.ref, 'refs/tags/')
|
|
180
|
+
needs: [build_binaries, generate_version] # Waits for version info AND all binary builds to complete (even partially)
|
|
181
|
+
runs-on: ubuntu-latest
|
|
182
|
+
permissions:
|
|
183
|
+
contents: write # Required to create/update GitHub Releases
|
|
184
|
+
steps:
|
|
185
|
+
- name: Download all build artifacts
|
|
186
|
+
uses: actions/download-artifact@v4
|
|
187
|
+
with:
|
|
188
|
+
path: artifacts/
|
|
189
|
+
# No specific `if-no-files-found` here on download-artifact, it will download what's available
|
|
190
|
+
# and log warnings for missing ones by default.
|
|
191
|
+
|
|
192
|
+
- name: List downloaded files for debugging
|
|
193
|
+
run: ls -R artifacts
|
|
194
|
+
|
|
195
|
+
- name: Create or Update Release
|
|
196
|
+
uses: ncipollo/release-action@v1
|
|
197
|
+
with:
|
|
198
|
+
artifacts: artifacts/*/* # Attach any downloaded artifacts (will include only those that were built successfully)
|
|
199
|
+
# Combined tag for uniqueness and chronological sorting
|
|
200
|
+
tag: "${{ needs.generate_version.outputs.base_version }}-${{ needs.generate_version.outputs.short_hash }}-${{ needs.generate_version.outputs.commit_timestamp }}"
|
|
201
|
+
# Human-readable name with all key details
|
|
202
|
+
name: "Dev Build ${{ needs.generate_version.outputs.base_version }} (Commit ${{ needs.generate_version.outputs.short_hash }}) - ${{ needs.generate_version.outputs.commit_timestamp }}"
|
|
203
|
+
|
|
204
|
+
body: "This is an auto-generated development release created from commit hash `${{ needs.generate_version.outputs.long_hash }}`. Version: `${{ needs.generate_version.outputs.version }}`"
|
|
205
|
+
commit: "${{ needs.generate_version.outputs.long_hash }}"
|
|
206
|
+
allowUpdates: true
|
|
207
|
+
prerelease: true
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
name: Docker Daily Build
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
- '**'
|
|
7
|
+
tags-ignore:
|
|
8
|
+
- '**'
|
|
9
|
+
|
|
10
|
+
permissions:
|
|
11
|
+
contents: read
|
|
12
|
+
packages: write
|
|
13
|
+
id-token: write
|
|
14
|
+
|
|
15
|
+
jobs:
|
|
16
|
+
generate_version:
|
|
17
|
+
name: Generate Version Info
|
|
18
|
+
runs-on: ubuntu-latest
|
|
19
|
+
outputs:
|
|
20
|
+
version: ${{ steps.version.outputs.VERSION }}
|
|
21
|
+
short_hash: ${{ steps.version.outputs.SHORT_HASH }}
|
|
22
|
+
commit_timestamp: ${{ steps.version.outputs.COMMIT_TIMESTAMP }}
|
|
23
|
+
base_version: ${{ steps.version.outputs.BASE_VERSION }}
|
|
24
|
+
is_newer_than_last_successful_run: ${{ steps.version.outputs.IS_NEWER_THAN_LAST_SUCCESSFUL_RUN }}
|
|
25
|
+
steps:
|
|
26
|
+
- name: Checkout Code
|
|
27
|
+
uses: actions/checkout@v4
|
|
28
|
+
with:
|
|
29
|
+
fetch-depth: 0
|
|
30
|
+
fetch-tags: true
|
|
31
|
+
|
|
32
|
+
- name: Make script executable
|
|
33
|
+
run: chmod +x ./scripts/commit_version.sh
|
|
34
|
+
- name: Generate Version and Git Info
|
|
35
|
+
id: version
|
|
36
|
+
env:
|
|
37
|
+
GH_TOKEN: ${{ github.token }}
|
|
38
|
+
GITHUB_REPOSITORY: ${{ github.repository }}
|
|
39
|
+
GITHUB_WORKFLOW_REF: ${{ github.workflow_ref }} # Still pass for general info, but not for WORKFLOW_ID now
|
|
40
|
+
GITHUB_REF: ${{ github.ref }}
|
|
41
|
+
GITHUB_EVENT_BEFORE: ${{ github.event.before }}
|
|
42
|
+
run: ./scripts/commit_version.sh
|
|
43
|
+
|
|
44
|
+
build_and_publish_docker:
|
|
45
|
+
name: Build and Publish Docker to ${{ matrix.registry.name }}
|
|
46
|
+
needs: [generate_version]
|
|
47
|
+
runs-on: ubuntu-latest
|
|
48
|
+
|
|
49
|
+
strategy:
|
|
50
|
+
fail-fast: false
|
|
51
|
+
matrix:
|
|
52
|
+
registry:
|
|
53
|
+
- id: ghcr
|
|
54
|
+
name: GitHub Packages
|
|
55
|
+
sign: false
|
|
56
|
+
- id: dockerhub
|
|
57
|
+
name: Docker Hub
|
|
58
|
+
sign: true
|
|
59
|
+
|
|
60
|
+
steps:
|
|
61
|
+
- name: Checkout repository
|
|
62
|
+
uses: actions/checkout@v4
|
|
63
|
+
|
|
64
|
+
- name: Set up QEMU
|
|
65
|
+
uses: docker/setup-qemu-action@v3
|
|
66
|
+
- name: Set up Docker Buildx
|
|
67
|
+
uses: docker/setup-buildx-action@v3
|
|
68
|
+
|
|
69
|
+
- name: Log in to ${{ matrix.registry.name }}
|
|
70
|
+
uses: docker/login-action@v3
|
|
71
|
+
with:
|
|
72
|
+
registry: ${{ matrix.registry.id == 'ghcr' && 'ghcr.io' || 'docker.io' }}
|
|
73
|
+
username: ${{ matrix.registry.id == 'ghcr' && github.actor || secrets.DOCKERHUB_USERNAME }}
|
|
74
|
+
password: ${{ matrix.registry.id == 'ghcr' && secrets.GITHUB_TOKEN || secrets.DOCKERHUB_TOKEN }}
|
|
75
|
+
|
|
76
|
+
- name: Extract Docker metadata
|
|
77
|
+
id: meta
|
|
78
|
+
uses: docker/metadata-action@v5
|
|
79
|
+
with:
|
|
80
|
+
images: ${{ matrix.registry.id == 'ghcr' && format('ghcr.io/{0}', github.repository) || 'datawhores/of-scraper' }}
|
|
81
|
+
tags: |
|
|
82
|
+
type=ref,event=branch
|
|
83
|
+
type=raw,value=${{ needs.generate_version.outputs.base_version }}-${{ needs.generate_version.outputs.short_hash }}-${{ needs.generate_version.outputs.commit_timestamp }}
|
|
84
|
+
type=raw,value=${{ needs.generate_version.outputs.base_version }}-${{ needs.generate_version.outputs.short_hash }}
|
|
85
|
+
type=raw,value=latest,enable=${{ needs.generate_version.outputs.is_newer_than_last_successful_run }}
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
- name: Build and push Docker image
|
|
89
|
+
id: build-and-push
|
|
90
|
+
uses: docker/build-push-action@v5
|
|
91
|
+
with:
|
|
92
|
+
context: .
|
|
93
|
+
push: true
|
|
94
|
+
tags: ${{ steps.meta.outputs.tags }}
|
|
95
|
+
labels: ${{ steps.meta.outputs.labels }}
|
|
96
|
+
cache-from: type=gha
|
|
97
|
+
cache-to: type=gha,mode=max
|
|
98
|
+
platforms: linux/amd64,linux/arm64
|
|
99
|
+
build-args: |
|
|
100
|
+
BUILD_VERSION=${{ needs.generate_version.outputs.version }}
|
|
101
|
+
INSTALL_FFMPEG=true
|
|
102
|
+
|
|
103
|
+
- name: Install Cosign
|
|
104
|
+
if: matrix.registry.sign == true
|
|
105
|
+
uses: sigstore/cosign-installer@v3.5.0
|
|
106
|
+
|
|
107
|
+
- name: Write signing key to disk
|
|
108
|
+
if: matrix.registry.sign == true
|
|
109
|
+
run: echo "${{ secrets.COSIGN_PRIVATE_KEY }}" > cosign.key
|
|
110
|
+
shell: bash
|
|
111
|
+
|
|
112
|
+
- name: Sign the published Docker image
|
|
113
|
+
if: matrix.registry.sign == true
|
|
114
|
+
env:
|
|
115
|
+
COSIGN_PASSWORD: ${{ secrets.COSIGN_PASSWORD }}
|
|
116
|
+
COSIGN_EXPERIMENTAL: "true"
|
|
117
|
+
run: echo "${{ steps.meta.outputs.tags }}" | xargs -I {} cosign sign --yes --key cosign.key {}@${{ steps.build-and-push.outputs.digest }}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
name: Docker Purge
|
|
2
|
+
on:
|
|
3
|
+
workflow_dispatch:
|
|
4
|
+
schedule:
|
|
5
|
+
- cron: "0 0 * * *" # every day at midnight
|
|
6
|
+
permissions: read-all
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
cleanup:
|
|
10
|
+
runs-on: ubuntu-latest
|
|
11
|
+
permissions:
|
|
12
|
+
contents: read
|
|
13
|
+
packages: write
|
|
14
|
+
# This is used to complete the identity challenge
|
|
15
|
+
# with sigstore/fulcio when running outside of PRs.
|
|
16
|
+
id-token: write
|
|
17
|
+
|
|
18
|
+
steps:
|
|
19
|
+
- name: Main purger
|
|
20
|
+
uses: snok/container-retention-policy@v2
|
|
21
|
+
with:
|
|
22
|
+
image-names: of-scraper
|
|
23
|
+
timestamp-to-use: created_at
|
|
24
|
+
account-type: personal
|
|
25
|
+
token: ${{ secrets.DOCKER_DELETE}}
|
|
26
|
+
filter-tags: sha*
|
|
27
|
+
cut-off: 1 second ago UTC
|
|
28
|
+
- name: Delete untagged
|
|
29
|
+
uses: snok/container-retention-policy@v2
|
|
30
|
+
with:
|
|
31
|
+
image-names: of-scraper
|
|
32
|
+
cut-off: 1 second ago UTC
|
|
33
|
+
account-type: personal
|
|
34
|
+
token: ${{ secrets.DOCKER_DELETE}}
|
|
35
|
+
untagged-only: true
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
# .github/workflows/package-builder-release.yml
|
|
2
|
+
# checkov:skip=CKV_GHA_7: "The workflow_dispatch inputs are intentionally used for a controlled manual release process. 'version' specifically targets a Git tag/ref, and boolean flags control trusted build/publish steps. This setup does not introduce arbitrary code execution risks."
|
|
3
|
+
name: Package Builder Release
|
|
4
|
+
|
|
5
|
+
on:
|
|
6
|
+
workflow_dispatch:
|
|
7
|
+
inputs:
|
|
8
|
+
version:
|
|
9
|
+
description: 'The exact git tag to build (e.g., v8.4.1 or v8.4.1-alpha.1). Leave empty to auto-derive from latest Git tag.'
|
|
10
|
+
required: true
|
|
11
|
+
type: string
|
|
12
|
+
files:
|
|
13
|
+
description: 'Build binary files? (t/f)'
|
|
14
|
+
required: true
|
|
15
|
+
type: boolean
|
|
16
|
+
pip:
|
|
17
|
+
description: 'Publish to PyPI? (t/f)'
|
|
18
|
+
required: true
|
|
19
|
+
type: boolean
|
|
20
|
+
docker:
|
|
21
|
+
description: 'Publish to Docker Hub & GHCR (t/f)'
|
|
22
|
+
required: true
|
|
23
|
+
type: boolean
|
|
24
|
+
|
|
25
|
+
permissions:
|
|
26
|
+
contents: write # Needed for checkout, creating releases
|
|
27
|
+
packages: write # Needed for pushing to GHCR/Docker Hub
|
|
28
|
+
id-token: write # For OIDC, used by cosign, and CRUCIAL for GHCR authentication
|
|
29
|
+
actions: write # Needed for gh CLI to upload/download workflow artifacts (for retries)
|
|
30
|
+
|
|
31
|
+
jobs:
|
|
32
|
+
determine_tags_and_versions:
|
|
33
|
+
name: Determine Release Info and Tagging Logic
|
|
34
|
+
runs-on: ubuntu-latest
|
|
35
|
+
permissions:
|
|
36
|
+
actions: read # Needed to list workflow runs and jobs
|
|
37
|
+
contents: read # For checkout
|
|
38
|
+
outputs:
|
|
39
|
+
long_hash: ${{ steps.release_info.outputs.long_hash }}
|
|
40
|
+
short_hash: ${{ steps.release_info.outputs.short_hash }}
|
|
41
|
+
package_version: ${{ steps.release_info.outputs.package_version }}
|
|
42
|
+
is_stable_release: ${{ steps.release_info.outputs.is_stable_release }}
|
|
43
|
+
is_dev_release: ${{ steps.release_info.outputs.is_dev_release }}
|
|
44
|
+
commit_timestamp: ${{ steps.release_info.outputs.commit_timestamp }}
|
|
45
|
+
steps:
|
|
46
|
+
- name: Checkout Code (Optional Version or Current Branch)
|
|
47
|
+
uses: actions/checkout@v4
|
|
48
|
+
with:
|
|
49
|
+
ref: ${{ inputs.version || github.ref }} # Checkout the specified tag/ref or default branch
|
|
50
|
+
fetch-depth: 0 # Needed for git log and tag comparisons
|
|
51
|
+
fetch-tags: true
|
|
52
|
+
|
|
53
|
+
- name: Make release_version.sh executable
|
|
54
|
+
run: chmod +x ./scripts/release_version.sh
|
|
55
|
+
|
|
56
|
+
- name: Get Release Info from Script
|
|
57
|
+
id: release_info
|
|
58
|
+
env:
|
|
59
|
+
INPUT_VERSION: ${{ inputs.version }}
|
|
60
|
+
run: ./scripts/release_version.sh
|
|
61
|
+
|
|
62
|
+
determine_docker_latest_logic:
|
|
63
|
+
name: Determine Docker Latest Tag Logic
|
|
64
|
+
needs: [determine_tags_and_versions]
|
|
65
|
+
if: ${{ inputs.docker }}
|
|
66
|
+
runs-on: ubuntu-latest
|
|
67
|
+
permissions:
|
|
68
|
+
actions: read
|
|
69
|
+
contents: read
|
|
70
|
+
outputs:
|
|
71
|
+
should_apply_stable_latest: ${{ steps.run_python_logic.outputs.should_apply_stable_latest }}
|
|
72
|
+
should_apply_dev_latest: ${{ steps.run_python_logic.outputs.should_apply_dev_latest }}
|
|
73
|
+
steps:
|
|
74
|
+
- name: Checkout repository for script
|
|
75
|
+
uses: actions/checkout@v4
|
|
76
|
+
with:
|
|
77
|
+
ref: ${{ github.sha }}
|
|
78
|
+
|
|
79
|
+
- name: Set up Python
|
|
80
|
+
uses: actions/setup-python@v5
|
|
81
|
+
with:
|
|
82
|
+
python-version: '3.12'
|
|
83
|
+
|
|
84
|
+
- name: Install Python dependencies
|
|
85
|
+
run: pip install requests
|
|
86
|
+
|
|
87
|
+
- name: Execute Latest Tag Logic Script
|
|
88
|
+
id: run_python_logic
|
|
89
|
+
run: python scripts/determine_docker_stable_dev_tags.py \
|
|
90
|
+
"${{ needs.outputs.commit_timestamp }}" \
|
|
91
|
+
"${{ needs.determine_tags_and_versions.outputs.is_stable_release }}" \
|
|
92
|
+
"${{ needs.determine_tags_and_versions.outputs.is_dev_release }}"
|
|
93
|
+
env:
|
|
94
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
95
|
+
GITHUB_REPOSITORY: ${{ github.repository }}
|
|
96
|
+
GITHUB_WORKFLOW_REF: ${{ github.workflow_ref }}
|
|
97
|
+
|
|
98
|
+
pypi:
|
|
99
|
+
needs: [determine_tags_and_versions]
|
|
100
|
+
if: ${{ inputs.pip }}
|
|
101
|
+
runs-on: ubuntu-latest
|
|
102
|
+
name: Create PyPI Package
|
|
103
|
+
permissions:
|
|
104
|
+
id-token: write
|
|
105
|
+
steps:
|
|
106
|
+
- name: Checkout
|
|
107
|
+
uses: actions/checkout@v4
|
|
108
|
+
with:
|
|
109
|
+
fetch-depth: 0
|
|
110
|
+
fetch-tags: true
|
|
111
|
+
ref: ${{ inputs.version || github.ref }}
|
|
112
|
+
- run: git checkout ${{ needs.determine_tags_and_versions.outputs.long_hash }}
|
|
113
|
+
- name: Set up Python
|
|
114
|
+
uses: actions/setup-python@v4
|
|
115
|
+
with:
|
|
116
|
+
python-version: 3.11.5
|
|
117
|
+
- name: Install uv
|
|
118
|
+
uses: astral-sh/setup-uv@v4
|
|
119
|
+
|
|
120
|
+
- name: Install Build and Publish Tools
|
|
121
|
+
run: uv pip install hatch twine
|
|
122
|
+
- name: Build Package with Hatch
|
|
123
|
+
run: |
|
|
124
|
+
PACKAGE_VERSION="${{ needs.determine_tags_and_versions.outputs.package_version }}"
|
|
125
|
+
echo "Setting package version to $PACKAGE_VERSION" >> "$GITHUB_ENV" # Corrected output to GITHUB_ENV for env vars
|
|
126
|
+
echo "HATCH_VCS_PRETEND_VERSION=$PACKAGE_VERSION" >> "$GITHUB_ENV" # Corrected output to GITHUB_ENV for env vars
|
|
127
|
+
hatch build
|
|
128
|
+
shell: bash
|
|
129
|
+
|
|
130
|
+
- name: Publish to PyPI with Twine
|
|
131
|
+
env:
|
|
132
|
+
TWINE_USERNAME: __token__
|
|
133
|
+
TWINE_PASSWORD: ${{ secrets.pypi }}
|
|
134
|
+
run: twine upload "dist/*"
|
|
135
|
+
shell: bash
|
|
136
|
+
|
|
137
|
+
call_binaries_build_and_release:
|
|
138
|
+
name: Build & Release Binaries
|
|
139
|
+
needs: [determine_tags_and_versions]
|
|
140
|
+
if: ${{ inputs.files }}
|
|
141
|
+
uses: ./.github/workflows/publish-release-binaries.yml
|
|
142
|
+
with:
|
|
143
|
+
input_version: ${{ inputs.version }}
|
|
144
|
+
package_version: ${{ needs.determine_tags_and_versions.outputs.package_version }}
|
|
145
|
+
long_hash: ${{ needs.determine_tags_and_versions.outputs.long_hash }}
|
|
146
|
+
|
|
147
|
+
call_docker_publish:
|
|
148
|
+
name: Publish Docker Images
|
|
149
|
+
needs: [determine_tags_and_versions, determine_docker_latest_logic]
|
|
150
|
+
if: ${{ inputs.docker }}
|
|
151
|
+
uses: ./.github/workflows/publish-release-dockers.yml
|
|
152
|
+
secrets:
|
|
153
|
+
DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }}
|
|
154
|
+
DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
|
|
155
|
+
COSIGN_PASSWORD: ${{ secrets.COSIGN_PASSWORD }}
|
|
156
|
+
COSIGN_PRIVATE_KEY: ${{ secrets.COSIGN_PRIVATE_KEY }}
|
|
157
|
+
with:
|
|
158
|
+
input_version: ${{ inputs.version }}
|
|
159
|
+
package_version: ${{ needs.determine_tags_and_versions.outputs.package_version }}
|
|
160
|
+
long_hash: ${{ needs.determine_tags_and_versions.outputs.long_hash }}
|
|
161
|
+
is_stable_release: true
|
|
162
|
+
should_apply_stable_latest: true
|
|
163
|
+
should_apply_dev_latest: ${{ needs.determine_docker_latest_logic.outputs.should_apply_dev_latest }}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
name: Delete Package
|
|
2
|
+
permissions: read-all
|
|
3
|
+
on:
|
|
4
|
+
workflow_dispatch:
|
|
5
|
+
jobs:
|
|
6
|
+
cleanup:
|
|
7
|
+
runs-on: ubuntu-latest
|
|
8
|
+
permissions:
|
|
9
|
+
contents: read
|
|
10
|
+
packages: write
|
|
11
|
+
# This is used to complete the identity challenge
|
|
12
|
+
# with sigstore/fulcio when running outside of PRs.
|
|
13
|
+
id-token: write
|
|
14
|
+
steps:
|
|
15
|
+
- uses: snok/container-retention-policy@v2
|
|
16
|
+
with:
|
|
17
|
+
image-names: ofscraper
|
|
18
|
+
cut-off: two hours ago UTC+2
|
|
19
|
+
timestamp-to-use: updated_at
|
|
20
|
+
account-type: personal
|
|
21
|
+
keep-at-least: 10
|
|
22
|
+
skip-tags: latest,1.*
|
|
23
|
+
token: ${{ secrets.DOCKER_DELETE}}
|