ofscraper 3.13.dev5__tar.gz → 3.13.dev7__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.
Files changed (354) hide show
  1. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/PKG-INFO +5 -1
  2. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/README.md +3 -0
  3. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/classes/sessionmanager/download.py +7 -16
  4. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/classes/sessionmanager/sessionmanager.py +147 -8
  5. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/commands/metadata/metadata.py +1 -4
  6. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/commands/scraper/actions/download/download.py +1 -5
  7. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/commands/scraper/actions/download/managers/alt_download.py +58 -23
  8. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/commands/scraper/actions/download/managers/downloadmanager.py +3 -1
  9. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/commands/scraper/actions/download/managers/main_download.py +60 -26
  10. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/commands/scraper/actions/download/run.py +0 -2
  11. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/commands/scraper/actions/download/utils/chunk.py +4 -0
  12. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/commands/scraper/actions/like/like.py +2 -2
  13. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/commands/scraper/actions/utils/globals.py +1 -37
  14. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/commands/scraper/scraper.py +4 -1
  15. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/commands/scraper/utils/schedule.py +2 -2
  16. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/commands/utils/command.py +6 -6
  17. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/const/values/action/download.py +1 -1
  18. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/const/values/req/req.py +4 -3
  19. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/const/values/system.py +1 -1
  20. ofscraper-3.13.dev7/ofscraper/data/api/common/after.py +25 -0
  21. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/data/models/utils/retriver.py +3 -3
  22. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/data/posts/scrape_paid.py +1 -1
  23. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/filters/media/filters.py +0 -1
  24. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/filters/media/main.py +6 -4
  25. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/main/close/final/final_log.py +0 -2
  26. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/main/open/load.py +0 -1
  27. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/prompts/prompt_groups/config.py +4 -3
  28. ofscraper-3.13.dev7/ofscraper/utils/args/accessors/actions.py +0 -0
  29. ofscraper-3.13.dev7/ofscraper/utils/args/callbacks/arguments/post.py +6 -0
  30. ofscraper-3.13.dev7/ofscraper/utils/args/callbacks/arguments/username.py +9 -0
  31. {ofscraper-3.13.dev5/ofscraper/utils/args/callbacks → ofscraper-3.13.dev7/ofscraper/utils/args/callbacks/parse}/file.py +1 -1
  32. {ofscraper-3.13.dev5/ofscraper/utils/args/callbacks → ofscraper-3.13.dev7/ofscraper/utils/args/callbacks/parse}/string.py +1 -1
  33. {ofscraper-3.13.dev5/ofscraper/utils/args/callbacks → ofscraper-3.13.dev7/ofscraper/utils/args/callbacks/parse}/username.py +2 -3
  34. ofscraper-3.13.dev7/ofscraper/utils/args/parse/arguments/advanced_processing.py +33 -0
  35. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/args/parse/arguments/advanced_program.py +1 -1
  36. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/args/parse/arguments/automatic.py +1 -1
  37. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/args/parse/arguments/check.py +2 -2
  38. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/args/parse/arguments/logging.py +2 -2
  39. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/args/parse/arguments/media_content.py +3 -3
  40. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/args/parse/arguments/metadata_filters.py +4 -16
  41. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/args/parse/arguments/post_content.py +15 -16
  42. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/args/parse/arguments/user_select.py +1 -1
  43. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/args/parse/commands/db.py +4 -2
  44. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/args/parse/commands/main.py +0 -2
  45. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/args/parse/group_bundles/check.py +3 -2
  46. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/args/parse/group_bundles/db.py +3 -1
  47. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/args/parse/group_bundles/main.py +2 -2
  48. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/args/parse/groups/advanced_processing.py +3 -6
  49. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/args/parse/groups/post_filter.py +0 -1
  50. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/config/data.py +1 -7
  51. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/live/updater.py +11 -15
  52. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/logs/classes/classes.py +0 -14
  53. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/logs/classes/handlers/discord.py +6 -120
  54. ofscraper-3.13.dev7/ofscraper/utils/logs/classes/handlers/file.py +47 -0
  55. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/logs/close.py +0 -22
  56. ofscraper-3.13.dev7/ofscraper/utils/logs/logger.py +49 -0
  57. ofscraper-3.13.dev7/ofscraper/utils/logs/other.py +49 -0
  58. ofscraper-3.13.dev7/ofscraper/utils/logs/stdout.py +53 -0
  59. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/logs/utils/level.py +0 -4
  60. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/paths/manage.py +1 -1
  61. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/settings.py +9 -5
  62. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/system/subprocess.py +2 -2
  63. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/text.py +1 -0
  64. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/pyproject.toml +4 -3
  65. ofscraper-3.13.dev5/ofscraper/commands/scraper/actions/utils/buffer.py +0 -21
  66. ofscraper-3.13.dev5/ofscraper/data/api/common/after.py +0 -34
  67. ofscraper-3.13.dev5/ofscraper/utils/args/parse/arguments/advanced_processing.py +0 -29
  68. ofscraper-3.13.dev5/ofscraper/utils/args/parse/arguments/db.py +0 -15
  69. ofscraper-3.13.dev5/ofscraper/utils/logs/classes/handlers/file.py +0 -18
  70. ofscraper-3.13.dev5/ofscraper/utils/logs/classes/handlers/pipe.py +0 -72
  71. ofscraper-3.13.dev5/ofscraper/utils/logs/classes/handlers/rich.py +0 -136
  72. ofscraper-3.13.dev5/ofscraper/utils/logs/classes/handlers/zmq.py +0 -72
  73. ofscraper-3.13.dev5/ofscraper/utils/logs/logger.py +0 -42
  74. ofscraper-3.13.dev5/ofscraper/utils/logs/other.py +0 -241
  75. ofscraper-3.13.dev5/ofscraper/utils/logs/stdout.py +0 -277
  76. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/LICENSE +0 -0
  77. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/__main__.py +0 -0
  78. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/__version__.py +0 -0
  79. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/__version__.pye +0 -0
  80. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/classes/labels.py +0 -0
  81. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/classes/of/base.py +0 -0
  82. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/classes/of/media.py +0 -0
  83. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/classes/of/posts.py +0 -0
  84. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/classes/placeholder.py +0 -0
  85. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/classes/sessionmanager/ofsession.py +0 -0
  86. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/classes/table/app.py +0 -0
  87. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/classes/table/compose.py +0 -0
  88. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/classes/table/const.py +0 -0
  89. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/classes/table/css.py +0 -0
  90. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/classes/table/fields/boolfield.py +0 -0
  91. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/classes/table/fields/datefield.py +0 -0
  92. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/classes/table/fields/downloadfield.py +0 -0
  93. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/classes/table/fields/mediafield.py +0 -0
  94. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/classes/table/fields/numfield.py +0 -0
  95. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/classes/table/fields/pricefield.py +0 -0
  96. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/classes/table/fields/responsefield.py +0 -0
  97. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/classes/table/fields/selectfield.py +0 -0
  98. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/classes/table/fields/sizefield.py +0 -0
  99. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/classes/table/fields/textsearch.py +0 -0
  100. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/classes/table/fields/timefield.py +0 -0
  101. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/classes/table/inputs/filterinput.py +0 -0
  102. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/classes/table/inputs/intergerinput.py +0 -0
  103. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/classes/table/inputs/strinput.py +0 -0
  104. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/classes/table/sections/sidebar.py +0 -0
  105. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/classes/table/sections/table.py +0 -0
  106. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/classes/table/sections/table_console.py +0 -0
  107. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/classes/table/utils/lock.py +0 -0
  108. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/classes/table/utils/names.py +0 -0
  109. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/commands/check.py +0 -0
  110. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/commands/db.py +0 -0
  111. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/commands/manual.py +0 -0
  112. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/commands/metadata/consumer.py +0 -0
  113. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/commands/metadata/desc.py +0 -0
  114. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/commands/metadata/manager.py +0 -0
  115. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/commands/scraper/actions/download/utils/desc.py +0 -0
  116. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/commands/scraper/actions/download/utils/keyhelpers.py +0 -0
  117. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/commands/scraper/actions/download/utils/leaky.py +0 -0
  118. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/commands/scraper/actions/download/utils/retries.py +0 -0
  119. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/commands/scraper/actions/download/utils/text.py +0 -0
  120. /ofscraper-3.13.dev5/ofscraper/commands/scraper/utils/daemon.py → /ofscraper-3.13.dev7/ofscraper/commands/scraper/actions/utils/buffer.py +0 -0
  121. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/commands/scraper/actions/utils/general.py +0 -0
  122. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/commands/scraper/actions/utils/log.py +0 -0
  123. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/commands/scraper/actions/utils/params.py +0 -0
  124. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/commands/scraper/actions/utils/paths/media.py +0 -0
  125. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/commands/scraper/actions/utils/paths/paths.py +0 -0
  126. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/commands/scraper/actions/utils/progress/convert.py +0 -0
  127. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/commands/scraper/actions/utils/progress/update.py +0 -0
  128. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/commands/scraper/actions/utils/retries.py +0 -0
  129. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/commands/scraper/actions/utils/send/chunk.py +0 -0
  130. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/commands/scraper/actions/utils/send/message.py +0 -0
  131. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/commands/scraper/actions/utils/threads.py +0 -0
  132. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/commands/scraper/actions/utils/workers.py +0 -0
  133. /ofscraper-3.13.dev5/ofscraper/const/values/req/like.py → /ofscraper-3.13.dev7/ofscraper/commands/scraper/utils/daemon.py +0 -0
  134. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/commands/scraper/utils/jobqueue.py +0 -0
  135. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/commands/scraper/utils/prepare.py +0 -0
  136. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/commands/scraper/utils/print.py +0 -0
  137. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/commands/utils/scrape_context.py +0 -0
  138. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/commands/utils/strings.py +0 -0
  139. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/const/constants.py +0 -0
  140. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/const/values/action/like.py +0 -0
  141. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/const/values/action/metadata.py +0 -0
  142. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/const/values/binary.py +0 -0
  143. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/const/values/config.py +0 -0
  144. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/const/values/date.py +0 -0
  145. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/const/values/download.py +0 -0
  146. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/const/values/dynamic.py +0 -0
  147. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/const/values/general.py +0 -0
  148. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/const/values/list.py +0 -0
  149. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/const/values/live.py +0 -0
  150. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/const/values/logger.py +0 -0
  151. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/const/values/path/bytes.py +0 -0
  152. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/const/values/path/files.py +0 -0
  153. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/const/values/path/general.py +0 -0
  154. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/const/values/path/path.py +0 -0
  155. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/const/values/prompts.py +0 -0
  156. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/const/values/req/anon.py +0 -0
  157. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/const/values/req/api.py +0 -0
  158. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/const/values/req/cdm.py +0 -0
  159. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/const/values/req/discord.py +0 -0
  160. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/const/values/req/git.py +0 -0
  161. /ofscraper-3.13.dev5/ofscraper/utils/args/accessors/actions.py → /ofscraper-3.13.dev7/ofscraper/const/values/req/like.py +0 -0
  162. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/const/values/req/mpd.py +0 -0
  163. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/const/values/rich.py +0 -0
  164. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/const/values/table.py +0 -0
  165. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/const/values/test/test_constants.py +0 -0
  166. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/const/values/time.py +0 -0
  167. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/const/values/url/other_url.py +0 -0
  168. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/const/values/url/url.py +0 -0
  169. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/data/api/archive.py +0 -0
  170. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/data/api/common/cache/read.py +0 -0
  171. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/data/api/common/cache/write.py +0 -0
  172. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/data/api/common/check.py +0 -0
  173. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/data/api/common/logs/logs.py +0 -0
  174. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/data/api/common/logs/strings.py +0 -0
  175. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/data/api/common/timeline.py +0 -0
  176. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/data/api/highlights.py +0 -0
  177. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/data/api/init.py +0 -0
  178. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/data/api/labels.py +0 -0
  179. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/data/api/me.py +0 -0
  180. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/data/api/messages.py +0 -0
  181. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/data/api/paid.py +0 -0
  182. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/data/api/pinned.py +0 -0
  183. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/data/api/profile.py +0 -0
  184. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/data/api/streams.py +0 -0
  185. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/data/api/subscriptions/common.py +0 -0
  186. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/data/api/subscriptions/individual.py +0 -0
  187. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/data/api/subscriptions/lists.py +0 -0
  188. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/data/api/subscriptions/subscriptions.py +0 -0
  189. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/data/api/timeline.py +0 -0
  190. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/data/models/manager.py +0 -0
  191. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/data/models/models.py +0 -0
  192. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/data/posts/post.py +0 -0
  193. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/db/__init__.py +0 -0
  194. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/db/backup.py +0 -0
  195. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/db/difference.py +0 -0
  196. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/db/merge.py +0 -0
  197. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/db/operations.py +0 -0
  198. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/db/operations_/empty.py +0 -0
  199. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/db/operations_/labels.py +0 -0
  200. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/db/operations_/media.py +0 -0
  201. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/db/operations_/messages.py +0 -0
  202. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/db/operations_/others.py +0 -0
  203. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/db/operations_/posts.py +0 -0
  204. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/db/operations_/profile.py +0 -0
  205. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/db/operations_/stories.py +0 -0
  206. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/db/operations_/wrapper.py +0 -0
  207. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/db/transition.py +0 -0
  208. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/db/utils/convert.py +0 -0
  209. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/filters/models/date.py +0 -0
  210. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/filters/models/flags.py +0 -0
  211. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/filters/models/other.py +0 -0
  212. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/filters/models/price.py +0 -0
  213. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/filters/models/sort.py +0 -0
  214. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/filters/models/subtype.py +0 -0
  215. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/filters/models/utils/logs.py +0 -0
  216. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/main/close/exit.py +0 -0
  217. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/main/close/final/final.py +0 -0
  218. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/main/close/final/final_script.py +0 -0
  219. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/main/close/final/final_user.py +0 -0
  220. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/main/manager.py +0 -0
  221. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/main/open/run.py +0 -0
  222. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/prompts/keybindings.py +0 -0
  223. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/prompts/promptConvert.py +0 -0
  224. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/prompts/prompt_groups/actions.py +0 -0
  225. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/prompts/prompt_groups/area.py +0 -0
  226. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/prompts/prompt_groups/auth.py +0 -0
  227. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/prompts/prompt_groups/binary.py +0 -0
  228. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/prompts/prompt_groups/menu.py +0 -0
  229. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/prompts/prompt_groups/merge.py +0 -0
  230. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/prompts/prompt_groups/model.py +0 -0
  231. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/prompts/prompt_groups/profile.py +0 -0
  232. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/prompts/prompt_strings.py +0 -0
  233. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/prompts/prompt_validators.py +0 -0
  234. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/prompts/prompts.py +0 -0
  235. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/prompts/utils/model_helpers.py +0 -0
  236. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/prompts/utils/prompt_helpers.py +0 -0
  237. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/__init__.py +0 -0
  238. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/actions.py +0 -0
  239. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/ads.py +0 -0
  240. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/args/accessors/areas.py +0 -0
  241. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/args/accessors/output.py +0 -0
  242. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/args/accessors/quality.py +0 -0
  243. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/args/accessors/read.py +0 -0
  244. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/args/accessors/time.py +0 -0
  245. {ofscraper-3.13.dev5/ofscraper/utils/args/callbacks → ofscraper-3.13.dev7/ofscraper/utils/args/callbacks/parse}/choice.py +0 -0
  246. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/args/globals.py +0 -0
  247. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/args/helpers/hide_args.py +0 -0
  248. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/args/main.py +0 -0
  249. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/args/mutators/before.py +0 -0
  250. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/args/mutators/change.py +0 -0
  251. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/args/mutators/user.py +0 -0
  252. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/args/mutators/write.py +0 -0
  253. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/args/parse/arguments/advanced_user_filter.py +0 -0
  254. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/args/parse/arguments/download.py +0 -0
  255. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/args/parse/arguments/file.py +0 -0
  256. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/args/parse/arguments/program.py +0 -0
  257. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/args/parse/arguments/shared.py +0 -0
  258. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/args/parse/arguments/user_list.py +0 -0
  259. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/args/parse/arguments/user_sort.py +0 -0
  260. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/args/parse/arguments/utils/date.py +0 -0
  261. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/args/parse/arguments/utils/retry.py +0 -0
  262. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/args/parse/commands/manual.py +0 -0
  263. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/args/parse/commands/message.py +0 -0
  264. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/args/parse/commands/metadata.py +0 -0
  265. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/args/parse/commands/paid.py +0 -0
  266. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/args/parse/commands/post.py +0 -0
  267. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/args/parse/commands/story.py +0 -0
  268. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/args/parse/group_bundles/advanced_common.py +0 -0
  269. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/args/parse/group_bundles/common.py +0 -0
  270. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/args/parse/group_bundles/manual.py +0 -0
  271. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/args/parse/group_bundles/message_check.py +0 -0
  272. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/args/parse/group_bundles/metadata.py +0 -0
  273. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/args/parse/group_bundles/paid_check.py +0 -0
  274. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/args/parse/group_bundles/post_check.py +0 -0
  275. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/args/parse/group_bundles/story_check.py +0 -0
  276. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/args/parse/group_bundles/utils/check.py +0 -0
  277. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/args/parse/groups/advanced_program.py +0 -0
  278. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/args/parse/groups/advanced_user_filter.py +0 -0
  279. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/args/parse/groups/automatic.py +0 -0
  280. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/args/parse/groups/check_content.py +0 -0
  281. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/args/parse/groups/download.py +0 -0
  282. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/args/parse/groups/file.py +0 -0
  283. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/args/parse/groups/logging.py +0 -0
  284. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/args/parse/groups/media_filter.py +0 -0
  285. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/args/parse/groups/program.py +0 -0
  286. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/args/parse/groups/user_list.py +0 -0
  287. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/args/parse/groups/user_select.py +0 -0
  288. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/args/parse/groups/user_sort.py +0 -0
  289. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/args/types/arrow.py +0 -0
  290. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/args/types/choice.py +0 -0
  291. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/auth/data.py +0 -0
  292. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/auth/file.py +0 -0
  293. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/auth/make.py +0 -0
  294. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/auth/request.py +0 -0
  295. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/auth/schema.py +0 -0
  296. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/auth/utils/context.py +0 -0
  297. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/auth/utils/dict.py +0 -0
  298. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/auth/utils/prompt.py +0 -0
  299. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/auth/utils/warning/check.py +0 -0
  300. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/auth/utils/warning/print.py +0 -0
  301. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/auth/utils/warning/warning.py +0 -0
  302. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/binaries.py +0 -0
  303. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/cache.py +0 -0
  304. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/checkers.py +0 -0
  305. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/config/config.py +0 -0
  306. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/config/custom.py +0 -0
  307. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/config/file.py +0 -0
  308. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/config/menu.py +0 -0
  309. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/config/schema.py +0 -0
  310. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/config/utils/context.py +0 -0
  311. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/config/utils/wrapper.py +0 -0
  312. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/console.py +0 -0
  313. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/constants.py +0 -0
  314. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/context/exit.py +0 -0
  315. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/context/run_async.py +0 -0
  316. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/context/stdout.py +0 -0
  317. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/dates.py +0 -0
  318. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/encoding.py +0 -0
  319. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/hash.py +0 -0
  320. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/live/classes/progress.py +0 -0
  321. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/live/classes/task.py +0 -0
  322. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/live/classes/transfercol.py +0 -0
  323. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/live/clear.py +0 -0
  324. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/live/empty.py +0 -0
  325. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/live/groups.py +0 -0
  326. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/live/live.py +0 -0
  327. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/live/panel.py +0 -0
  328. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/live/progress.py +0 -0
  329. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/live/screens.py +0 -0
  330. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/live/tasks.py +0 -0
  331. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/logs/classes/handlers/text.py +0 -0
  332. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/logs/globals.py +0 -0
  333. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/logs/handle.py +0 -0
  334. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/logs/logs.py +0 -0
  335. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/logs/utils/trace.py +0 -0
  336. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/manager.py +0 -0
  337. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/me.py +0 -0
  338. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/menu.py +0 -0
  339. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/merge.py +0 -0
  340. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/paths/check.py +0 -0
  341. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/paths/common.py +0 -0
  342. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/paths/db.py +0 -0
  343. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/paths/paths.py +0 -0
  344. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/profiles/data.py +0 -0
  345. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/profiles/manage.py +0 -0
  346. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/profiles/tools.py +0 -0
  347. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/sems.py +0 -0
  348. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/separate.py +0 -0
  349. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/string.py +0 -0
  350. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/system/free.py +0 -0
  351. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/system/network.py +0 -0
  352. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/system/priority.py +0 -0
  353. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/system/speed.py +0 -0
  354. {ofscraper-3.13.dev5 → ofscraper-3.13.dev7}/ofscraper/utils/system/system.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: ofscraper
