ofscraper 3.13.4__tar.gz → 3.13.5.dev2__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.4 → ofscraper-3.13.5.dev2}/PKG-INFO +1 -1
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/classes/of/media.py +27 -31
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/classes/of/postcollection.py +1 -1
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/classes/of/posts.py +22 -3
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/classes/placeholder.py +2 -3
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/classes/sessionmanager/sessionmanager.py +57 -67
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/classes/table/fields/sizefield.py +2 -3
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/commands/check.py +11 -9
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/commands/db.py +2 -3
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/commands/manual.py +6 -8
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/commands/metadata/consumer.py +11 -5
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/commands/metadata/manager.py +8 -12
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/commands/metadata/metadata.py +6 -6
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/commands/scraper/actions/download/download.py +5 -4
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/commands/scraper/actions/download/managers/alt_download.py +10 -9
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/commands/scraper/actions/download/managers/downloadmanager.py +6 -1
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/commands/scraper/actions/download/managers/main_download.py +7 -4
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/commands/scraper/actions/download/run.py +17 -10
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/commands/scraper/actions/download/utils/ffmpeg.py +24 -11
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/commands/scraper/actions/download/utils/keyhelpers.py +6 -4
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/commands/scraper/actions/like/like.py +35 -37
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/commands/scraper/actions/utils/general.py +0 -5
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/commands/scraper/scraper.py +3 -4
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/commands/scraper/utils/schedule.py +1 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/data/api/profile.py +1 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/data/api/subscriptions/lists.py +5 -5
- ofscraper-3.13.5.dev2/ofscraper/data/models/manager.py +380 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/data/posts/scrape_paid.py +2 -2
- ofscraper-3.13.5.dev2/ofscraper/filters/models/date.py +85 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/main/close/final/final.py +3 -3
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/main/open/load.py +5 -5
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/prompts/prompt_groups/actions.py +7 -5
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/prompts/prompt_groups/area.py +1 -2
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/prompts/prompt_groups/config.py +33 -30
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/prompts/prompt_groups/model.py +20 -18
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/prompts/prompt_validators.py +4 -3
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/prompts/utils/prompt_helpers.py +1 -2
- ofscraper-3.13.4/ofscraper/scripts/final_user_script.py → ofscraper-3.13.5.dev2/ofscraper/scripts/after_download_action_script.py +21 -27
- ofscraper-3.13.5.dev2/ofscraper/scripts/after_download_script.py +88 -0
- ofscraper-3.13.5.dev2/ofscraper/scripts/after_like_action_script.py +101 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/scripts/final_script.py +11 -9
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/scripts/naming_script.py +11 -10
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/scripts/skip_download_script.py +14 -9
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/actions.py +18 -20
- ofscraper-3.13.5.dev2/ofscraper/utils/args/accessors/output.py +5 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/args/accessors/time.py +5 -6
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/args/main.py +0 -1
- ofscraper-3.13.5.dev2/ofscraper/utils/args/mutators/before.py +11 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/args/mutators/user.py +5 -9
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/args/parse/arguments/program.py +1 -11
- ofscraper-3.13.5.dev2/ofscraper/utils/args/parse/arguments/scripts.py +53 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/args/parse/arguments/user_list.py +1 -1
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/args/parse/arguments/user_select.py +4 -2
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/args/parse/groups/scripts.py +6 -2
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/config/data.py +98 -53
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/config/menu.py +3 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/config/schema.py +4 -9
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/logs/logger.py +4 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/logs/logs.py +1 -2
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/menu.py +2 -0
- ofscraper-3.13.5.dev2/ofscraper/utils/of_env/load.py +72 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/of_env/values/main.py +20 -9
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/of_env/values/prompts.py +5 -3
- ofscraper-3.13.5.dev2/ofscraper/utils/of_env/values/system.py +40 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/paths/common.py +1 -2
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/settings.py +74 -16
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/system/free.py +2 -2
- ofscraper-3.13.5.dev2/ofscraper/utils/system/subprocess.py +57 -0
- ofscraper-3.13.4/ofscraper/commands/scraper/actions/utils/paths/media.py +0 -11
- ofscraper-3.13.4/ofscraper/commands/scraper/actions/utils/send/message.py +0 -56
- ofscraper-3.13.4/ofscraper/data/models/manager.py +0 -176
- ofscraper-3.13.4/ofscraper/filters/models/date.py +0 -83
- ofscraper-3.13.4/ofscraper/utils/args/accessors/output.py +0 -4
- ofscraper-3.13.4/ofscraper/utils/args/callbacks/arguments/env.py +0 -73
- ofscraper-3.13.4/ofscraper/utils/args/mutators/before.py +0 -12
- ofscraper-3.13.4/ofscraper/utils/args/mutators/change.py +0 -8
- ofscraper-3.13.4/ofscraper/utils/args/parse/arguments/scripts.py +0 -50
- ofscraper-3.13.4/ofscraper/utils/config/custom.py +0 -20
- ofscraper-3.13.4/ofscraper/utils/of_env/values/system.py +0 -25
- ofscraper-3.13.4/ofscraper/utils/system/subprocess.py +0 -19
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/.dockerignore +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/.gitattributes +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/.github/actions/retry-artifact-operation/action.yml +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/.github/dependabot.yml +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/.github/workflows/codecov.yml +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/.github/workflows/commit_bundler.yml +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/.github/workflows/docker-daily.yml +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/.github/workflows/docker-purge.yml +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/.github/workflows/package-builder-release.yml +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/.github/workflows/package-delete.yml +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/.github/workflows/publish-release-binaries.yml +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/.github/workflows/publish-release-dockers.yml +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/.gitignore +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/.gitmodules +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/CHANGES.md +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/Dockerfile +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/LICENSE +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/README.md +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/cosign.pub +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/crypto +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/docker-compose.yml +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/donate/btc +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/donate/eth +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/media/browser_tools_open.png +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/media/dp.png +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/media/example.png +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/media/headers.png +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/media/icon.png +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/media/init.png +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/media/list_or_username.png +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/media/main_menu.png +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/media/network_tab.png +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/media/request_headers.png +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/media/xhr_tab.png +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/__main__.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/__version__.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/classes/labels.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/classes/of/base.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/classes/sessionmanager/cert.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/classes/sessionmanager/ofsession.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/classes/sessionmanager/sleepers.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/classes/table/app.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/classes/table/compose.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/classes/table/const.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/classes/table/css.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/classes/table/fields/boolfield.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/classes/table/fields/datefield.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/classes/table/fields/downloadfield.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/classes/table/fields/mediafield.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/classes/table/fields/numfield.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/classes/table/fields/pricefield.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/classes/table/fields/responsefield.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/classes/table/fields/selectfield.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/classes/table/fields/textsearch.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/classes/table/fields/timefield.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/classes/table/inputs/filterinput.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/classes/table/inputs/intergerinput.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/classes/table/inputs/strinput.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/classes/table/sections/sidebar.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/classes/table/sections/table.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/classes/table/sections/table_console.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/classes/table/utils/lock.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/classes/table/utils/names.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/commands/metadata/desc.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/commands/scraper/actions/download/utils/chunk.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/commands/scraper/actions/download/utils/desc.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/commands/scraper/actions/download/utils/leaky.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/commands/scraper/actions/download/utils/retries.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/commands/scraper/actions/download/utils/text.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/commands/scraper/actions/utils/buffer.py +0 -0
- {ofscraper-3.13.4/ofscraper/commands/scraper/actions/utils/send → ofscraper-3.13.5.dev2/ofscraper/commands/scraper/actions/utils}/chunk.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/commands/scraper/actions/utils/globals.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/commands/scraper/actions/utils/log.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/commands/scraper/actions/utils/params.py +0 -0
- {ofscraper-3.13.4/ofscraper/commands/scraper/actions/utils/paths → ofscraper-3.13.5.dev2/ofscraper/commands/scraper/actions/utils}/paths.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/commands/scraper/actions/utils/progress/convert.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/commands/scraper/actions/utils/progress/update.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/commands/scraper/actions/utils/retries.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/commands/scraper/actions/utils/threads.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/commands/scraper/actions/utils/workers.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/commands/scraper/utils/daemon.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/commands/scraper/utils/jobqueue.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/commands/scraper/utils/prepare.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/commands/scraper/utils/print.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/commands/utils/command.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/commands/utils/scrape_context.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/commands/utils/strings.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/data/api/archive.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/data/api/common/after.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/data/api/common/cache/read.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/data/api/common/cache/write.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/data/api/common/check.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/data/api/common/logs/logs.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/data/api/common/logs/strings.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/data/api/common/timeline.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/data/api/highlights.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/data/api/init.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/data/api/labels.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/data/api/me.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/data/api/messages.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/data/api/paid.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/data/api/pinned.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/data/api/streams.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/data/api/subscriptions/common.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/data/api/subscriptions/individual.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/data/api/subscriptions/subscriptions.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/data/api/timeline.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/data/models/models.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/data/models/utils/retriver.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/data/posts/post.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/db/__init__.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/db/backup.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/db/difference.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/db/merge.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/db/operations.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/db/operations_/empty.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/db/operations_/labels.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/db/operations_/media.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/db/operations_/messages.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/db/operations_/others.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/db/operations_/posts.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/db/operations_/profile.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/db/operations_/stories.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/db/operations_/wrapper.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/db/transition.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/db/utils/convert.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/filters/media/filters.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/filters/media/main.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/filters/models/flags.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/filters/models/other.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/filters/models/price.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/filters/models/sort.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/filters/models/subtype.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/filters/models/utils/logs.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/main/close/exit.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/main/close/final/final_log.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/main/manager.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/main/open/run.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/prompts/keybindings.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/prompts/promptConvert.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/prompts/prompt_groups/auth.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/prompts/prompt_groups/menu.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/prompts/prompt_groups/merge.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/prompts/prompt_groups/profile.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/prompts/prompt_strings.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/prompts/prompts.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/prompts/utils/model_helpers.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/__init__.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/ads.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/args/accessors/actions.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/args/accessors/areas.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/args/accessors/quality.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/args/accessors/read.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/args/callbacks/arguments/post.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/args/callbacks/arguments/username.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/args/callbacks/parse/choice.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/args/callbacks/parse/file.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/args/callbacks/parse/string.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/args/callbacks/parse/username.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/args/globals.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/args/helpers/hide_args.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/args/mutators/write.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/args/parse/arguments/advanced_processing.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/args/parse/arguments/advanced_program.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/args/parse/arguments/advanced_user_filter.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/args/parse/arguments/automatic.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/args/parse/arguments/check.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/args/parse/arguments/download.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/args/parse/arguments/file.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/args/parse/arguments/logging.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/args/parse/arguments/media_content.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/args/parse/arguments/metadata_filters.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/args/parse/arguments/post_content.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/args/parse/arguments/shared.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/args/parse/arguments/user_sort.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/args/parse/arguments/utils/date.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/args/parse/arguments/utils/retry.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/args/parse/commands/db.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/args/parse/commands/main.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/args/parse/commands/manual.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/args/parse/commands/message.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/args/parse/commands/metadata.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/args/parse/commands/paid.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/args/parse/commands/post.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/args/parse/commands/story.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/args/parse/group_bundles/advanced_common.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/args/parse/group_bundles/check.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/args/parse/group_bundles/common.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/args/parse/group_bundles/db.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/args/parse/group_bundles/main.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/args/parse/group_bundles/manual.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/args/parse/group_bundles/message_check.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/args/parse/group_bundles/metadata.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/args/parse/group_bundles/paid_check.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/args/parse/group_bundles/post_check.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/args/parse/group_bundles/story_check.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/args/parse/group_bundles/utils/check.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/args/parse/groups/advanced_processing.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/args/parse/groups/advanced_program.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/args/parse/groups/advanced_user_filter.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/args/parse/groups/automatic.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/args/parse/groups/check_content.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/args/parse/groups/download.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/args/parse/groups/file.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/args/parse/groups/logging.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/args/parse/groups/media_filter.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/args/parse/groups/post_filter.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/args/parse/groups/program.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/args/parse/groups/user_list.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/args/parse/groups/user_select.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/args/parse/groups/user_sort.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/args/types/arrow.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/args/types/choice.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/auth/data.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/auth/file.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/auth/make.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/auth/request.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/auth/schema.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/auth/utils/dict.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/auth/utils/error.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/auth/utils/prompt.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/auth/utils/warning/check.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/auth/utils/warning/print.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/auth/utils/warning/warning.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/cache.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/checkers.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/config/config.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/config/file.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/config/utils/context.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/config/utils/wrapper.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/console.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/const.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/context/exit.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/context/run_async.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/context/stdout.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/dates.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/encoding.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/hash.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/live/classes/progress.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/live/classes/task.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/live/classes/transfercol.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/live/clear.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/live/empty.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/live/groups.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/live/live.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/live/panel.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/live/progress.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/live/screens.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/live/tasks.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/live/updater.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/logs/classes/classes.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/logs/classes/handlers/discord.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/logs/classes/handlers/file.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/logs/classes/handlers/text.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/logs/close.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/logs/globals.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/logs/handle.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/logs/other.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/logs/stdout.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/logs/utils/level.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/logs/utils/trace.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/manager.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/me.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/merge.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/of_env/__init__.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/of_env/of_env.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/of_env/values/action/download.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/of_env/values/action/like.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/of_env/values/action/metadata.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/of_env/values/date.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/of_env/values/dynamic.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/of_env/values/general.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/of_env/values/list.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/of_env/values/live.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/of_env/values/logger.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/of_env/values/path/bytes.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/of_env/values/path/files.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/of_env/values/path/general.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/of_env/values/path/length.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/of_env/values/req/anon.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/of_env/values/req/api.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/of_env/values/req/cdm.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/of_env/values/req/discord.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/of_env/values/req/git.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/of_env/values/req/mpd.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/of_env/values/req/ratelimit.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/of_env/values/req/req.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/of_env/values/rich.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/of_env/values/test/test_constants.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/of_env/values/time.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/of_env/values/url/dynamic.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/of_env/values/url/other_url.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/of_env/values/url/url.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/paths/db.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/paths/manage.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/paths/paths.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/profiles/data.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/profiles/manage.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/profiles/tools.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/sems.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/separate.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/string.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/system/network.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/system/priority.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/system/speed.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/system/system.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/utils/text.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/pyproject.toml +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/scripts/commit_version.sh +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/scripts/determine_docker_stable_dev_tags.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/scripts/entry/entrypoint.sh +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/scripts/entry/lib_paths.sh +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/scripts/entry/lib_permissions.sh +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/scripts/entry/lib_user_setup.sh +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/scripts/release_version.sh +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/scripts/retry_action.sh +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/specs/onedir.spec +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/specs/onefile.spec +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/test/calls/example.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/test/calls/utils_test.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/test/db/archive_test.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/test/db/highlights_test.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/test/db/media_test.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/test/db/message_test.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/test/db/pinned_test.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/test/db/post_test.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/test/db/profile_test.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/test/db/stories_test.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/test/general/auth_test.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/test/general/config_test.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/test/general/filter_test.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/test/general/like_test.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/test/general/misc_test.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/test/general/path_test.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/test/general/profile_folder_test.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/test/general/profile_scrape_test.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/test/general/validator_test.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/test/post/archived_post_test.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/test/post/highlight_post_test.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/test/post/messages_post_test.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/test/post/paid_post_test.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/test/post/pinned_post_test.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/test/post/stories_post_test.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/test/post/timeline_post_test.py +0 -0
- {ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/uv.lock +0 -0
|
@@ -4,6 +4,8 @@ import asyncio
|
|
|
4
4
|
import logging
|
|
5
5
|
import re
|
|
6
6
|
import warnings
|
|
7
|
+
from typing import Union
|
|
8
|
+
from pathlib import Path
|
|
7
9
|
|
|
8
10
|
import arrow
|
|
9
11
|
from async_property import async_cached_property
|
|
@@ -37,52 +39,46 @@ class Media(base.base):
|
|
|
37
39
|
self._lock = asyncio.Lock()
|
|
38
40
|
self._cached_mpd = None
|
|
39
41
|
|
|
40
|
-
# ==> STATE TRACKING ATTRIBUTES <==
|
|
41
42
|
self.download_attempted = False
|
|
42
43
|
self.download_succeeded = (
|
|
43
44
|
None # Using tri-state: None (not attempted), True, False
|
|
44
45
|
)
|
|
45
|
-
self.like_attempted = False
|
|
46
|
-
self.like_succeeded = None # Using tri-state: None (not attempted), True, False
|
|
47
46
|
|
|
48
|
-
# ==> RECOMMENDED CHANGE for __eq__ <==
|
|
49
|
-
# Two different media items can have the same postid.
|
|
50
|
-
# It's safer to check for media id equality.
|
|
51
47
|
def __eq__(self, other):
|
|
52
48
|
if not isinstance(other, Media):
|
|
53
49
|
return NotImplemented
|
|
54
50
|
return self.id == other.id
|
|
55
51
|
|
|
56
|
-
# ==> STATE MANAGEMENT METHODS (New Additions) <==
|
|
57
52
|
def mark_download_attempt(self):
|
|
58
53
|
"""Marks that a download has been attempted."""
|
|
59
54
|
self.download_attempted = True
|
|
60
55
|
|
|
61
|
-
def
|
|
62
|
-
"""Marks a download as successful."""
|
|
56
|
+
def mark_download_finished(self,success=True):
|
|
57
|
+
"""Marks a download as successful/failed."""
|
|
63
58
|
self.download_attempted = True
|
|
64
|
-
self.download_succeeded =
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
self.
|
|
69
|
-
self.download_succeeded
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
""
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
def
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
self.
|
|
84
|
-
|
|
85
|
-
|
|
59
|
+
self.download_succeeded =(success==True)
|
|
60
|
+
self.update_status()
|
|
61
|
+
|
|
62
|
+
def update_status(self):
|
|
63
|
+
self.media["download_status"] = "skipped"
|
|
64
|
+
if self.download_attempted == True and self.download_succeeded == False:
|
|
65
|
+
self.media["download_status"] = "failed"
|
|
66
|
+
elif self.download_attempted == True and self.download_succeeded == True:
|
|
67
|
+
self.media["download_status"] = "succeed"
|
|
68
|
+
|
|
69
|
+
def add_filepath(self, path: Union[str | Path]):
|
|
70
|
+
path = str(path)
|
|
71
|
+
self.media["filepath"] = path
|
|
72
|
+
|
|
73
|
+
# only use if content type can't be found from request
|
|
74
|
+
@property
|
|
75
|
+
def content_type(self):
|
|
76
|
+
if self.mediatype.lower() == "videos":
|
|
77
|
+
return "mp4"
|
|
78
|
+
elif self.mediatype.lower() == "images":
|
|
79
|
+
return "jpg"
|
|
80
|
+
elif self.mediatype.lower() == "audios":
|
|
81
|
+
return "mp3"
|
|
86
82
|
|
|
87
83
|
@property
|
|
88
84
|
def expires(self):
|
|
@@ -26,7 +26,7 @@ class PostCollection:
|
|
|
26
26
|
self.mode = mode
|
|
27
27
|
# Internal dictionary to store posts, using post_id as the key for de-duplication
|
|
28
28
|
self._posts_map = {}
|
|
29
|
-
log.info(f"Initialized PostCollection for {username}
|
|
29
|
+
log.info(f"Initialized PostCollection for {username}")
|
|
30
30
|
|
|
31
31
|
@property
|
|
32
32
|
def posts(self) -> list[Post]:
|
|
@@ -102,16 +102,35 @@ class Post(base.base):
|
|
|
102
102
|
if media_item in self.media_to_download:
|
|
103
103
|
self.media_to_download.remove(media_item)
|
|
104
104
|
|
|
105
|
-
def mark_post_liked(self, success):
|
|
105
|
+
def mark_post_liked(self, success=True):
|
|
106
106
|
"""
|
|
107
|
-
Updates the status of the post after a like/unlike attempt.
|
|
107
|
+
Updates the success status of the post after a like/unlike attempt.
|
|
108
108
|
"""
|
|
109
109
|
self.like_attempted = True
|
|
110
|
-
self.like_success =
|
|
110
|
+
self.like_success =(success==True)
|
|
111
111
|
if success:
|
|
112
112
|
self._post["isFavorite"] = True
|
|
113
113
|
self.is_actionable_like = False
|
|
114
114
|
|
|
115
|
+
def mark_post_unliked(self, success=True):
|
|
116
|
+
"""
|
|
117
|
+
Updates the success status of the post after a like/unlike attempt.
|
|
118
|
+
"""
|
|
119
|
+
self.like_attempted = True
|
|
120
|
+
self.like_success = (success==True)
|
|
121
|
+
if success:
|
|
122
|
+
self._post["isFavorite"] = False
|
|
123
|
+
self.is_actionable_like = False
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
def mark_like_attempt(self):
|
|
127
|
+
"""
|
|
128
|
+
Updates the status of the post before a like/unlike attempt.
|
|
129
|
+
"""
|
|
130
|
+
self.like_attempted = True
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
|
|
115
134
|
@property
|
|
116
135
|
def missed_downloads(self):
|
|
117
136
|
"""Convenience property to see what failed to download."""
|
|
@@ -4,7 +4,6 @@ import pathlib
|
|
|
4
4
|
import re
|
|
5
5
|
import arrow
|
|
6
6
|
|
|
7
|
-
import ofscraper.utils.args.accessors.read as read_args
|
|
8
7
|
import ofscraper.utils.cache as cache
|
|
9
8
|
import ofscraper.utils.config.data as data
|
|
10
9
|
import ofscraper.utils.config.file as config_file
|
|
@@ -236,7 +235,7 @@ class Placeholders(basePlaceholder):
|
|
|
236
235
|
self._variables.update({"only_filename": ele.no_quality_final_filename})
|
|
237
236
|
self._variables.update({"text": ele.file_text})
|
|
238
237
|
self._variables.update({"config": config_file.open_config()})
|
|
239
|
-
self._variables.update({"args":
|
|
238
|
+
self._variables.update({"args": settings.get_args()})
|
|
240
239
|
|
|
241
240
|
@basePlaceholder.async_wrapper
|
|
242
241
|
async def getmediadir(self, root=None, create=True):
|
|
@@ -432,7 +431,7 @@ class Textholders(basePlaceholder):
|
|
|
432
431
|
)
|
|
433
432
|
self._variables.update({"text": ele.text_trunicate(ele.file_sanitized_text)})
|
|
434
433
|
self._variables.update({"config": config_file.open_config()})
|
|
435
|
-
self._variables.update({"args":
|
|
434
|
+
self._variables.update({"args": settings.get_args()})
|
|
436
435
|
|
|
437
436
|
self._variables.update({"quality": "source"})
|
|
438
437
|
self._variables.update(
|
{ofscraper-3.13.4 → ofscraper-3.13.5.dev2}/ofscraper/classes/sessionmanager/sessionmanager.py
RENAMED
|
@@ -19,7 +19,7 @@ import ofscraper.utils.of_env.of_env as of_env
|
|
|
19
19
|
from ofscraper.utils.auth.utils.warning.print import print_auth_warning
|
|
20
20
|
import ofscraper.utils.settings as settings
|
|
21
21
|
from ofscraper.classes.sessionmanager.cert import create_custom_ssl_context
|
|
22
|
-
|
|
22
|
+
|
|
23
23
|
# Constants for request actions
|
|
24
24
|
TOO_MANY = "too_many"
|
|
25
25
|
AUTH = "auth"
|
|
@@ -64,10 +64,10 @@ class SessionSleep:
|
|
|
64
64
|
self._init_sleep = (
|
|
65
65
|
sleep if sleep is not None else of_env.getattr("SESSION_SLEEP_INIT")
|
|
66
66
|
)
|
|
67
|
-
self._min_sleep=(
|
|
67
|
+
self._min_sleep = (
|
|
68
68
|
min_sleep if min_sleep is not None else of_env.getattr("SESSION_SLEEP_MIN")
|
|
69
69
|
)
|
|
70
|
-
#set sleep to min sleep always
|
|
70
|
+
# set sleep to min sleep always
|
|
71
71
|
self._sleep = self._min_sleep
|
|
72
72
|
|
|
73
73
|
self._difmin = (
|
|
@@ -102,15 +102,15 @@ class SessionSleep:
|
|
|
102
102
|
new_sleep = self._sleep / self._decay_factor
|
|
103
103
|
self._sleep = max(self._min_sleep, new_sleep)
|
|
104
104
|
self._last_date = arrow.now()
|
|
105
|
-
logging.getLogger("shared").debug(
|
|
106
|
-
|
|
107
|
-
|
|
105
|
+
logging.getLogger("shared").debug(
|
|
106
|
+
f"[{self.error_name}] Sleep decay => Reducing sleep to [{self._sleep:.2f} seconds]"
|
|
107
|
+
)
|
|
108
108
|
|
|
109
109
|
async def async_do_sleep(self):
|
|
110
110
|
async with self._alock:
|
|
111
111
|
self._maybe_decay_sleep()
|
|
112
|
-
if self._sleep and self._sleep<=self._min_sleep:
|
|
113
|
-
|
|
112
|
+
if self._sleep and self._sleep <= self._min_sleep:
|
|
113
|
+
logging.getLogger("shared").debug(
|
|
114
114
|
f"SessionSleep: Waiting [{self._sleep:.2f} seconds] due to {self.error_name} min sleep value"
|
|
115
115
|
)
|
|
116
116
|
elif self._sleep and self._sleep > 0:
|
|
@@ -124,7 +124,7 @@ class SessionSleep:
|
|
|
124
124
|
def do_sleep(self):
|
|
125
125
|
with self._lock:
|
|
126
126
|
self._maybe_decay_sleep()
|
|
127
|
-
if self._sleep and self._sleep<=self._min_sleep:
|
|
127
|
+
if self._sleep and self._sleep <= self._min_sleep:
|
|
128
128
|
logging.getLogger("shared").debug(
|
|
129
129
|
f"SessionSleep: Waiting [{self._sleep:.2f} seconds] due to {self.error_name} min sleep value"
|
|
130
130
|
)
|
|
@@ -175,9 +175,6 @@ class SessionSleep:
|
|
|
175
175
|
self._sleep = val
|
|
176
176
|
|
|
177
177
|
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
178
|
class sessionManager:
|
|
182
179
|
"""
|
|
183
180
|
Manages HTTP sessions, handling pooling, signing, retries, and dual backoff systems.
|
|
@@ -386,27 +383,27 @@ class sessionManager:
|
|
|
386
383
|
# max_connections=self._connect_limit,
|
|
387
384
|
# keepalive_expiry=self._keep_alive_exp,
|
|
388
385
|
# ),
|
|
389
|
-
|
|
386
|
+
|
|
390
387
|
# ),
|
|
391
388
|
# )
|
|
392
389
|
|
|
393
|
-
self._session=aiohttp.ClientSession(
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
390
|
+
self._session = aiohttp.ClientSession(
|
|
391
|
+
connector=aiohttp.TCPConnector(
|
|
392
|
+
limit=self._connect_limit,
|
|
393
|
+
ssl=(
|
|
394
|
+
False
|
|
395
|
+
if not settings.get_settings().ssl_verify
|
|
396
|
+
else create_custom_ssl_context()
|
|
397
|
+
),
|
|
398
|
+
),
|
|
399
|
+
timeout=aiohttp.ClientTimeout(
|
|
400
|
+
total=self._total_timeout,
|
|
401
|
+
connect=self._connect_timeout,
|
|
402
|
+
sock_connect=self._pool_connect_timeout,
|
|
403
|
+
sock_read=self._read_timeout,
|
|
407
404
|
),
|
|
408
405
|
)
|
|
409
|
-
|
|
406
|
+
|
|
410
407
|
else:
|
|
411
408
|
self._session = httpx.Client(
|
|
412
409
|
http2=True,
|
|
@@ -500,7 +497,6 @@ class sessionManager:
|
|
|
500
497
|
pass
|
|
501
498
|
else:
|
|
502
499
|
self._forbidden_sleeper.do_sleep()
|
|
503
|
-
|
|
504
500
|
|
|
505
501
|
if (
|
|
506
502
|
SIGN in actions
|
|
@@ -525,8 +521,7 @@ class sessionManager:
|
|
|
525
521
|
timeout=httpx.Timeout(
|
|
526
522
|
total_timeout or self._total_timeout,
|
|
527
523
|
connect=connect_timeout,
|
|
528
|
-
pool=pool_connect_timeout
|
|
529
|
-
or self._pool_connect_timeout,
|
|
524
|
+
pool=pool_connect_timeout or self._pool_connect_timeout,
|
|
530
525
|
read=read_timeout or self._read_timeout,
|
|
531
526
|
),
|
|
532
527
|
)
|
|
@@ -556,14 +551,14 @@ class sessionManager:
|
|
|
556
551
|
json: dict = None,
|
|
557
552
|
params: dict = None,
|
|
558
553
|
data: dict = None,
|
|
559
|
-
wait_min:float=None,
|
|
560
|
-
wait_max:float=None,
|
|
561
|
-
retries:bool=None,
|
|
562
|
-
redirects:bool=True,
|
|
563
|
-
total_timeout:bool=None,
|
|
564
|
-
connect_timeout:float=None,
|
|
565
|
-
pool_connect_timeout:float=None,
|
|
566
|
-
read_timeout:float=None,
|
|
554
|
+
wait_min: float = None,
|
|
555
|
+
wait_max: float = None,
|
|
556
|
+
retries: bool = None,
|
|
557
|
+
redirects: bool = True,
|
|
558
|
+
total_timeout: bool = None,
|
|
559
|
+
connect_timeout: float = None,
|
|
560
|
+
pool_connect_timeout: float = None,
|
|
561
|
+
read_timeout: float = None,
|
|
567
562
|
actions: Optional[list] = None,
|
|
568
563
|
exceptions: Optional[list] = None,
|
|
569
564
|
**kwargs,
|
|
@@ -572,15 +567,11 @@ class sessionManager:
|
|
|
572
567
|
exceptions = exceptions or []
|
|
573
568
|
retries = kwargs.get("retries") or self._retries
|
|
574
569
|
wait_min = kwargs.get("wait_min") or self._wait_min
|
|
575
|
-
wait_max = (
|
|
576
|
-
kwargs.get("wait_max_exponential") or self._wait_max_exponential
|
|
577
|
-
)
|
|
570
|
+
wait_max = kwargs.get("wait_max_exponential") or self._wait_max_exponential
|
|
578
571
|
|
|
579
572
|
async for _ in AsyncRetrying(
|
|
580
573
|
stop=tenacity.stop.stop_after_attempt(retries),
|
|
581
|
-
wait=tenacity.wait_random(
|
|
582
|
-
min=wait_min, max=wait_max
|
|
583
|
-
),
|
|
574
|
+
wait=tenacity.wait_random(min=wait_min, max=wait_max),
|
|
584
575
|
retry=retry_if_not_exception_type((KeyboardInterrupt, SystemExit)),
|
|
585
576
|
reraise=True,
|
|
586
577
|
before=lambda x: (
|
|
@@ -595,7 +586,7 @@ class sessionManager:
|
|
|
595
586
|
if await self._rate_limit_sleeper.async_do_sleep():
|
|
596
587
|
pass
|
|
597
588
|
else:
|
|
598
|
-
self._forbidden_sleeper.async_do_sleep()
|
|
589
|
+
await self._forbidden_sleeper.async_do_sleep()
|
|
599
590
|
if SIGN in actions or FORCED_NEW in actions or HEADERS in actions:
|
|
600
591
|
headers = self._create_headers(
|
|
601
592
|
headers, url, SIGN in actions, FORCED_NEW in actions
|
|
@@ -604,24 +595,24 @@ class sessionManager:
|
|
|
604
595
|
cookies = self._create_cookies()
|
|
605
596
|
|
|
606
597
|
r = await self._aio_funct(
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
598
|
+
method,
|
|
599
|
+
url,
|
|
600
|
+
timeout=aiohttp.ClientTimeout(
|
|
601
|
+
total=total_timeout or self._total_timeout,
|
|
602
|
+
connect=connect_timeout or self._connect_timeout,
|
|
603
|
+
sock_connect=pool_connect_timeout
|
|
604
|
+
or self._pool_connect_timeout,
|
|
605
|
+
sock_read=read_timeout or self._read_timeout,
|
|
606
|
+
),
|
|
607
|
+
headers=headers,
|
|
608
|
+
cookies=cookies,
|
|
609
|
+
allow_redirects=redirects,
|
|
610
|
+
proxy=self._proxy,
|
|
611
|
+
params=params,
|
|
612
|
+
json=json,
|
|
613
|
+
data=data,
|
|
614
|
+
ssl=ssl.create_default_context(cafile=certifi.where()),
|
|
615
|
+
)
|
|
625
616
|
|
|
626
617
|
if not r.ok and r.status_code != 404:
|
|
627
618
|
self._log.debug(f"[bold]failed: [bold] {r.url}")
|
|
@@ -640,7 +631,6 @@ class sessionManager:
|
|
|
640
631
|
self._sem.release()
|
|
641
632
|
raise E
|
|
642
633
|
|
|
643
|
-
|
|
644
634
|
@property
|
|
645
635
|
def sleep(self):
|
|
646
636
|
return self._rate_limit_sleeper.sleep
|
|
@@ -649,7 +639,6 @@ class sessionManager:
|
|
|
649
639
|
def sleep(self, val):
|
|
650
640
|
self._rate_limit_sleeper.sleep = val
|
|
651
641
|
|
|
652
|
-
|
|
653
642
|
def _httpx_funct(self, method, **kwargs):
|
|
654
643
|
t = self._session.request(method.upper(), **kwargs)
|
|
655
644
|
t.ok = not t.is_error
|
|
@@ -659,6 +648,7 @@ class sessionManager:
|
|
|
659
648
|
t.iter_chunked = t.iter_bytes
|
|
660
649
|
t.read_ = t.read
|
|
661
650
|
return t
|
|
651
|
+
|
|
662
652
|
async def _aio_funct(self, method, *args, **kwargs):
|
|
663
653
|
# public function forces context manager use
|
|
664
654
|
r = await self._session._request(method, *args, **kwargs)
|
|
@@ -670,4 +660,4 @@ class sessionManager:
|
|
|
670
660
|
r.status_code = r.status
|
|
671
661
|
r.read_ = r.content.read
|
|
672
662
|
r.eof = r.content.at_eof
|
|
673
|
-
return r
|
|
663
|
+
return r
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
from ofscraper.classes.table.fields.numfield import PostiveNumField
|
|
2
|
-
import ofscraper.utils.args.accessors.read as read_args
|
|
3
2
|
import ofscraper.utils.settings as settings
|
|
4
3
|
|
|
5
4
|
|
|
@@ -13,7 +12,7 @@ class SizeMaxField(PostiveNumField):
|
|
|
13
12
|
|
|
14
13
|
def on_input_changed(self, event):
|
|
15
14
|
value = event.value if event.value else "0"
|
|
16
|
-
args =
|
|
15
|
+
args = settings.get_args()
|
|
17
16
|
args.size_max = int(value)
|
|
18
17
|
settings.update_args(args)
|
|
19
18
|
|
|
@@ -28,6 +27,6 @@ class SizeMinField(PostiveNumField):
|
|
|
28
27
|
|
|
29
28
|
def on_input_changed(self, event):
|
|
30
29
|
value = event.value if event.value else "0"
|
|
31
|
-
args =
|
|
30
|
+
args = settings.get_args()
|
|
32
31
|
args.size_min = int(value)
|
|
33
32
|
settings.update_args(args)
|
|
@@ -22,7 +22,6 @@ import ofscraper.data.api.timeline as timeline
|
|
|
22
22
|
import ofscraper.classes.of.posts as posts_
|
|
23
23
|
import ofscraper.classes.table.app as app
|
|
24
24
|
import ofscraper.db.operations as operations
|
|
25
|
-
import ofscraper.utils.args.accessors.read as read_args
|
|
26
25
|
import ofscraper.utils.settings as settings
|
|
27
26
|
import ofscraper.utils.auth.request as auth_requests
|
|
28
27
|
import ofscraper.utils.console as console_
|
|
@@ -40,8 +39,8 @@ from ofscraper.db.operations_.media import (
|
|
|
40
39
|
)
|
|
41
40
|
from ofscraper.utils.checkers import check_auth
|
|
42
41
|
from ofscraper.utils.context.run_async import run
|
|
43
|
-
from ofscraper.scripts.
|
|
44
|
-
from ofscraper.main.close.final.final import
|
|
42
|
+
from ofscraper.scripts.after_download_action_script import after_download_action_script
|
|
43
|
+
from ofscraper.main.close.final.final import final_action
|
|
45
44
|
import ofscraper.main.manager as manager
|
|
46
45
|
import ofscraper.filters.media.main as filters
|
|
47
46
|
from ofscraper.commands.scraper.actions.download.download import process_dicts
|
|
@@ -73,11 +72,13 @@ def process_download_cart():
|
|
|
73
72
|
None
|
|
74
73
|
if len(cart_dict.keys()) > 0:
|
|
75
74
|
for val in cart_dict.values():
|
|
76
|
-
|
|
75
|
+
after_download_action_script(
|
|
76
|
+
val["userdata"], val["media"], val["post"]
|
|
77
|
+
)
|
|
77
78
|
results = ["check cart results"] + list(
|
|
78
79
|
map(lambda x: x["results"], cart_dict.values())
|
|
79
80
|
)
|
|
80
|
-
|
|
81
|
+
final_action(normal_data=results)
|
|
81
82
|
time.sleep(5)
|
|
82
83
|
except Exception as e:
|
|
83
84
|
log.traceback_(f"Error in process_item: {e}")
|
|
@@ -110,7 +111,7 @@ def process_item():
|
|
|
110
111
|
raise Exception(f"No data for {media_id}_{post_id}_{username}")
|
|
111
112
|
log.info(f"Added url {media.url or media.mpd}")
|
|
112
113
|
log.info("Sending URLs to OF-Scraper")
|
|
113
|
-
manager.Manager.model_manager.
|
|
114
|
+
manager.Manager.model_manager.add_model(username)
|
|
114
115
|
post = media.post
|
|
115
116
|
model_id = media.post.model_id
|
|
116
117
|
username = media.post.username
|
|
@@ -136,6 +137,7 @@ def process_item():
|
|
|
136
137
|
app.app.table.update_cell_at_key(
|
|
137
138
|
key, "download_cart", Text("[downloaded]", style="bold green")
|
|
138
139
|
)
|
|
140
|
+
#might not be needed because of lack of final_script
|
|
139
141
|
manager.Manager.model_manager.mark_as_processed(username)
|
|
140
142
|
break
|
|
141
143
|
except Exception as E:
|
|
@@ -190,7 +192,7 @@ async def data_refill(media_id, post_id, target_name, model_id):
|
|
|
190
192
|
|
|
191
193
|
|
|
192
194
|
def allow_check_dupes():
|
|
193
|
-
args =
|
|
195
|
+
args = settings.get_args()
|
|
194
196
|
args.force_all = True
|
|
195
197
|
settings.update_args(args)
|
|
196
198
|
|
|
@@ -219,7 +221,7 @@ def checker():
|
|
|
219
221
|
|
|
220
222
|
|
|
221
223
|
def set_after_check_mode():
|
|
222
|
-
args =
|
|
224
|
+
args = settings.get_args()
|
|
223
225
|
args.after = 0
|
|
224
226
|
settings.update_args(args)
|
|
225
227
|
|
|
@@ -413,7 +415,7 @@ async def post_check_retriver():
|
|
|
413
415
|
|
|
414
416
|
def reset_data():
|
|
415
417
|
# clean up args once check modes are ready to launch
|
|
416
|
-
args =
|
|
418
|
+
args = settings.get_args()
|
|
417
419
|
if args.username:
|
|
418
420
|
args.username = settings.get_settings().usernames = None
|
|
419
421
|
settings.update_args(args)
|
|
@@ -11,7 +11,6 @@ from humanfriendly import format_size
|
|
|
11
11
|
|
|
12
12
|
import ofscraper.utils.console as console
|
|
13
13
|
|
|
14
|
-
import ofscraper.utils.args.accessors.read as read_args
|
|
15
14
|
from ofscraper.db.operations_.media import (
|
|
16
15
|
get_timeline_media,
|
|
17
16
|
get_archived_media,
|
|
@@ -54,7 +53,7 @@ class DBManager:
|
|
|
54
53
|
|
|
55
54
|
@run_async
|
|
56
55
|
async def get_all_media(self):
|
|
57
|
-
args =
|
|
56
|
+
args = settings.get_args()
|
|
58
57
|
timeline = []
|
|
59
58
|
archived = []
|
|
60
59
|
messages = []
|
|
@@ -108,7 +107,7 @@ class DBManager:
|
|
|
108
107
|
|
|
109
108
|
def filter_media(self):
|
|
110
109
|
self.log.info(f"filtering media for {self.username}_{self.model_id}")
|
|
111
|
-
args =
|
|
110
|
+
args = settings.get_args()
|
|
112
111
|
medias = self.media
|
|
113
112
|
# downloaded
|
|
114
113
|
if args.downloaded:
|
|
@@ -10,8 +10,6 @@ import ofscraper.classes.of.media as media_
|
|
|
10
10
|
import ofscraper.classes.of.posts as posts_
|
|
11
11
|
import ofscraper.db.operations as operations
|
|
12
12
|
import ofscraper.commands.scraper.actions.download.download as download
|
|
13
|
-
import ofscraper.utils.args.accessors.read as read_args
|
|
14
|
-
import ofscraper.utils.args.mutators.write as write_args
|
|
15
13
|
import ofscraper.utils.of_env.of_env as of_env
|
|
16
14
|
import ofscraper.utils.live.screens as progress_utils
|
|
17
15
|
import ofscraper.utils.live.updater as progress_updater
|
|
@@ -23,7 +21,7 @@ from ofscraper.db.operations import make_changes_to_content_tables
|
|
|
23
21
|
from ofscraper.db.operations_.media import batch_mediainsert
|
|
24
22
|
from ofscraper.utils.checkers import check_auth
|
|
25
23
|
from ofscraper.utils.context.run_async import run
|
|
26
|
-
from ofscraper.main.close.final.final import
|
|
24
|
+
from ofscraper.main.close.final.final import final_action
|
|
27
25
|
from ofscraper.commands.scraper.actions.download.utils.text import textDownloader
|
|
28
26
|
import ofscraper.main.manager as manager
|
|
29
27
|
import ofscraper.utils.settings as settings
|
|
@@ -95,7 +93,7 @@ def manual_download(urls=None):
|
|
|
95
93
|
def final_action(results):
|
|
96
94
|
normal_data = ["Manual Mode Results"]
|
|
97
95
|
normal_data.extend(results)
|
|
98
|
-
|
|
96
|
+
final_action(
|
|
99
97
|
normal_data=normal_data,
|
|
100
98
|
scrape_paid_data=None,
|
|
101
99
|
user_first_data=None,
|
|
@@ -103,13 +101,13 @@ def final_action(results):
|
|
|
103
101
|
|
|
104
102
|
|
|
105
103
|
def allow_manual_dupes():
|
|
106
|
-
args =
|
|
104
|
+
args = settings.get_args()
|
|
107
105
|
args.force_all = True
|
|
108
|
-
|
|
106
|
+
settings.update_args(args)
|
|
109
107
|
|
|
110
108
|
|
|
111
109
|
def set_user_data(url_dicts):
|
|
112
|
-
manager.Manager.model_manager.
|
|
110
|
+
manager.Manager.model_manager.add_model(
|
|
113
111
|
[nested_dict.get("username") for nested_dict in url_dicts.values()]
|
|
114
112
|
)
|
|
115
113
|
|
|
@@ -297,7 +295,7 @@ def get_info(url):
|
|
|
297
295
|
|
|
298
296
|
|
|
299
297
|
def url_helper(urls):
|
|
300
|
-
args =
|
|
298
|
+
args = settings.get_args()
|
|
301
299
|
out = []
|
|
302
300
|
out.extend(args.get("file", []) or [])
|
|
303
301
|
out.extend(args.get("url", []) or [])
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
r"""
|
|
2
|
-
|
|
3
|
-
_______ _______ _______ _______ _______ _______ _______ _______ _______
|
|
2
|
+
|
|
3
|
+
_______ _______ _______ _______ _______ _______ _______ _______ _______
|
|
4
4
|
( ___ )( ____ \ ( ____ \( ____ \( ____ )( ___ )( ____ )( ____ \( ____ )
|
|
5
5
|
| ( ) || ( \/ | ( \/| ( \/| ( )|| ( ) || ( )|| ( \/| ( )|
|
|
6
6
|
| | | || (__ _____ | (_____ | | | (____)|| (___) || (____)|| (__ | (____)|
|
|
7
7
|
| | | || __) (_____)(_____ )| | | __)| ___ || _____)| __) | __)
|
|
8
|
-
| | | || ( ) || | | (\ ( | ( ) || ( | ( | (\ (
|
|
8
|
+
| | | || ( ) || | | (\ ( | ( ) || ( | ( | (\ (
|
|
9
9
|
| (___) || ) /\____) || (____/\| ) \ \__| ) ( || ) | (____/\| ) \ \__
|
|
10
10
|
(_______)|/ \_______)(_______/|/ \__/|/ \||/ (_______/|/ \__/
|
|
11
|
-
|
|
11
|
+
|
|
12
12
|
"""
|
|
13
13
|
|
|
14
14
|
import asyncio
|
|
@@ -23,6 +23,7 @@ from ofscraper.commands.scraper.actions.utils.log import get_medialog
|
|
|
23
23
|
|
|
24
24
|
from ofscraper.commands.metadata.manager import MetaDataManager
|
|
25
25
|
from ofscraper.commands.metadata.desc import desc
|
|
26
|
+
from ofscraper.classes.of.media import Media
|
|
26
27
|
|
|
27
28
|
|
|
28
29
|
async def consumer(aws, task1, medialist, lock):
|
|
@@ -36,7 +37,7 @@ async def consumer(aws, task1, medialist, lock):
|
|
|
36
37
|
break
|
|
37
38
|
else:
|
|
38
39
|
try:
|
|
39
|
-
ele = data[1]
|
|
40
|
+
ele: Media = data[1]
|
|
40
41
|
media_type = await MetaDataManager().metadata(*data)
|
|
41
42
|
except Exception as e:
|
|
42
43
|
common_globals.log.info(
|
|
@@ -47,13 +48,17 @@ async def consumer(aws, task1, medialist, lock):
|
|
|
47
48
|
try:
|
|
48
49
|
if media_type == "images":
|
|
49
50
|
common_globals.photo_count += 1
|
|
51
|
+
ele.mark_download_finished()
|
|
50
52
|
|
|
51
53
|
elif media_type == "videos":
|
|
52
54
|
common_globals.video_count += 1
|
|
55
|
+
ele.mark_download_finished()
|
|
53
56
|
elif media_type == "audios":
|
|
54
57
|
common_globals.audio_count += 1
|
|
58
|
+
ele.mark_download_finished()
|
|
55
59
|
elif media_type == "skipped":
|
|
56
60
|
common_globals.skipped += 1
|
|
61
|
+
ele.mark_download_finished(success=False)
|
|
57
62
|
elif media_type == "forced_skipped":
|
|
58
63
|
common_globals.forced_skipped += 1
|
|
59
64
|
sum_count = (
|
|
@@ -64,6 +69,7 @@ async def consumer(aws, task1, medialist, lock):
|
|
|
64
69
|
+ common_globals.forced_skipped
|
|
65
70
|
)
|
|
66
71
|
log_download_progress(media_type)
|
|
72
|
+
|
|
67
73
|
progress_updater.update_metadata_task(
|
|
68
74
|
task1,
|
|
69
75
|
description=desc.format(
|