ofscraper 3.13.dev10__tar.gz → 3.13.dev12__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.dev12/.dockerignore +28 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/.github/workflows/commit_bundler.yml +1 -1
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/.github/workflows/docker-daily.yml +20 -14
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/.github/workflows/package-builder-release.yml +1 -2
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/.github/workflows/publish-release-dockers.yml +4 -9
- ofscraper-3.13.dev12/.gitignore +69 -0
- ofscraper-3.13.dev12/Dockerfile +70 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/PKG-INFO +1 -1
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/docker-compose.yml +13 -2
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/classes/sessionmanager/sessionmanager.py +2 -2
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/commands/scraper/actions/download/utils/keyhelpers.py +4 -101
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/const/values/general.py +1 -1
- ofscraper-3.13.dev12/ofscraper/const/values/url/other_url.py +6 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/main/open/load.py +0 -4
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/prompts/prompt_groups/auth.py +62 -61
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/prompts/prompt_groups/config.py +0 -7
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/args/parse/arguments/advanced_program.py +0 -9
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/args/parse/groups/advanced_program.py +0 -2
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/auth/file.py +39 -10
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/auth/make.py +5 -6
- ofscraper-3.13.dev12/ofscraper/utils/auth/utils/error.py +76 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/checkers.py +0 -11
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/config/data.py +0 -12
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/config/schema.py +2 -3
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/settings.py +0 -1
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/pyproject.toml +0 -4
- ofscraper-3.13.dev12/scripts/entry/entrypoint.sh +54 -0
- ofscraper-3.13.dev12/scripts/entry/lib_paths.sh +38 -0
- ofscraper-3.13.dev12/scripts/entry/lib_permissions.sh +48 -0
- ofscraper-3.13.dev12/scripts/entry/lib_user_setup.sh +159 -0
- ofscraper-3.13.dev12/specs/onedir.spec +56 -0
- ofscraper-3.13.dev12/specs/onefile.spec +57 -0
- ofscraper-3.13.dev10/.gitignore +0 -156
- ofscraper-3.13.dev10/Dockerfile +0 -65
- ofscraper-3.13.dev10/ofscraper/__version__.pye +0 -23
- ofscraper-3.13.dev10/ofscraper/const/values/url/other_url.py +0 -12
- ofscraper-3.13.dev10/ofscraper/utils/auth/utils/context.py +0 -52
- ofscraper-3.13.dev10/scripts/entrypoint.sh +0 -17
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/.gitattributes +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/.github/actions/retry-artifact-operation/action.yml +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/.github/dependabot.yml +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/.github/workflows/codecov.yml +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/.github/workflows/docker-purge.yml +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/.github/workflows/package-delete.yml +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/.github/workflows/publish-release-binaries.yml +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/.gitmodules +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/CHANGES.md +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/LICENSE +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/README.md +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/cosign.pub +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/crypto +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/donate/btc +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/donate/eth +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/media/browser_tools_open.png +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/media/dp.png +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/media/example.png +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/media/headers.png +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/media/icon.png +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/media/init.png +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/media/list_or_username.png +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/media/main_menu.png +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/media/network_tab.png +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/media/request_headers.png +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/media/xhr_tab.png +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/__main__.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/__version__.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/classes/labels.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/classes/of/base.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/classes/of/media.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/classes/of/posts.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/classes/placeholder.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/classes/sessionmanager/download.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/classes/sessionmanager/ofsession.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/classes/table/app.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/classes/table/compose.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/classes/table/const.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/classes/table/css.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/classes/table/fields/boolfield.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/classes/table/fields/datefield.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/classes/table/fields/downloadfield.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/classes/table/fields/mediafield.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/classes/table/fields/numfield.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/classes/table/fields/pricefield.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/classes/table/fields/responsefield.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/classes/table/fields/selectfield.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/classes/table/fields/sizefield.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/classes/table/fields/textsearch.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/classes/table/fields/timefield.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/classes/table/inputs/filterinput.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/classes/table/inputs/intergerinput.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/classes/table/inputs/strinput.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/classes/table/sections/sidebar.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/classes/table/sections/table.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/classes/table/sections/table_console.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/classes/table/utils/lock.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/classes/table/utils/names.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/commands/check.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/commands/db.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/commands/manual.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/commands/metadata/consumer.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/commands/metadata/desc.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/commands/metadata/manager.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/commands/metadata/metadata.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/commands/scraper/actions/download/download.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/commands/scraper/actions/download/managers/alt_download.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/commands/scraper/actions/download/managers/downloadmanager.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/commands/scraper/actions/download/managers/main_download.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/commands/scraper/actions/download/run.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/commands/scraper/actions/download/utils/chunk.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/commands/scraper/actions/download/utils/desc.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/commands/scraper/actions/download/utils/ffmpeg.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/commands/scraper/actions/download/utils/leaky.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/commands/scraper/actions/download/utils/retries.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/commands/scraper/actions/download/utils/text.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/commands/scraper/actions/like/like.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/commands/scraper/actions/utils/buffer.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/commands/scraper/actions/utils/general.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/commands/scraper/actions/utils/globals.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/commands/scraper/actions/utils/log.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/commands/scraper/actions/utils/params.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/commands/scraper/actions/utils/paths/media.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/commands/scraper/actions/utils/paths/paths.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/commands/scraper/actions/utils/progress/convert.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/commands/scraper/actions/utils/progress/update.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/commands/scraper/actions/utils/retries.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/commands/scraper/actions/utils/send/chunk.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/commands/scraper/actions/utils/send/message.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/commands/scraper/actions/utils/threads.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/commands/scraper/actions/utils/workers.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/commands/scraper/scraper.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/commands/scraper/utils/daemon.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/commands/scraper/utils/jobqueue.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/commands/scraper/utils/prepare.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/commands/scraper/utils/print.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/commands/scraper/utils/schedule.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/commands/utils/command.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/commands/utils/scrape_context.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/commands/utils/strings.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/const/constants.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/const/values/action/download.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/const/values/action/like.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/const/values/action/metadata.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/const/values/config.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/const/values/date.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/const/values/download.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/const/values/dynamic.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/const/values/list.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/const/values/live.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/const/values/logger.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/const/values/path/bytes.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/const/values/path/files.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/const/values/path/general.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/const/values/path/path.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/const/values/prompts.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/const/values/req/anon.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/const/values/req/api.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/const/values/req/cdm.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/const/values/req/discord.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/const/values/req/git.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/const/values/req/like.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/const/values/req/mpd.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/const/values/req/req.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/const/values/rich.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/const/values/system.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/const/values/table.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/const/values/test/test_constants.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/const/values/time.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/const/values/url/url.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/data/api/archive.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/data/api/common/after.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/data/api/common/cache/read.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/data/api/common/cache/write.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/data/api/common/check.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/data/api/common/logs/logs.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/data/api/common/logs/strings.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/data/api/common/timeline.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/data/api/highlights.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/data/api/init.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/data/api/labels.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/data/api/me.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/data/api/messages.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/data/api/paid.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/data/api/pinned.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/data/api/profile.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/data/api/streams.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/data/api/subscriptions/common.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/data/api/subscriptions/individual.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/data/api/subscriptions/lists.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/data/api/subscriptions/subscriptions.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/data/api/timeline.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/data/models/manager.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/data/models/models.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/data/models/utils/retriver.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/data/posts/post.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/data/posts/scrape_paid.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/db/__init__.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/db/backup.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/db/difference.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/db/merge.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/db/operations.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/db/operations_/empty.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/db/operations_/labels.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/db/operations_/media.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/db/operations_/messages.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/db/operations_/others.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/db/operations_/posts.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/db/operations_/profile.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/db/operations_/stories.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/db/operations_/wrapper.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/db/transition.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/db/utils/convert.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/filters/media/filters.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/filters/media/main.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/filters/models/date.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/filters/models/flags.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/filters/models/other.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/filters/models/price.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/filters/models/sort.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/filters/models/subtype.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/filters/models/utils/logs.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/main/close/exit.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/main/close/final/final.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/main/close/final/final_log.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/main/close/final/final_script.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/main/close/final/final_user.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/main/manager.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/main/open/run.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/prompts/keybindings.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/prompts/promptConvert.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/prompts/prompt_groups/actions.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/prompts/prompt_groups/area.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/prompts/prompt_groups/menu.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/prompts/prompt_groups/merge.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/prompts/prompt_groups/model.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/prompts/prompt_groups/profile.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/prompts/prompt_strings.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/prompts/prompt_validators.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/prompts/prompts.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/prompts/utils/model_helpers.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/prompts/utils/prompt_helpers.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/__init__.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/actions.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/ads.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/args/accessors/actions.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/args/accessors/areas.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/args/accessors/output.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/args/accessors/quality.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/args/accessors/read.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/args/accessors/time.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/args/callbacks/arguments/post.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/args/callbacks/arguments/username.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/args/callbacks/parse/choice.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/args/callbacks/parse/file.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/args/callbacks/parse/string.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/args/callbacks/parse/username.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/args/globals.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/args/helpers/hide_args.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/args/main.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/args/mutators/before.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/args/mutators/change.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/args/mutators/user.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/args/mutators/write.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/args/parse/arguments/advanced_processing.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/args/parse/arguments/advanced_user_filter.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/args/parse/arguments/automatic.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/args/parse/arguments/check.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/args/parse/arguments/download.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/args/parse/arguments/file.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/args/parse/arguments/logging.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/args/parse/arguments/media_content.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/args/parse/arguments/metadata_filters.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/args/parse/arguments/post_content.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/args/parse/arguments/program.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/args/parse/arguments/shared.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/args/parse/arguments/user_list.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/args/parse/arguments/user_select.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/args/parse/arguments/user_sort.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/args/parse/arguments/utils/date.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/args/parse/arguments/utils/retry.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/args/parse/commands/db.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/args/parse/commands/main.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/args/parse/commands/manual.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/args/parse/commands/message.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/args/parse/commands/metadata.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/args/parse/commands/paid.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/args/parse/commands/post.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/args/parse/commands/story.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/args/parse/group_bundles/advanced_common.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/args/parse/group_bundles/check.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/args/parse/group_bundles/common.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/args/parse/group_bundles/db.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/args/parse/group_bundles/main.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/args/parse/group_bundles/manual.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/args/parse/group_bundles/message_check.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/args/parse/group_bundles/metadata.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/args/parse/group_bundles/paid_check.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/args/parse/group_bundles/post_check.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/args/parse/group_bundles/story_check.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/args/parse/group_bundles/utils/check.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/args/parse/groups/advanced_processing.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/args/parse/groups/advanced_user_filter.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/args/parse/groups/automatic.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/args/parse/groups/check_content.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/args/parse/groups/download.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/args/parse/groups/file.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/args/parse/groups/logging.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/args/parse/groups/media_filter.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/args/parse/groups/post_filter.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/args/parse/groups/program.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/args/parse/groups/user_list.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/args/parse/groups/user_select.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/args/parse/groups/user_sort.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/args/types/arrow.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/args/types/choice.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/auth/data.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/auth/request.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/auth/schema.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/auth/utils/dict.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/auth/utils/prompt.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/auth/utils/warning/check.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/auth/utils/warning/print.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/auth/utils/warning/warning.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/cache.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/config/config.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/config/custom.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/config/file.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/config/menu.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/config/utils/context.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/config/utils/wrapper.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/console.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/constants.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/context/exit.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/context/run_async.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/context/stdout.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/dates.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/encoding.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/hash.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/live/classes/progress.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/live/classes/task.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/live/classes/transfercol.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/live/clear.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/live/empty.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/live/groups.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/live/live.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/live/panel.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/live/progress.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/live/screens.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/live/tasks.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/live/updater.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/logs/classes/classes.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/logs/classes/handlers/discord.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/logs/classes/handlers/file.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/logs/classes/handlers/text.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/logs/close.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/logs/globals.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/logs/handle.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/logs/logger.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/logs/logs.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/logs/other.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/logs/stdout.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/logs/utils/level.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/logs/utils/trace.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/manager.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/me.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/menu.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/merge.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/paths/common.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/paths/db.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/paths/manage.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/paths/paths.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/profiles/data.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/profiles/manage.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/profiles/tools.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/sems.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/separate.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/string.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/system/free.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/system/network.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/system/priority.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/system/speed.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/system/subprocess.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/system/system.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/utils/text.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/scripts/commit_version.sh +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/scripts/determine_docker_stable_dev_tags.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/scripts/release_version.sh +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/scripts/retry_action.sh +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/test/calls/example.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/test/calls/utils_test.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/test/db/archive_test.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/test/db/highlights_test.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/test/db/media_test.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/test/db/message_test.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/test/db/pinned_test.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/test/db/post_test.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/test/db/profile_test.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/test/db/stories_test.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/test/general/auth_test.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/test/general/config_test.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/test/general/filter_test.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/test/general/like_test.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/test/general/misc_test.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/test/general/path_test.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/test/general/profile_folder_test.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/test/general/profile_scrape_test.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/test/general/validator_test.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/test/post/archived_post_test.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/test/post/highlight_post_test.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/test/post/messages_post_test.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/test/post/paid_post_test.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/test/post/pinned_post_test.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/test/post/stories_post_test.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/test/post/timeline_post_test.py +0 -0
- {ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/uv.lock +0 -0
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Ignore Python's virtual environment directory (your 'info' folder)
|
|
2
|
+
info/
|
|
3
|
+
.venv/
|
|
4
|
+
venv/
|
|
5
|
+
env/
|
|
6
|
+
|
|
7
|
+
# Ignore Python cache and artifacts
|
|
8
|
+
__pycache__/
|
|
9
|
+
*.pyc
|
|
10
|
+
*.pyo
|
|
11
|
+
*.pyd
|
|
12
|
+
dist/
|
|
13
|
+
build/
|
|
14
|
+
wiki/
|
|
15
|
+
*.egg-info/
|
|
16
|
+
|
|
17
|
+
# Ignore editor and OS-specific files
|
|
18
|
+
.vscode/
|
|
19
|
+
.idea/
|
|
20
|
+
*.DS_Store
|
|
21
|
+
|
|
22
|
+
# Ignore test files if they aren't needed in the final image
|
|
23
|
+
test/
|
|
24
|
+
|
|
25
|
+
# Ignore local secrets or temp files
|
|
26
|
+
.env
|
|
27
|
+
.tempmedia/
|
|
28
|
+
*.log
|
|
@@ -197,7 +197,7 @@ jobs:
|
|
|
197
197
|
with:
|
|
198
198
|
artifacts: artifacts/*/* # Attach any downloaded artifacts (will include only those that were built successfully)
|
|
199
199
|
# Combined tag for uniqueness and chronological sorting
|
|
200
|
-
tag: "${{ needs.generate_version.outputs.base_version }}
|
|
200
|
+
tag: "${{ needs.generate_version.outputs.base_version }}+${{ needs.generate_version.outputs.short_hash }}.${{ needs.generate_version.outputs.commit_timestamp }}"
|
|
201
201
|
# Human-readable name with all key details
|
|
202
202
|
name: "Dev Build ${{ needs.generate_version.outputs.base_version }} (Commit ${{ needs.generate_version.outputs.short_hash }}) - ${{ needs.generate_version.outputs.commit_timestamp }}"
|
|
203
203
|
|
|
@@ -6,7 +6,6 @@ on:
|
|
|
6
6
|
- '**'
|
|
7
7
|
tags-ignore:
|
|
8
8
|
- '**'
|
|
9
|
-
|
|
10
9
|
permissions:
|
|
11
10
|
contents: read
|
|
12
11
|
packages: write
|
|
@@ -28,7 +27,7 @@ jobs:
|
|
|
28
27
|
with:
|
|
29
28
|
fetch-depth: 0
|
|
30
29
|
fetch-tags: true
|
|
31
|
-
|
|
30
|
+
|
|
32
31
|
- name: Make script executable
|
|
33
32
|
run: chmod +x ./scripts/commit_version.sh
|
|
34
33
|
- name: Generate Version and Git Info
|
|
@@ -36,7 +35,7 @@ jobs:
|
|
|
36
35
|
env:
|
|
37
36
|
GH_TOKEN: ${{ github.token }}
|
|
38
37
|
GITHUB_REPOSITORY: ${{ github.repository }}
|
|
39
|
-
GITHUB_WORKFLOW_REF: ${{ github.workflow_ref }}
|
|
38
|
+
GITHUB_WORKFLOW_REF: ${{ github.workflow_ref }}
|
|
40
39
|
GITHUB_REF: ${{ github.ref }}
|
|
41
40
|
GITHUB_EVENT_BEFORE: ${{ github.event.before }}
|
|
42
41
|
run: ./scripts/commit_version.sh
|
|
@@ -59,7 +58,7 @@ jobs:
|
|
|
59
58
|
|
|
60
59
|
steps:
|
|
61
60
|
- name: Checkout repository
|
|
62
|
-
uses: actions/checkout@v4
|
|
61
|
+
uses: actions/checkout@v4
|
|
63
62
|
|
|
64
63
|
- name: Set up QEMU
|
|
65
64
|
uses: docker/setup-qemu-action@v3
|
|
@@ -73,8 +72,8 @@ jobs:
|
|
|
73
72
|
username: ${{ matrix.registry.id == 'ghcr' && github.actor || secrets.DOCKERHUB_USERNAME }}
|
|
74
73
|
password: ${{ matrix.registry.id == 'ghcr' && secrets.GITHUB_TOKEN || secrets.DOCKERHUB_TOKEN }}
|
|
75
74
|
|
|
76
|
-
- name: Extract Docker metadata
|
|
77
|
-
id:
|
|
75
|
+
- name: Extract Docker metadata (Normal Image)
|
|
76
|
+
id: meta_normal
|
|
78
77
|
uses: docker/metadata-action@v5
|
|
79
78
|
with:
|
|
80
79
|
images: ${{ matrix.registry.id == 'ghcr' && format('ghcr.io/{0}', github.repository) || 'datawhores/of-scraper' }}
|
|
@@ -83,23 +82,23 @@ jobs:
|
|
|
83
82
|
type=raw,value=${{ needs.generate_version.outputs.base_version }}-${{ needs.generate_version.outputs.short_hash }}-${{ needs.generate_version.outputs.commit_timestamp }}
|
|
84
83
|
type=raw,value=${{ needs.generate_version.outputs.base_version }}-${{ needs.generate_version.outputs.short_hash }}
|
|
85
84
|
type=raw,value=latest,enable=${{ needs.generate_version.outputs.is_newer_than_last_successful_run }}
|
|
86
|
-
|
|
87
85
|
|
|
88
|
-
- name: Build and push Docker image
|
|
89
|
-
id: build-and-push
|
|
86
|
+
- name: Build and push Normal Docker image
|
|
87
|
+
id: build-and-push-normal
|
|
90
88
|
uses: docker/build-push-action@v5
|
|
91
89
|
with:
|
|
92
90
|
context: .
|
|
91
|
+
file: ./Dockerfile
|
|
93
92
|
push: true
|
|
94
|
-
tags: ${{ steps.
|
|
95
|
-
labels: ${{ steps.
|
|
93
|
+
tags: ${{ steps.meta_normal.outputs.tags }}
|
|
94
|
+
labels: ${{ steps.meta_normal.outputs.labels }}
|
|
96
95
|
cache-from: type=gha
|
|
97
96
|
cache-to: type=gha,mode=max
|
|
98
97
|
platforms: linux/amd64,linux/arm64
|
|
99
98
|
build-args: |
|
|
100
99
|
BUILD_VERSION=${{ needs.generate_version.outputs.version }}
|
|
101
|
-
INSTALL_FFMPEG=true
|
|
102
100
|
|
|
101
|
+
# This part needs adjustment to sign both images.
|
|
103
102
|
- name: Install Cosign
|
|
104
103
|
if: matrix.registry.sign == true
|
|
105
104
|
uses: sigstore/cosign-installer@v3.5.0
|
|
@@ -109,9 +108,16 @@ jobs:
|
|
|
109
108
|
run: echo "${{ secrets.COSIGN_PRIVATE_KEY }}" > cosign.key
|
|
110
109
|
shell: bash
|
|
111
110
|
|
|
112
|
-
- name: Sign the published Docker
|
|
111
|
+
- name: Sign the published Docker images
|
|
113
112
|
if: matrix.registry.sign == true
|
|
114
113
|
env:
|
|
115
114
|
COSIGN_PASSWORD: ${{ secrets.COSIGN_PASSWORD }}
|
|
116
115
|
COSIGN_EXPERIMENTAL: "true"
|
|
117
|
-
run:
|
|
116
|
+
run: |
|
|
117
|
+
# Get all tags for the normal image
|
|
118
|
+
NORMAL_IMAGE_TAGS="${{ steps.meta_normal.outputs.tags }}"
|
|
119
|
+
# Get the digest of the normal image
|
|
120
|
+
NORMAL_IMAGE_DIGEST="${{ steps.build-and-push-normal.outputs.digest }}"
|
|
121
|
+
|
|
122
|
+
echo "Signing Normal Image: ${NORMAL_IMAGE_TAGS} @ ${NORMAL_IMAGE_DIGEST}"
|
|
123
|
+
echo "$NORMAL_IMAGE_TAGS" | xargs -I {} cosign sign --yes --key cosign.key {}@$NORMAL_IMAGE_DIGEST
|
|
@@ -141,9 +141,8 @@ jobs:
|
|
|
141
141
|
- name: Build Package with Hatch
|
|
142
142
|
run: |
|
|
143
143
|
source .venv/bin/activate
|
|
144
|
-
echo "HATCH_VCS_PRETEND_VERSION=$PACKAGE_VERSION" >>
|
|
144
|
+
echo "HATCH_VCS_PRETEND_VERSION=$PACKAGE_VERSION=${{ needs.determine_tags_and_versions.outputs.package_version }}" >> $GITHUB_ENV
|
|
145
145
|
echo "SETUPTOOLS_SCM_PRETEND_VERSION=${{ needs.determine_tags_and_versions.outputs.package_version }}" >> $GITHUB_ENV
|
|
146
|
-
|
|
147
146
|
hatch build
|
|
148
147
|
shell: bash
|
|
149
148
|
|
|
@@ -90,9 +90,7 @@ jobs:
|
|
|
90
90
|
context: .
|
|
91
91
|
platforms: linux/amd64,linux/arm64
|
|
92
92
|
build-args: |
|
|
93
|
-
|
|
94
|
-
HATCH_VCS_PRETEND_VERSION=${{ inputs.package_version }}
|
|
95
|
-
INSTALL_FFMPEG=true
|
|
93
|
+
BUILD_VERSION=${{ inputs.package_version }}
|
|
96
94
|
tags: ${{ steps.meta_hub_stable.outputs.tags }}
|
|
97
95
|
labels: ${{ steps.meta_hub_stable.outputs.labels }}
|
|
98
96
|
cache-from: type=gha
|
|
@@ -163,8 +161,7 @@ jobs:
|
|
|
163
161
|
platforms: linux/amd64,linux/arm64
|
|
164
162
|
#pass enviroment variables as input
|
|
165
163
|
build-args: |
|
|
166
|
-
|
|
167
|
-
HATCH_VCS_PRETEND_VERSION=${{ inputs.package_version }}
|
|
164
|
+
BUILD_VERSION=${{ inputs.package_version }}
|
|
168
165
|
tags: ${{ steps.meta_hub_dev.outputs.tags }}
|
|
169
166
|
labels: ${{ steps.meta_hub_dev.outputs.labels }}
|
|
170
167
|
cache-from: type=gha
|
|
@@ -235,8 +232,7 @@ jobs:
|
|
|
235
232
|
context: .
|
|
236
233
|
platforms: linux/amd64,linux/arm64
|
|
237
234
|
build-args: |
|
|
238
|
-
|
|
239
|
-
HATCH_VCS_PRETEND_VERSION=${{ inputs.package_version }}
|
|
235
|
+
BUILD_VERSION=${{ inputs.package_version }}
|
|
240
236
|
tags: ${{ steps.meta_ghcr_stable.outputs.tags }}
|
|
241
237
|
labels: ${{ steps.meta_ghcr_stable.outputs.labels }}
|
|
242
238
|
cache-from: type=gha
|
|
@@ -304,8 +300,7 @@ jobs:
|
|
|
304
300
|
context: .
|
|
305
301
|
platforms: linux/amd64,linux/arm64
|
|
306
302
|
build-args: |
|
|
307
|
-
|
|
308
|
-
HATCH_VCS_PRETEND_VERSION=${{ inputs.package_version }}
|
|
303
|
+
BUILD_VERSION=${{ inputs.package_version }}
|
|
309
304
|
tags: ${{ steps.meta_ghcr_dev.outputs.tags }}
|
|
310
305
|
labels: ${{ steps.meta_ghcr_dev.outputs.labels }}
|
|
311
306
|
cache-from: type=gha
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# --- Standard Python Artifacts ---
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*$py.class
|
|
5
|
+
*.so
|
|
6
|
+
|
|
7
|
+
# Distribution / packaging / Build artifacts
|
|
8
|
+
build/
|
|
9
|
+
dist/
|
|
10
|
+
sdist/
|
|
11
|
+
wheels/
|
|
12
|
+
*.egg-info/
|
|
13
|
+
*.egg
|
|
14
|
+
MANIFEST
|
|
15
|
+
*.spec # Keep .spec files if they are manually edited, ignore if auto-generated.
|
|
16
|
+
# Yours look like configuration, so I've commented this out.
|
|
17
|
+
# *.spec
|
|
18
|
+
|
|
19
|
+
# PyInstaller temporary files
|
|
20
|
+
# *.manifest # Already covered by standard rules if needed
|
|
21
|
+
|
|
22
|
+
# Installer logs & Test reports
|
|
23
|
+
pip-log.txt
|
|
24
|
+
pip-delete-this-directory.txt
|
|
25
|
+
htmlcov/
|
|
26
|
+
.tox/
|
|
27
|
+
.nox/
|
|
28
|
+
.coverage
|
|
29
|
+
.coverage.*
|
|
30
|
+
.cache
|
|
31
|
+
nosetests.xml
|
|
32
|
+
coverage.xml
|
|
33
|
+
*.cover
|
|
34
|
+
.hypothesis/
|
|
35
|
+
.pytest_cache/
|
|
36
|
+
|
|
37
|
+
# This is the 'info/' directory in your project
|
|
38
|
+
/info/
|
|
39
|
+
# Also include other common venv names
|
|
40
|
+
.venv/
|
|
41
|
+
venv/
|
|
42
|
+
env/
|
|
43
|
+
ENV/
|
|
44
|
+
|
|
45
|
+
# Editor & IDE-specific files
|
|
46
|
+
.vscode/
|
|
47
|
+
.idea/
|
|
48
|
+
.spyderproject
|
|
49
|
+
.ropeproject
|
|
50
|
+
|
|
51
|
+
# mypy cache
|
|
52
|
+
.mypy_cache/
|
|
53
|
+
|
|
54
|
+
# Custom generated files or logs
|
|
55
|
+
*.log
|
|
56
|
+
# Ignoring a custom compiled/encrypted version file
|
|
57
|
+
ofscraper/__version__.pye
|
|
58
|
+
|
|
59
|
+
/crypto/
|
|
60
|
+
|
|
61
|
+
# Ignore specific generated files if they appear
|
|
62
|
+
# dupe.json
|
|
63
|
+
.tempmedia/
|
|
64
|
+
|
|
65
|
+
#trunk
|
|
66
|
+
.trunk
|
|
67
|
+
#documentation
|
|
68
|
+
wiki/
|
|
69
|
+
docs/
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# syntax=docker/dockerfile:1.7-labs
|
|
2
|
+
# Stage 1: Build the application artifact
|
|
3
|
+
FROM ghcr.io/astral-sh/uv:0.7.13-python3.11-bookworm-slim AS builder
|
|
4
|
+
|
|
5
|
+
ARG BUILD_VERSION
|
|
6
|
+
WORKDIR /app
|
|
7
|
+
|
|
8
|
+
# --- This is the ABSOLUTE ONLY essential change to fix the psutil/gcc error ---
|
|
9
|
+
# It installs the necessary compiler (gcc via build-essential) and Python development headers
|
|
10
|
+
# needed to compile Python packages like psutil, especially for non-AMD64 platforms.
|
|
11
|
+
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
12
|
+
build-essential\
|
|
13
|
+
python3-dev \
|
|
14
|
+
git \
|
|
15
|
+
&& rm -rf /var/lib/apt/lists/*
|
|
16
|
+
COPY --parents pyproject.toml uv.lock README.md .git ofscraper .
|
|
17
|
+
|
|
18
|
+
RUN \
|
|
19
|
+
if [ -n "$BUILD_VERSION" ]; then \
|
|
20
|
+
VERSION="$BUILD_VERSION"; \
|
|
21
|
+
else \
|
|
22
|
+
SHORT_HASH=$(git rev-parse --short HEAD 2>/dev/null || echo "0000000"); \
|
|
23
|
+
HIGHEST_TAG=$(git tag --sort=-committerdate | grep -E '^v?[0-9]+\.[0-9]+(\.[0-9]+)?([-.][a-zA-Z0-9.]+)?$' | head -n 1); \
|
|
24
|
+
if [ -z "$HIGHEST_TAG" ]; then BASE_VERSION="0.0.0"; else BASE_VERSION=$(echo "$HIGHEST_TAG" | sed 's/^v//'); fi; \
|
|
25
|
+
VERSION="${BASE_VERSION}+g${SHORT_HASH}"; \
|
|
26
|
+
fi && \
|
|
27
|
+
export HATCH_VCS_PRETEND_VERSION=$VERSION && \
|
|
28
|
+
export SETUPTOOLS_SCM_PRETEND_VERSION=$VERSION && \
|
|
29
|
+
echo "Build OF-SCRAPER with ${VERSION}" && \
|
|
30
|
+
|
|
31
|
+
python3 -m pip install --no-cache-dir hatch hatch-vcs && \
|
|
32
|
+
uv sync --locked && \
|
|
33
|
+
hatch build
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
# Stage 2: Create the final, minimal production image
|
|
37
|
+
FROM ghcr.io/astral-sh/uv:0.7.13-python3.11-bookworm-slim
|
|
38
|
+
WORKDIR /app
|
|
39
|
+
|
|
40
|
+
# Configure uv's venv and cache location.
|
|
41
|
+
ENV VIRTUAL_ENV="/app/.venv"
|
|
42
|
+
ENV UV_CACHE_DIR="/app/.uv_cache"
|
|
43
|
+
ENV PATH="${VIRTUAL_ENV}/bin:${PATH}"
|
|
44
|
+
|
|
45
|
+
# STEP 1: Create venv, install pyffmpeg and force static
|
|
46
|
+
# timestamps for venv & cache to avoid unnecessary layer updates.
|
|
47
|
+
RUN uv venv && uv pip install pyffmpeg==2.4.2.20 && \
|
|
48
|
+
find "${VIRTUAL_ENV}" -print0 | xargs -0 touch -h -d '2025-01-01T00:00:00Z' && \
|
|
49
|
+
find "${UV_CACHE_DIR}" -print0 | xargs -0 touch -h -d '2025-01-01T00:00:00Z'
|
|
50
|
+
|
|
51
|
+
# STEP 2: Install all OS-level dependencies in a single layer.
|
|
52
|
+
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
53
|
+
gosu \
|
|
54
|
+
&& rm -rf /var/lib/apt/lists/*
|
|
55
|
+
|
|
56
|
+
# STEP 3: Copy entrypoint scripts and make them executable.
|
|
57
|
+
COPY --chmod=755 ./scripts/entry/. /usr/local/bin/entry/
|
|
58
|
+
|
|
59
|
+
# STEP 4: Copy and install the ofscraper wheels into the venv.
|
|
60
|
+
COPY --from=builder /app/dist/*.whl .
|
|
61
|
+
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
62
|
+
build-essential && \
|
|
63
|
+
uv pip install *.whl -v && \
|
|
64
|
+
rm *.whl && \
|
|
65
|
+
apt-get purge -y --auto-remove build-essential && \
|
|
66
|
+
rm -rf /var/lib/apt/lists/*
|
|
67
|
+
|
|
68
|
+
USER root
|
|
69
|
+
ENTRYPOINT ["/usr/local/bin/entry/entrypoint.sh"]
|
|
70
|
+
CMD ["ofscraper"]
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
version: "3.8" # Recommended to use a recent version for new features
|
|
2
2
|
services:
|
|
3
|
+
#latest
|
|
3
4
|
of-scraper:
|
|
4
5
|
stdin_open: true # Keeps STDIN open for interactive processes
|
|
5
6
|
tty: true # Allocates a pseudo-TTY for a terminal-like interface
|
|
6
7
|
container_name: ofscraper
|
|
7
|
-
|
|
8
8
|
environment: # Optional environment variables
|
|
9
9
|
# These are recommended for correct file permissions on mounted volumes.
|
|
10
10
|
# Default UID/GID is 1000:1000 if not specified via environment variables in your shell.
|
|
@@ -37,4 +37,15 @@ services:
|
|
|
37
37
|
# command: "ofscraper --username ALL --posts all"
|
|
38
38
|
|
|
39
39
|
# Optional: Configure restart policy.
|
|
40
|
-
# restart: "unless-stopped" # Ensures the container restarts automatically unless explicitly stopped.
|
|
40
|
+
# restart: "unless-stopped" # Ensures the container restarts automatically unless explicitly stopped.
|
|
41
|
+
|
|
42
|
+
#local
|
|
43
|
+
#comment out this and comment out the first of-scraper example to run locally
|
|
44
|
+
# of-scraper:
|
|
45
|
+
# stdin_open: true # Keeps STDIN open for interactive processes
|
|
46
|
+
# tty: true # Allocates a pseudo-TTY for a terminal-like interface
|
|
47
|
+
# container_name: ofscraper
|
|
48
|
+
|
|
49
|
+
# build:
|
|
50
|
+
# context: .
|
|
51
|
+
# dockerfile: Dockerfile
|
{ofscraper-3.13.dev10 → ofscraper-3.13.dev12}/ofscraper/classes/sessionmanager/sessionmanager.py
RENAMED
|
@@ -321,7 +321,7 @@ class sessionManager:
|
|
|
321
321
|
exceptions = exceptions or []
|
|
322
322
|
actions = actions or []
|
|
323
323
|
for _ in Retrying(
|
|
324
|
-
retry=retry_if_not_exception_type((KeyboardInterrupt)),
|
|
324
|
+
retry=retry_if_not_exception_type((KeyboardInterrupt,SystemExit)),
|
|
325
325
|
stop=tenacity.stop.stop_after_attempt(retries),
|
|
326
326
|
wait=tenacity.wait.wait_random(min=min, max=max),
|
|
327
327
|
before=lambda x: (
|
|
@@ -424,7 +424,7 @@ class sessionManager:
|
|
|
424
424
|
wait_exponential=tenacity.wait.wait_exponential(
|
|
425
425
|
multiplier=2, min=wait_min_exponential, max=wait_max_exponential
|
|
426
426
|
),
|
|
427
|
-
retry=retry_if_not_exception_type((KeyboardInterrupt)),
|
|
427
|
+
retry=retry_if_not_exception_type((KeyboardInterrupt,SystemExit)),
|
|
428
428
|
wait_random=tenacity.wait_random(min=wait_min, max=wait_max),
|
|
429
429
|
stop=tenacity.stop.stop_after_attempt(retries),
|
|
430
430
|
before=lambda x: (
|
|
@@ -48,12 +48,8 @@ async def un_encrypt(item, c, ele, input_=None):
|
|
|
48
48
|
log.debug(f"{get_medialog(ele)} got key from cache")
|
|
49
49
|
elif keymode == "manual":
|
|
50
50
|
key = await key_helper_manual(c, item["pssh"], ele.license, ele.id)
|
|
51
|
-
elif keymode == "keydb":
|
|
52
|
-
key = await key_helper_keydb(c, item["pssh"], ele.license, ele.id)
|
|
53
51
|
elif keymode == "cdrm":
|
|
54
52
|
key = await key_helper_cdrm(c, item["pssh"], ele.license, ele.id)
|
|
55
|
-
elif keymode == "cdrm2":
|
|
56
|
-
key = await key_helper_cdrm2(c, item["pssh"], ele.license, ele.id)
|
|
57
53
|
if not key:
|
|
58
54
|
raise Exception(f"{get_medialog(ele)} Could not get key")
|
|
59
55
|
key = key.strip()
|
|
@@ -118,101 +114,14 @@ async def key_helper_cdrm(c, pssh, licence_url, id):
|
|
|
118
114
|
headers["cookie"] = auth_requests.get_cookies_str()
|
|
119
115
|
auth_requests.create_sign(licence_url, headers)
|
|
120
116
|
json_data = {
|
|
121
|
-
"
|
|
122
|
-
"Headers": json.dumps(headers),
|
|
123
|
-
"PSSH": pssh,
|
|
124
|
-
"JSON": "{}",
|
|
125
|
-
"Cookies": "{}",
|
|
126
|
-
"Data": "{}",
|
|
127
|
-
"Proxy": "",
|
|
128
|
-
}
|
|
129
|
-
async with c.requests_async(
|
|
130
|
-
url=constants.getattr("CDRM"),
|
|
131
|
-
method="post",
|
|
132
|
-
json=json_data,
|
|
133
|
-
retries=get_cmd_download_req_retries(),
|
|
134
|
-
wait_min=constants.getattr("OF_MIN_WAIT_API"),
|
|
135
|
-
wait_max=constants.getattr("OF_MAX_WAIT_API"),
|
|
136
|
-
total_timeout=constants.getattr("CDM_TIMEOUT"),
|
|
137
|
-
skip_expection_check=True,
|
|
138
|
-
) as r:
|
|
139
|
-
data = await r.json_()
|
|
140
|
-
log.debug(f"keydb json {data}")
|
|
141
|
-
key = data["Message"]
|
|
142
|
-
return key
|
|
143
|
-
except Exception as E:
|
|
144
|
-
log.traceback_(E)
|
|
145
|
-
log.traceback_(traceback.format_exc())
|
|
146
|
-
raise E
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
async def key_helper_cdrm2(c, pssh, licence_url, id):
|
|
150
|
-
key = None
|
|
151
|
-
log.debug(f"ID:{id} using cdrm2 auto key helper")
|
|
152
|
-
try:
|
|
153
|
-
log.debug(f"ID:{id} pssh: {pssh is not None}")
|
|
154
|
-
log.debug(f"ID:{id} licence: {licence_url}")
|
|
155
|
-
headers = auth_requests.make_headers()
|
|
156
|
-
headers["cookie"] = auth_requests.get_cookies_str()
|
|
157
|
-
auth_requests.create_sign(licence_url, headers)
|
|
158
|
-
json_data = {
|
|
159
|
-
"license": licence_url,
|
|
117
|
+
"licurl": licence_url,
|
|
160
118
|
"headers": json.dumps(headers),
|
|
161
119
|
"pssh": pssh,
|
|
162
|
-
"buildInfo": "google/sdk_gphone_x86/generic_x86:8.1.0/OSM1.180201.037/6739391:userdebug/dev-keys",
|
|
163
|
-
"proxy": "",
|
|
164
|
-
"cache": True,
|
|
165
120
|
}
|
|
166
121
|
async with c.requests_async(
|
|
167
|
-
url=constants.getattr("
|
|
168
|
-
method="post",
|
|
169
|
-
json=json_data,
|
|
170
|
-
retries=get_cmd_download_req_retries(),
|
|
171
|
-
wait_min=constants.getattr("OF_MIN_WAIT_API"),
|
|
172
|
-
wait_max=constants.getattr("OF_MAX_WAIT_API"),
|
|
173
|
-
total_timeout=constants.getattr("CDM_TIMEOUT"),
|
|
174
|
-
skip_expection_check=True,
|
|
175
|
-
) as r:
|
|
176
|
-
httpcontent = await r.text_()
|
|
177
|
-
log.debug(f"ID:{id} key_response: {httpcontent}")
|
|
178
|
-
soup = BeautifulSoup(httpcontent, "html.parser")
|
|
179
|
-
key = soup.find("li").contents[0]
|
|
180
|
-
return key
|
|
181
|
-
except Exception as E:
|
|
182
|
-
log.traceback_(E)
|
|
183
|
-
log.traceback_(traceback.format_exc())
|
|
184
|
-
raise E
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
async def key_helper_keydb(c, pssh, licence_url, id):
|
|
188
|
-
key = None
|
|
189
|
-
log.debug(f"ID:{id} using keydb auto key helper")
|
|
190
|
-
try:
|
|
191
|
-
log.debug(f"ID:{id} pssh: {pssh is not None}")
|
|
192
|
-
log.debug(f"ID:{id} licence: {licence_url}")
|
|
193
|
-
headers = auth_requests.make_headers()
|
|
194
|
-
headers["cookie"] = auth_requests.get_cookies_str()
|
|
195
|
-
auth_requests.create_sign(licence_url, headers)
|
|
196
|
-
json_data = {
|
|
197
|
-
"license_url": licence_url,
|
|
198
|
-
"headers": json.dumps(headers),
|
|
199
|
-
"pssh": pssh,
|
|
200
|
-
"buildInfo": "",
|
|
201
|
-
"proxy": "",
|
|
202
|
-
"cache": True,
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
headers = {
|
|
206
|
-
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (Ktesttemp, like Gecko) Chrome/90.0.4430.85 Safari/537.36",
|
|
207
|
-
"Content-Type": "application/json",
|
|
208
|
-
"X-API-Key": settings.get_keydb_api(),
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
async with c.requests_async(
|
|
212
|
-
url=constants.getattr("KEYDB"),
|
|
122
|
+
url=constants.getattr("CDRM"),
|
|
213
123
|
method="post",
|
|
214
124
|
json=json_data,
|
|
215
|
-
headers=headers,
|
|
216
125
|
retries=get_cmd_download_req_retries(),
|
|
217
126
|
wait_min=constants.getattr("OF_MIN_WAIT_API"),
|
|
218
127
|
wait_max=constants.getattr("OF_MAX_WAIT_API"),
|
|
@@ -220,20 +129,14 @@ async def key_helper_keydb(c, pssh, licence_url, id):
|
|
|
220
129
|
skip_expection_check=True,
|
|
221
130
|
) as r:
|
|
222
131
|
data = await r.json_()
|
|
223
|
-
log.debug(f"
|
|
224
|
-
|
|
225
|
-
key = data
|
|
226
|
-
elif isinstance(data["keys"][0], str):
|
|
227
|
-
key = data["keys"][0]
|
|
228
|
-
elif isinstance(data["keys"][0], object):
|
|
229
|
-
key = data["keys"][0]["key"]
|
|
132
|
+
log.debug(f"cdrm json {data}")
|
|
133
|
+
key = data["message"]
|
|
230
134
|
return key
|
|
231
135
|
except Exception as E:
|
|
232
136
|
log.traceback_(E)
|
|
233
137
|
log.traceback_(traceback.format_exc())
|
|
234
138
|
raise E
|
|
235
139
|
|
|
236
|
-
|
|
237
140
|
async def key_helper_manual(c, pssh, licence_url, id):
|
|
238
141
|
key = None
|
|
239
142
|
log.debug(f"ID:{id} manual key helper")
|
|
@@ -23,7 +23,6 @@ def main():
|
|
|
23
23
|
readConfig()
|
|
24
24
|
setLogger()
|
|
25
25
|
make_folder()
|
|
26
|
-
check()
|
|
27
26
|
run.main()
|
|
28
27
|
except Exception as E:
|
|
29
28
|
print(E)
|
|
@@ -64,6 +63,3 @@ def readConfig():
|
|
|
64
63
|
def make_folder():
|
|
65
64
|
paths_manage.make_folders()
|
|
66
65
|
|
|
67
|
-
|
|
68
|
-
def check():
|
|
69
|
-
checkers.check_config_key_mode()
|