3
- Version: 3.13.dev5
3
+ Version: 3.13.dev7
4
4
  Summary: automatically scrape onlyfans
5
5
  Author: datawhores
6
6
  Author-email: datawhores@riseup.net
@@ -27,6 +27,7 @@ Requires-Dist: faust-cchardet (>=2.1.19,<3.0.0)
27
27
  Requires-Dist: filelock (>=3.13.1,<4.0.0)
28
28
  Requires-Dist: httpx-aiohttp (>=0.1.2,<0.2.0)
29
29
  Requires-Dist: httpx-curl-cffi (>=0.1.3,<0.2.0)
30
+ Requires-Dist: httpx[http2] (>=0.28.1,<0.29.0)
30
31
  Requires-Dist: humanfriendly (>=10.0,<11.0)
31
32
  Requires-Dist: idna (==3.7)
32
33
  Requires-Dist: inquirerpy (>=0.3.4,<0.4.0)
@@ -70,6 +71,9 @@ As the API has changed older version are no longer viable
70
71
 
71
72
  https://github.com/datawhores/OF-Scraper/issues/442
72
73
 
74
+ # For Issues related to Downloading/ No Models Retrieved error
75
+ https://github.com/datawhores/OF-Scraper/issues/542
76
+
73
77
  # ReadMe
74
78
 
75
79
  ## Releases
@@ -11,6 +11,9 @@ As the API has changed older version are no longer viable
11
11
 
12
12
  https://github.com/datawhores/OF-Scraper/issues/442
13
13
 
14
+ # For Issues related to Downloading/ No Models Retrieved error
15
+ https://github.com/datawhores/OF-Scraper/issues/542
16
+
14
17
  # ReadMe
15
18
 
16
19
  ## Releases
@@ -14,24 +14,30 @@ from ofscraper.classes.sessionmanager.sessionmanager import (
14
14
  )
15
15
  from ofscraper.commands.scraper.actions.download.utils.leaky import LeakyBucket
16
16
  import ofscraper.utils.settings as settings
17
+ from ofscraper.commands.scraper.actions.download.utils.chunk import get_chunk_timeout
17
18
 
18
19
 
19
20
  class download_session(sessionManager.sessionManager):
20
21
  def __init__(
21
22
  self, sem_count=None, retries=None, wait_min=None, wait_max=None, log=None
22
23
  ) -> None:
23
- sem_count = sem_count or common_globals.sem
24
24
  retries = retries or get_download_req_retries()
25
25
  wait_min = wait_min or constants.getattr("OF_MIN_WAIT_API")
26
26
  wait_max = wait_max or constants.getattr("OF_MAX_WAIT_API")
27
+ read_timeout=get_chunk_timeout()
27
28
  log = log or common_globals.log
28
29
  self.leaky_bucket = LeakyBucket(settings.get_settings().download_limit, 1)
30
+
31
+
32
+
33
+
29
34
  super().__init__(
30
35
  sem_count=sem_count,
31
36
  retries=retries,
32
37
  wait_min=wait_min,
33
38
  wait_max=wait_max,
34
39
  log=log,
40
+ read_timeout=read_timeout
35
41
  )
36
42
 
37
43
  @contextlib.asynccontextmanager
@@ -56,19 +62,6 @@ class download_session(sessionManager.sessionManager):
56
62
  t.request = t.request
57
63
  return t
58
64
 
59
- async def _aio_funct(self, method, *args, **kwargs):
60
- # public function forces context manager use
61
- r = await self._session._request(method, *args, **kwargs)
62
- r.text_ = r.text
63
- r.json_ = r.json
64
- r.iter_chunked = self.chunk_with_limit(r.content.iter_chunked)
65
- r.iter_chunks = self.chunk_with_limit(r.content.iter_chunks)
66
- r.request = r.request_info
67
- r.status_code = r.status
68
- r.read_ = r.content.read
69
- r.eof = r.content.at_eof
70
- return r
71
-
72
65
  async def factoryasync(self, input):
73
66
  if callable(input):
74
67
  return input()
@@ -88,11 +81,9 @@ class download_session(sessionManager.sessionManager):
88
81
 
89
82
  class cdm_session(sessionManager.sessionManager):
90
83
  def __init__(self, sem_count=None) -> None:
91
- sem_count = sem_count or common_globals.sem
92
84
  super().__init__(sem_count=sem_count)
93
85
 
94
86
 
95
87
  class cdm_session_manual(ofsessionmanager.OFSessionManager):
96
88
  def __init__(self, sem_count=None) -> None:
97
- sem_count = sem_count or common_globals.sem
98
89
  super().__init__(sem_count=sem_count)
@@ -50,8 +50,15 @@ def check_400(exception):
50
50
  time.sleep(8)
51
51
 
52
52
 
53
+
53
54
  def is_provided_exception_number(exception, *numbers):
54
55
  return (
56
+ isinstance(exception, aiohttp.ClientResponseError)
57
+ and (
58
+ getattr(exception, "status_code", None)
59
+ or getattr(exception, "status", None) in numbers
60
+ )
61
+ ) or (
55
62
  isinstance(exception, httpx.HTTPStatusError)
56
63
  and (
57
64
  (
@@ -62,7 +69,6 @@ def is_provided_exception_number(exception, *numbers):
62
69
  )
63
70
  )
64
71
 
65
-
66
72
  class SessionSleep:
67
73
  def __init__(self, sleep=None, difmin=None):
68
74
  self._sleep = None
@@ -179,7 +185,6 @@ class sessionManager:
179
185
  ):
180
186
  connect_timeout = connect_timeout or constants.getattr("CONNECT_TIMEOUT")
181
187
  total_timeout = total_timeout or constants.getattr("TOTAL_TIMEOUT")
182
- read_timeout = read_timeout or constants.getattr("CHUNK_READ_TIMEOUT")
183
188
  pool_timeout = pool_timeout or constants.getattr("POOL_CONNECT_TIMEOUT")
184
189
  limit = limit or constants.getattr("MAX_CONNECTIONS")
185
190
  keep_alive = keep_alive or constants.getattr("KEEP_ALIVE")
@@ -188,7 +193,7 @@ class sessionManager:
188
193
  proxy_auth = proxy_auth or constants.getattr("PROXY_AUTH")
189
194
  self._connect_timeout = connect_timeout
190
195
  self._total_timeout = total_timeout
191
- self._read_timeout = read_timeout
196
+ self._read_timeout=read_timeout
192
197
  self._pool_connect_timeout = pool_timeout
193
198
  self._connect_limit = limit
194
199
  self._keep_alive = keep_alive
@@ -217,7 +222,7 @@ class sessionManager:
217
222
  return
218
223
  if async_:
219
224
  self._session = httpx.AsyncClient(
220
- # http2=True,
225
+ http2=True,
221
226
  proxy=self._proxy,
222
227
  limits=httpx.Limits(
223
228
  max_keepalive_connections=self._keep_alive,
@@ -232,7 +237,7 @@ class sessionManager:
232
237
  )
233
238
  else:
234
239
  self._session = httpx.Client(
235
- # http2=True,
240
+ http2=True,
236
241
  proxy=self._proxy,
237
242
  limits=httpx.Limits(
238
243
  max_keepalive_connections=self._keep_alive,
@@ -347,7 +352,7 @@ class sessionManager:
347
352
  total_timeout or self._total_timeout,
348
353
  connect=connect_timeout or self._connect_timeout,
349
354
  pool=pool_connect_timeout or self._pool_connect_timeout,
350
- read=read_timeout or self._read_timeout,
355
+ read=read_timeout or self._read_timeout
351
356
  ),
352
357
  url=url,
353
358
  follow_redirects=redirects,
@@ -429,9 +434,9 @@ class sessionManager:
429
434
  ),
430
435
  reraise=True,
431
436
  ):
437
+ await sem.acquire()
432
438
  with _:
433
439
  r = None
434
- await sem.acquire()
435
440
  try:
436
441
  await sleeper.async_do_sleep()
437
442
  if (
@@ -456,7 +461,8 @@ class sessionManager:
456
461
  total_timeout or self._total_timeout,
457
462
  connect=connect_timeout or self._connect_timeout,
458
463
  pool=pool_connect_timeout or self._pool_connect_timeout,
459
- read=read_timeout or self._read_timeout,
464
+ read=read_timeout or self._read_timeout
465
+
460
466
  ),
461
467
  follow_redirects=redirects,
462
468
  url=url,
@@ -487,6 +493,118 @@ class sessionManager:
487
493
  yield r
488
494
  sem.release()
489
495
 
496
+ @contextlib.asynccontextmanager
497
+ async def requests_async_stream(
498
+ self,
499
+ url=None,
500
+ wait_min=None,
501
+ wait_max=None,
502
+ wait_min_exponential=None,
503
+ wait_max_exponential=None,
504
+ retries=None,
505
+ method="get",
506
+ headers=None,
507
+ cookies=None,
508
+ json=None,
509
+ params=None,
510
+ redirects=True,
511
+ data=None,
512
+ log=None,
513
+ sem=None,
514
+ total_timeout=None,
515
+ connect_timeout=None,
516
+ pool_connect_timeout=None,
517
+ read_timeout=None,
518
+ sleeper=None,
519
+ exceptions=[],
520
+ actions=[],
521
+ *args,
522
+ **kwargs,
523
+ ):
524
+ wait_min = wait_min or self._wait_min
525
+ wait_max = wait_max or self._wait_max
526
+ wait_min_exponential = wait_min_exponential or self._wait_min_exponential
527
+ wait_max_exponential = wait_max_exponential or self._wait_max_exponential
528
+ log = log or self._log
529
+ retries = retries or self._retries
530
+ sem = sem or self._sem
531
+ sleeper = sleeper or self._sleeper
532
+ exceptions = exceptions or []
533
+ actions = actions or []
534
+ async for _ in CustomTenacity(
535
+ wait_exponential=tenacity.wait.wait_exponential(
536
+ multiplier=2, min=wait_min_exponential, max=wait_max_exponential
537
+ ),
538
+ retry=retry_if_not_exception_type((KeyboardInterrupt)),
539
+ wait_random=tenacity.wait_random(min=wait_min, max=wait_max),
540
+ stop=tenacity.stop.stop_after_attempt(retries),
541
+ before=lambda x: (
542
+ log.debug(f"[bold]attempt: {x.attempt_number}[bold] for {url}")
543
+ if x.attempt_number > 1
544
+ else None
545
+ ),
546
+ reraise=True,
547
+ ):
548
+ with _:
549
+ r = None
550
+ try:
551
+ await sem.acquire()
552
+ await sleeper.async_do_sleep()
553
+ if (
554
+ SIGN in actions
555
+ or FORCED_NEW in actions
556
+ or HEADERS in actions
557
+ ):
558
+ headers = (
559
+ self._create_headers(
560
+ headers, url, SIGN in actions, FORCED_NEW in actions
561
+ )
562
+
563
+ )
564
+
565
+
566
+ cookies = self._create_cookies() if COOKIES in actions else None
567
+ json = json
568
+ params = params
569
+ r = await self._httpx_funct_async_stream(
570
+ method,
571
+ timeout=httpx.Timeout(
572
+ total_timeout or self._total_timeout,
573
+ connect=connect_timeout or self._connect_timeout,
574
+ pool=pool_connect_timeout or self._pool_connect_timeout,
575
+ read=read_timeout or self._read_timeout
576
+ ),
577
+ follow_redirects=redirects,
578
+ url=url,
579
+ cookies=cookies,
580
+ headers=headers,
581
+ json=json,
582
+ params=params,
583
+ data=data,
584
+ )
585
+ if r.status_code == 404:
586
+ pass
587
+ elif not r.ok:
588
+ log.debug(f"[bold]failed: [bold] {r.url}")
589
+ log.debug(f"[bold]status: [bold] {r.status}")
590
+ log.debug(f"response headers {dict(r.headers)}")
591
+ log.debug(f"requests headers mode{dict(r.request.headers)}")
592
+ r.raise_for_status()
593
+ yield r
594
+ except Exception as E:
595
+ # only call from sync req like "me"
596
+ # check_400(E)
597
+ log.traceback_(E)
598
+ log.traceback_(traceback.format_exc())
599
+ if TOO_MANY in exceptions:
600
+ await async_is_rate_limited(E, sleeper)
601
+ raise E
602
+ finally:
603
+ sem.release()
604
+ await r.aclose()
605
+
606
+
607
+
490
608
  @property
491
609
  def sleep(self):
492
610
  return self._sleeper._sleep
@@ -506,6 +624,27 @@ class sessionManager:
506
624
  t.read_ = t.aread
507
625
  t.request = t.request
508
626
  return t
627
+
628
+ async def _httpx_funct_async_stream(self, *args, **kwargs):
629
+ auth=kwargs.pop("auth",None)
630
+ follow_redirects=kwargs.pop("follow_redirects",None)
631
+ req=self._session.build_request(*args, **kwargs)
632
+ t = await self._session.send(
633
+ request=req,
634
+ follow_redirects=follow_redirects,
635
+ stream=True,
636
+ auth=auth,
637
+ )
638
+ t.ok = not t.is_error
639
+ t.json_ = lambda: self.factoryasync(t.json)
640
+ t.text_ = lambda: self.factoryasync(t.text)
641
+ t.status = t.status_code
642
+ t.iter_chunked = t.aiter_bytes
643
+ t.iter_chunks = t.aiter_bytes
644
+ t.read_ = t.aread
645
+ t.request = t.request
646
+ return t
647
+
509
648
 
510
649
  def _httpx_funct(self, method, **kwargs):
511
650
  t = self._session.request(method.upper(), **kwargs)
@@ -48,7 +48,6 @@ import ofscraper.utils.context.exit as exit
48
48
  from ofscraper.classes.sessionmanager.download import download_session
49
49
  from ofscraper.commands.scraper.actions.utils.log import final_log, final_log_text
50
50
  from ofscraper.commands.scraper.actions.utils.paths.paths import setDirectoriesDate
51
- from ofscraper.commands.scraper.actions.utils.buffer import download_log_clear_helper
52
51
 
53
52
  from ofscraper.commands.scraper.actions.utils.workers import get_max_workers
54
53
  from ofscraper.utils.context.run_async import run
@@ -192,7 +191,7 @@ class metadataCommandManager(commmandManager):
192
191
  and avatar
193
192
  and settings.get_settings().userfirst
194
193
  ):
195
- logging.getLogger("shared_other").warning(
194
+ logging.getLogger("shared").warning(
196
195
  avatar_str.format(avatar=avatar)
197
196
  )
198
197
  data.extend(
@@ -294,7 +293,6 @@ def metadata():
294
293
 
295
294
  @run
296
295
  async def process_dicts(username, model_id, medialist):
297
- download_log_clear_helper()
298
296
  task1 = None
299
297
  with progress_utils.setup_metadata_progress_live():
300
298
  common_globals.mainProcessVariableInit()
@@ -337,7 +335,6 @@ async def process_dicts(username, model_id, medialist):
337
335
  common_globals.thread.shutdown()
338
336
 
339
337
  setDirectoriesDate()
340
- download_log_clear_helper()
341
338
  progress_updater.remove_metadata_task(task1)
342
339
  final_log(username)
343
340
  return final_log_text(username)
@@ -22,7 +22,6 @@ from ofscraper.classes.sessionmanager.download import download_session
22
22
  from ofscraper.commands.scraper.actions.utils.log import final_log, final_log_text
23
23
 
24
24
  from ofscraper.commands.scraper.actions.utils.paths.paths import setDirectoriesDate
25
- from ofscraper.commands.scraper.actions.utils.buffer import download_log_clear_helper
26
25
 
27
26
  from ofscraper.commands.scraper.actions.utils.workers import get_max_workers
28
27
  from ofscraper.utils.context.run_async import run
@@ -45,7 +44,7 @@ async def downloader(username=None, model_id=None, posts=None, media=None, **kwa
45
44
  )
46
45
 
47
46
  progress_updater.update_activity_task(description=download_str + path_str)
48
- logging.getLogger("shared_other").warning(
47
+ logging.getLogger("shared").warning(
49
48
  download_activity_str.format(username=username)
50
49
  )
51
50
  progress_updater.update_activity_task(description="")
@@ -71,7 +70,6 @@ async def download_model_deleted_process(
71
70
  @run
72
71
  async def process_dicts(username, model_id, medialist, posts):
73
72
  log_text_array = []
74
- download_log_clear_helper()
75
73
  log_text_array.append(await textDownloader(posts, username=username))
76
74
  logging.getLogger("shared").info("Downloading in single thread mode")
77
75
  common_globals.mainProcessVariableInit()
@@ -103,7 +101,6 @@ async def process_dicts(username, model_id, medialist, posts):
103
101
  try:
104
102
 
105
103
  aws = []
106
-
107
104
  async with download_session() as c:
108
105
  for ele in medialist:
109
106
  aws.append((c, ele, model_id, username))
@@ -139,7 +136,6 @@ async def process_dicts(username, model_id, medialist, posts):
139
136
  common_globals.thread.shutdown()
140
137
 
141
138
  setDirectoriesDate()
142
- download_log_clear_helper()
143
139
  final_log(username, log=logging.getLogger("shared"))
144
140
  progress_updater.remove_download_task(task1)
145
141
  log_text_array.append(final_log_text(username))
@@ -36,7 +36,7 @@ from ofscraper.commands.scraper.actions.utils.log import (
36
36
  temp_file_logger,
37
37
  )
38
38
  from ofscraper.commands.scraper.actions.download.utils.chunk import (
39
- get_chunk_size,
39
+ get_chunk_size
40
40
  )
41
41
  from ofscraper.commands.scraper.actions.utils.retries import get_download_retries
42
42
  from ofscraper.commands.scraper.actions.utils.send.chunk import send_chunk_msg
@@ -65,6 +65,7 @@ from ofscraper.commands.scraper.actions.utils.send.message import send_msg
65
65
  class AltDownloadManager(DownloadManager):
66
66
 
67
67
  async def alt_download(self, c, ele, username, model_id):
68
+ await common_globals.sem.acquire()
68
69
  common_globals.log.debug(
69
70
  f"{get_medialog(ele)} Downloading with protected media downloader"
70
71
  )
@@ -184,8 +185,9 @@ class AltDownloadManager(DownloadManager):
184
185
  common_globals.log.debug(
185
186
  f"{get_medialog(ele)} [attempt {self._alt_attempt_get(item).get()}/{get_download_retries()}] Downloading media with url {ele.mpd}"
186
187
  )
187
- async with c.requests_async(
188
+ async with c.requests_async_stream(
188
189
  url=url,
190
+ stream=True,
189
191
  headers=headers,
190
192
  params=params,
191
193
  # action=[FORCED_NEW,SIGN] if constants.getattr("ALT_FORCE_KEY") else None
@@ -222,17 +224,20 @@ class AltDownloadManager(DownloadManager):
222
224
  except Exception as E:
223
225
  await self._total_change_helper(0)
224
226
  raise E
227
+ finally:
228
+ common_globals.sem.release()
225
229
 
226
230
  async def _download_fileobject_writer(self, total, l, ele, placeholderObj, item):
227
231
  common_globals.log.debug(
228
232
  f"{get_medialog(ele)} [attempt {self._alt_attempt_get(item).get()}/{get_download_retries()}] writing media to disk"
229
233
  )
230
- if total > constants.getattr("MAX_READ_SIZE"):
231
- await self._download_fileobject_writer_streamer(
232
- ele, total, l, placeholderObj
233
- )
234
- else:
235
- await self._download_fileobject_writer_reader(ele, total, l, placeholderObj)
234
+ await self._download_fileobject_writer_streamer(
235
+ ele, total, l, placeholderObj
236
+ )
237
+ # if total > constants.getattr("MAX_READ_SIZE"):
238
+
239
+ # else:
240
+ # await self._download_fileobject_writer_reader(ele, total, l, placeholderObj)
236
241
  common_globals.log.debug(
237
242
  f"{get_medialog(ele)} [attempt {self._alt_attempt_get(item).get()}/{get_download_retries()}] finished writing media to disk"
238
243
  )
@@ -258,30 +263,60 @@ class AltDownloadManager(DownloadManager):
258
263
  except Exception as E:
259
264
  raise E
260
265
 
261
- async def _download_fileobject_writer_streamer(
262
- self, ele, total, res, placeholderObj
263
- ):
266
+ async def _download_fileobject_writer_streamer(self, ele, total, res, placeholderObj):
267
+ common_globals.log.info(f"Starting download for {ele}. Tracking memory usage...")
268
+ initial_memory = self.process.memory_info().rss / (1024 * 1024) # RSS in MB
269
+ common_globals.log.info(f"Initial memory usage for {ele}: {initial_memory:.2f} MB")
264
270
 
265
271
  task1 = await self._add_download_job_task(ele, total, placeholderObj)
266
- fileobject = await aiofiles.open(placeholderObj.tempfilepath, "ab").__aenter__()
267
- chunk_size = get_chunk_size()
272
+ fileobject = None # Initialize to None for finally block
268
273
  try:
269
- async for chunk in res.iter_chunked(chunk_size):
270
- await fileobject.write(chunk)
271
- send_chunk_msg(ele, total, placeholderObj)
274
+ # Use asyncio.timeout as a context manager for the entire download process
275
+ async with asyncio.timeout(None):
276
+ fileobject = await aiofiles.open(
277
+ placeholderObj.tempfilepath, "ab"
278
+ ).__aenter__()
279
+ chunk_count = 0
280
+ chunk_iter = res.iter_chunked(get_chunk_size())
281
+
282
+ while True:
283
+ try:
284
+ chunk = await chunk_iter.__anext__()
285
+ await fileobject.write(chunk)
286
+ send_chunk_msg(ele, total, placeholderObj)
287
+ chunk_count += 1
288
+ # Log memory usage periodically, e.g., every 10 chunks
289
+ if chunk_count % 10 == 0:
290
+ current_memory = self.process.memory_info().rss / (1024 * 1024)
291
+ common_globals.log.debug(f"Memory usage for {ele} after {chunk_count} chunks: {current_memory:.2f} MB")
292
+ except StopAsyncIteration:
293
+ break # Exit loop when no more chunks
294
+ except asyncio.TimeoutError:
295
+ # This catches the timeout for the entire async with block
296
+ common_globals.log.warning(f"{common_logs.get_medialog(ele)}⚠️ No chunk received in {get_chunk_timeout()} seconds or download timed out!")
297
+ return # Exit the function on timeout
272
298
  except Exception as E:
273
- raise E
299
+ # Catch other potential exceptions during file operations or chunk iteration
300
+ common_globals.log.error(f"An error occurred during download for {ele}: {E}")
301
+ raise E # Re-raise the exception after logging
274
302
  finally:
275
- # Close file if needed
276
- try:
277
- await fileobject.close()
278
- except Exception as E:
279
- raise E
303
+ # Log final memory usage
304
+ final_memory = self.process.memory_info().rss / (1024 * 1024)
305
+ common_globals.log.info(f"Final memory usage for {ele}: {final_memory:.2f} MB")
306
+ common_globals.log.info(f"Memory change for {ele}: {(final_memory - initial_memory):.2f} MB")
280
307
 
308
+ # Close file if needed
309
+ if fileobject: # Ensure fileobject was successfully opened
310
+ try:
311
+ await fileobject.close()
312
+ except Exception as E:
313
+ common_globals.log.error(f"Error closing file for {ele}: {E}")
314
+ raise E # Re-raise if closing fails
281
315
  try:
282
316
  await self._remove_download_job_task(task1, ele)
283
317
  except Exception as E:
284
- raise E
318
+ common_globals.log.error(f"Error removing download job task for {ele}: {E}")
319
+ raise E # Re-raise if task removal fails
285
320
 
286
321
  async def _handle_result_alt(
287
322
  self, sharedPlaceholderObj, ele, audio, video, username, model_id
@@ -11,9 +11,10 @@ r"""
11
11
 
12
12
  """
13
13
 
14
- from functools import partial
15
14
  import pathlib
15
+ import os
16
16
  from humanfriendly import format_size
17
+ import psutil
17
18
 
18
19
  import ofscraper.utils.constants as constants
19
20
  import ofscraper.utils.live.updater as progress_updater
@@ -30,6 +31,7 @@ from ofscraper.db.operations_.media import download_media_update
30
31
  class DownloadManager:
31
32
  def __init__(self):
32
33
  self.total = None
34
+ self.process= psutil.Process(os.getpid())
33
35
 
34
36
  async def _add_download_job_task(
35
37
  self, ele, total=None, placeholderObj=None, tempholderObj=None