ofscraper 3.9.0.dev7__tar.gz → 3.9.0.dev10__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 (185) hide show
  1. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/PKG-INFO +9 -3
  2. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/README.md +7 -2
  3. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/actions/like.py +100 -30
  4. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/actions/process.py +21 -29
  5. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/actions/scraper.py +75 -115
  6. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/api/archive.py +175 -127
  7. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/api/highlights.py +163 -211
  8. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/api/labels.py +159 -58
  9. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/api/messages.py +204 -362
  10. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/api/paid.py +78 -75
  11. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/api/pinned.py +87 -28
  12. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/api/profile.py +1 -0
  13. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/api/subscriptions/individual.py +1 -1
  14. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/api/subscriptions/lists.py +9 -6
  15. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/api/subscriptions/subscriptions.py +2 -2
  16. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/api/timeline.py +257 -345
  17. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/classes/placeholder.py +11 -24
  18. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/classes/posts.py +31 -1
  19. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/classes/table.py +9 -9
  20. ofscraper-3.9.0.dev10/ofscraper/commands/check.py +587 -0
  21. ofscraper-3.9.0.dev10/ofscraper/commands/manual.py +241 -0
  22. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/const/config.py +1 -1
  23. ofscraper-3.9.0.dev10/ofscraper/const/date.py +2 -0
  24. ofscraper-3.9.0.dev10/ofscraper/db/operations.py +241 -0
  25. ofscraper-3.9.0.dev10/ofscraper/db/operations_/helpers.py +7 -0
  26. ofscraper-3.9.0.dev10/ofscraper/db/operations_/labels.py +230 -0
  27. ofscraper-3.9.0.dev10/ofscraper/db/operations_/media.py +480 -0
  28. ofscraper-3.9.0.dev10/ofscraper/db/operations_/messages.py +227 -0
  29. ofscraper-3.9.0.dev10/ofscraper/db/operations_/others.py +250 -0
  30. ofscraper-3.9.0.dev10/ofscraper/db/operations_/posts.py +269 -0
  31. ofscraper-3.9.0.dev10/ofscraper/db/operations_/profile.py +189 -0
  32. ofscraper-3.9.0.dev10/ofscraper/db/operations_/stories.py +206 -0
  33. ofscraper-3.9.0.dev10/ofscraper/db/operations_/wrapper.py +127 -0
  34. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/download/alt_download.py +13 -10
  35. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/download/alt_downloadbatch.py +9 -8
  36. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/download/common/common.py +2 -3
  37. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/download/common/globals.py +0 -6
  38. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/download/common/log.py +9 -3
  39. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/download/common/metadata.py +22 -16
  40. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/download/download.py +19 -5
  41. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/download/downloadnormal.py +1 -0
  42. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/download/main_download.py +12 -11
  43. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/download/main_downloadbatch.py +12 -10
  44. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/filters/media/helpers.py +1 -1
  45. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/filters/media/main.py +3 -3
  46. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/models/retriver.py +17 -17
  47. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/models/selector.py +12 -9
  48. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/prompts/prompt_groups/area.py +7 -4
  49. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/prompts/prompt_groups/auth.py +1 -0
  50. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/prompts/prompt_groups/binary.py +1 -0
  51. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/prompts/prompt_groups/config.py +6 -3
  52. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/prompts/prompt_groups/menu.py +1 -0
  53. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/prompts/prompt_groups/model.py +44 -35
  54. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/prompts/prompt_groups/profile.py +1 -0
  55. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/runner/load.py +2 -0
  56. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/utils/actions.py +3 -2
  57. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/utils/args/areas.py +5 -5
  58. ofscraper-3.9.0.dev10/ofscraper/utils/args/groups/common_args.py +209 -0
  59. ofscraper-3.9.0.dev10/ofscraper/utils/args/groups/main_args.py +639 -0
  60. ofscraper-3.9.0.dev10/ofscraper/utils/args/groups/manual_args.py +45 -0
  61. ofscraper-3.9.0.dev10/ofscraper/utils/args/groups/message_args.py +51 -0
  62. ofscraper-3.9.0.dev10/ofscraper/utils/args/groups/paid_args.py +53 -0
  63. ofscraper-3.9.0.dev10/ofscraper/utils/args/groups/post_args.py +62 -0
  64. ofscraper-3.9.0.dev10/ofscraper/utils/args/groups/story_args.py +53 -0
  65. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/utils/args/helpers.py +30 -22
  66. ofscraper-3.9.0.dev10/ofscraper/utils/args/parse.py +51 -0
  67. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/utils/args/quality.py +1 -1
  68. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/utils/args/read.py +3 -3
  69. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/utils/args/user.py +7 -0
  70. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/utils/args/write.py +1 -1
  71. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/utils/auth/helpers.py +1 -0
  72. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/utils/config/config.py +1 -0
  73. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/utils/config/schema.py +3 -3
  74. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/utils/config/wrapper.py +1 -3
  75. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/utils/manager.py +7 -4
  76. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/utils/menu.py +1 -1
  77. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/utils/progress.py +142 -1
  78. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/utils/settings.py +6 -0
  79. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/utils/text.py +1 -2
  80. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/pyproject.toml +2 -1
  81. ofscraper-3.9.0.dev7/ofscraper/commands/check.py +0 -532
  82. ofscraper-3.9.0.dev7/ofscraper/commands/manual.py +0 -209
  83. ofscraper-3.9.0.dev7/ofscraper/const/date.py +0 -1
  84. ofscraper-3.9.0.dev7/ofscraper/db/operations.py +0 -1297
  85. ofscraper-3.9.0.dev7/ofscraper/db/queries.py +0 -441
  86. ofscraper-3.9.0.dev7/ofscraper/utils/args/parse.py +0 -990
  87. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/LICENSE +0 -0
  88. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/__main__.py +0 -0
  89. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/__version__.py +0 -0
  90. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/__version__.pye +0 -0
  91. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/actions/__init__.py +0 -0
  92. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/api/init.py +0 -0
  93. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/api/me.py +0 -0
  94. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/api/subscriptions/helpers.py +0 -0
  95. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/classes/base.py +0 -0
  96. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/classes/labels.py +0 -0
  97. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/classes/media.py +0 -0
  98. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/classes/models.py +0 -0
  99. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/classes/multiprocessprogress.py +0 -0
  100. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/classes/semaphoreDelayed.py +0 -0
  101. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/classes/sessionbuilder.py +0 -0
  102. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/commands/picker.py +0 -0
  103. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/commands/scraper.py +0 -0
  104. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/const/binary.py +0 -0
  105. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/const/constants.py +0 -0
  106. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/const/download.py +0 -0
  107. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/const/files.py +0 -0
  108. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/const/general.py +0 -0
  109. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/const/logger.py +0 -0
  110. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/const/other_url.py +0 -0
  111. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/const/prompts.py +0 -0
  112. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/const/req.py +0 -0
  113. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/const/test_constants.py +0 -0
  114. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/const/time.py +0 -0
  115. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/const/url.py +0 -0
  116. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/db/__init__.py +0 -0
  117. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/download/common/keyhelpers.py +0 -0
  118. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/download/common/message.py +0 -0
  119. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/download/common/paths.py +0 -0
  120. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/download/common/progress.py +0 -0
  121. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/download/common/sem.py +0 -0
  122. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/download/common/text.py +0 -0
  123. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/download/downloadbatch.py +0 -0
  124. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/filters/models/date.py +0 -0
  125. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/filters/models/flags.py +0 -0
  126. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/filters/models/other.py +0 -0
  127. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/filters/models/price.py +0 -0
  128. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/filters/models/sort.py +0 -0
  129. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/filters/models/subtype.py +0 -0
  130. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/prompts/helpers/model_helpers.py +0 -0
  131. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/prompts/helpers/prompt_helpers.py +0 -0
  132. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/prompts/keybindings.py +0 -0
  133. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/prompts/promptConvert.py +0 -0
  134. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/prompts/prompt_groups/actions.py +0 -0
  135. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/prompts/prompt_strings.py +0 -0
  136. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/prompts/prompt_validators.py +0 -0
  137. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/prompts/prompts.py +0 -0
  138. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/runner/exit.py +0 -0
  139. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/runner/run.py +0 -0
  140. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/utils/__init__.py +0 -0
  141. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/utils/args/globals.py +0 -0
  142. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/utils/auth/context.py +0 -0
  143. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/utils/auth/data.py +0 -0
  144. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/utils/auth/file.py +0 -0
  145. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/utils/auth/make.py +0 -0
  146. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/utils/auth/request.py +0 -0
  147. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/utils/auth/schema.py +0 -0
  148. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/utils/binaries.py +0 -0
  149. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/utils/cache.py +0 -0
  150. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/utils/checkers.py +0 -0
  151. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/utils/config/context.py +0 -0
  152. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/utils/config/custom.py +0 -0
  153. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/utils/config/data.py +0 -0
  154. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/utils/config/file.py +0 -0
  155. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/utils/config/menu.py +0 -0
  156. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/utils/console.py +0 -0
  157. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/utils/constants.py +0 -0
  158. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/utils/context/exit.py +0 -0
  159. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/utils/context/run_async.py +0 -0
  160. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/utils/context/stdout.py +0 -0
  161. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/utils/dates.py +0 -0
  162. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/utils/encoding.py +0 -0
  163. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/utils/hash.py +0 -0
  164. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/utils/logs/classes.py +0 -0
  165. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/utils/logs/close.py +0 -0
  166. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/utils/logs/globals.py +0 -0
  167. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/utils/logs/helpers.py +0 -0
  168. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/utils/logs/logger.py +0 -0
  169. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/utils/logs/logs.py +0 -0
  170. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/utils/logs/other.py +0 -0
  171. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/utils/logs/stdout.py +0 -0
  172. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/utils/me.py +0 -0
  173. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/utils/paths/check.py +0 -0
  174. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/utils/paths/common.py +0 -0
  175. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/utils/paths/manage.py +0 -0
  176. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/utils/paths/paths.py +0 -0
  177. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/utils/profiles/data.py +0 -0
  178. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/utils/profiles/manage.py +0 -0
  179. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/utils/profiles/tools.py +0 -0
  180. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/utils/run.py +0 -0
  181. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/utils/sems.py +0 -0
  182. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/utils/separate.py +0 -0
  183. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/utils/system/free.py +0 -0
  184. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/utils/system/network.py +0 -0
  185. {ofscraper-3.9.0.dev7 → ofscraper-3.9.0.dev10}/ofscraper/utils/system/system.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ofscraper
3
- Version: 3.9.0.dev7
3
+ Version: 3.9.0.dev10
4
4
  Summary: automatically scrape onlyfans
5
5
  Author: datawhores
6
6
  Author-email: datawhores@riseup.net
@@ -17,6 +17,7 @@ Requires-Dist: arrow (>=1.3.0,<2.0.0)
17
17
  Requires-Dist: browser-cookie3 (==0.19.1)
18
18
  Requires-Dist: bs4 (>=0.0.2,<0.0.3)
19
19
  Requires-Dist: certifi (>=2024.2.2,<2025.0.0)
20
+ Requires-Dist: cloup (>=3.0.5,<4.0.0)
20
21
  Requires-Dist: dill (>=0.3.8,<0.4.0)
21
22
  Requires-Dist: diskcache (>=5.6.3,<6.0.0)
22
23
  Requires-Dist: dunamai (>=1.19.2,<2.0.0)
@@ -68,8 +69,8 @@ Docker and binary releases also availible
68
69
  ## Dev
69
70
 
70
71
  <div style="display: inline-block">
71
- <a href="https://pypi.org/project/ofscraper/3.7.0.dev2/">
72
- <img src="https://img.shields.io/badge/Pre--Release-v3.70.dev-dark_green.svg" alt="drawing" style="height:75px"/>
72
+ <a href="https://pypi.org/project/ofscraper/3.9.0.dev5/">
73
+ <img src="https://img.shields.io/badge/Pre--Release-v3.90.dev-dark_green.svg" alt="drawing" style="height:75px"/>
73
74
  </a>
74
75
  </div>
75
76
 
@@ -116,6 +117,11 @@ For detailed instructions on:
116
117
 
117
118
  Open a issue in this repo, or you can mention your issue in the [Discord](#discord)
118
119
 
120
+ ## Private Reports
121
+
122
+ A ticket can be created in the ticket channel
123
+ only you and admins have access to ticket discussions
124
+
119
125
  # Feature Requests
120
126
 
121
127
  [ClearFlask Feedback](https://ofscraper.clearflask.com/feedback) or [Discord](#discord)
@@ -17,8 +17,8 @@ Docker and binary releases also availible
17
17
  ## Dev
18
18
 
19
19
  <div style="display: inline-block">
20
- <a href="https://pypi.org/project/ofscraper/3.7.0.dev2/">
21
- <img src="https://img.shields.io/badge/Pre--Release-v3.70.dev-dark_green.svg" alt="drawing" style="height:75px"/>
20
+ <a href="https://pypi.org/project/ofscraper/3.9.0.dev5/">
21
+ <img src="https://img.shields.io/badge/Pre--Release-v3.90.dev-dark_green.svg" alt="drawing" style="height:75px"/>
22
22
  </a>
23
23
  </div>
24
24
 
@@ -65,6 +65,11 @@ For detailed instructions on:
65
65
 
66
66
  Open a issue in this repo, or you can mention your issue in the [Discord](#discord)
67
67
 
68
+ ## Private Reports
69
+
70
+ A ticket can be created in the ticket channel
71
+ only you and admins have access to ticket discussions
72
+
68
73
  # Feature Requests
69
74
 
70
75
  [ClearFlask Feedback](https://ofscraper.clearflask.com/feedback) or [Discord](#discord)
@@ -34,45 +34,108 @@ from tenacity import (
34
34
  import ofscraper.api.archive as archive
35
35
  import ofscraper.api.labels as labels_api
36
36
  import ofscraper.api.pinned as pinned
37
+ import ofscraper.api.timeline as timeline
37
38
  import ofscraper.classes.labels as labels
39
+ import ofscraper.classes.posts as posts_
38
40
  import ofscraper.classes.sessionbuilder as sessionbuilder
41
+ import ofscraper.utils.args.areas as areas
42
+ import ofscraper.utils.args.read as read_args
39
43
  import ofscraper.utils.console as console
40
44
  import ofscraper.utils.constants as constants
45
+ import ofscraper.utils.progress as progress_utils
46
+ import ofscraper.utils.system.system as system
41
47
  from ofscraper.classes.semaphoreDelayed import semaphoreDelayed
42
48
  from ofscraper.utils.context.run_async import run
43
49
 
44
- from ..api import timeline
45
-
46
50
  sem = semaphoreDelayed(1)
47
51
  log = logging.getLogger("shared")
48
- import ofscraper.utils.args.read as read_args
49
52
 
50
53
 
51
- def get_posts(model_id, username):
52
- args = read_args.retriveArgs()
53
- pinned_posts = []
54
- timeline_posts = []
55
- archived_posts = []
56
- labelled_posts = []
57
- options = args.like_area
58
- if "Pinned" in options or "All" in options:
59
- pinned_posts = pinned.get_pinned_post(model_id)
60
- if "Timeline" in options or "All" in options:
61
- timeline_posts = timeline.get_timeline_media_progress(
62
- model_id, username, forced_after=0
63
- )
64
- if "Archived" in options or "All" in options:
65
- archived_posts = archive.get_archived_media(model_id, username, forced_after=0)
66
- if "Labels" in options or "All" in options:
67
- labels_ = labels_api.get_labels(model_id)
68
- labelled_posts_ = labels_api.get_labelled_posts(labels_, model_id)
69
- labelled_posts_ = list(
70
- map(lambda x: labels.Label(x, model_id, username), labelled_posts_)
54
+ @run
55
+ async def get_posts(model_id, username):
56
+ responses = []
57
+ final_post_areas = set(areas.get_like_area())
58
+ tasks = []
59
+ with progress_utils.setup_api_split_progress_live():
60
+ async with sessionbuilder.sessionBuilder() as c:
61
+ while True:
62
+ max_count = min(
63
+ constants.getattr("API_MAX_AREAS"),
64
+ system.getcpu_count(),
65
+ len(final_post_areas),
66
+ )
67
+ if not bool(tasks) and not bool(final_post_areas):
68
+ break
69
+ for _ in range(max_count - len(tasks)):
70
+ if "Pinned" in final_post_areas:
71
+ tasks.append(
72
+ asyncio.create_task(
73
+ pinned.get_pinned_posts_progress(model_id, c)
74
+ )
75
+ )
76
+ progress_utils.pinned_layout.visible = True
77
+ final_post_areas.remove("Pinned")
78
+ elif "Timeline" in final_post_areas:
79
+ tasks.append(
80
+ asyncio.create_task(
81
+ timeline.get_timeline_posts_progress(
82
+ model_id=model_id,
83
+ username=username,
84
+ c=c,
85
+ forced_after=read_args.retriveArgs().after or 0,
86
+ )
87
+ )
88
+ )
89
+ progress_utils.timeline_layout.visible = True
90
+ final_post_areas.remove("Timeline")
91
+ if "Archived" in final_post_areas:
92
+ tasks.append(
93
+ asyncio.create_task(
94
+ archive.get_archived_posts_progress(
95
+ model_id=model_id,
96
+ username=username,
97
+ c=c,
98
+ forced_after=read_args.retriveArgs().after or 0,
99
+ )
100
+ )
101
+ )
102
+ progress_utils.archived_layout.visible = True
103
+ final_post_areas.remove("Archived")
104
+
105
+ elif "Labels" in final_post_areas:
106
+ tasks.append(
107
+ asyncio.create_task(
108
+ labels_api.get_labels_posts_progress(
109
+ model_id=model_id, c=c
110
+ )
111
+ )
112
+ )
113
+ progress_utils.labelled_layout.visible = True
114
+ final_post_areas.remove("Labels")
115
+ if not bool(tasks):
116
+ break
117
+ done, pending = await asyncio.wait(
118
+ tasks, return_when=asyncio.FIRST_COMPLETED
119
+ )
120
+ await asyncio.sleep(1)
121
+ tasks = list(pending)
122
+ for results in done:
123
+ try:
124
+ data = await results or []
125
+ responses.extend(data)
126
+ await asyncio.sleep(1)
127
+ except Exception as E:
128
+ await asyncio.sleep(1)
129
+ log.debug(E)
130
+ continue
131
+ return pre_filter(
132
+ list(
133
+ map(
134
+ lambda x: posts_.Post(x, model_id=model_id, username=username),
135
+ responses,
136
+ )
71
137
  )
72
- log.debug(
73
- f"[bold]Number of Post Found[/bold] {len(pinned_posts) + len(timeline_posts) + len(archived_posts)}"
74
138
  )
75
- return pinned_posts + timeline_posts + archived_posts + labelled_posts
76
139
 
77
140
 
78
141
  def get_posts_for_unlike(model_id, username):
@@ -86,20 +149,27 @@ def get_post_for_like(model_id, username):
86
149
 
87
150
 
88
151
  def filter_for_unfavorited(posts: list) -> list:
89
- output = list(filter(lambda x: x.get("isFavorite") == False, posts))
152
+ output = list(filter(lambda x: x.favorited == False, posts))
90
153
  log.debug(f"[bold]Number of unliked post[/bold] {len(output)}")
91
154
  return output
92
155
 
93
156
 
94
157
  def filter_for_favorited(posts: list) -> list:
95
- output = list(filter(lambda x: x.get("isFavorite") == True, posts))
158
+ output = list(filter(lambda x: x.favorited == True, posts))
96
159
  log.debug(f"[bold]Number of liked post[/bold] {len(output)}")
97
160
  return output
98
161
 
99
162
 
163
+ def pre_filter(posts):
164
+ valid_post = list(filter(lambda x: x.opened, posts))
165
+ seen = set()
166
+ return [
167
+ post for post in valid_post if post.id not in seen and not seen.add(post.id)
168
+ ]
169
+
170
+
100
171
  def get_post_ids(posts: list) -> list:
101
- valid_post = list(filter(lambda x: x.get("isOpened") == True, posts))
102
- return list(map(lambda x: x.get("id"), valid_post))
172
+ return list(map(lambda x: x.id, posts))
103
173
 
104
174
 
105
175
  def like(model_id, username, ids: list):
@@ -38,7 +38,6 @@ import ofscraper.utils.constants as constants
38
38
  import ofscraper.utils.context.exit as exit
39
39
  import ofscraper.utils.context.stdout as stdout
40
40
  import ofscraper.utils.profiles.tools as profile_tools
41
- from ofscraper.utils.text import get_text
42
41
 
43
42
  log = logging.getLogger("shared")
44
43
 
@@ -76,7 +75,7 @@ def process_post():
76
75
 
77
76
 
78
77
  @exit.exit_wrapper
79
- async def process_post_user_first():
78
+ def process_post_user_first():
80
79
  with scrape_context_manager():
81
80
  if not placeholder.check_uniquename():
82
81
  log.warning(
@@ -96,7 +95,7 @@ async def process_post_user_first():
96
95
  # log.info(f"Data retrival progressing on model {count+1}/{length}")
97
96
 
98
97
 
99
- async def process_user_first_helper(ele):
98
+ def process_user_first_helper(ele):
100
99
  if constants.getattr("SHOW_AVATAR") and ele.avatar:
101
100
  log.warning(f"Avatar : {ele.avatar}")
102
101
  if bool(areas.get_download_area()):
@@ -116,29 +115,22 @@ async def process_user_first_helper(ele):
116
115
  log.traceback_(traceback.format_exc())
117
116
 
118
117
 
119
- def scrape_paid(user_dict=None):
120
- output = []
121
- user_dict = user_dict or {}
122
- output.extend(OF.process_all_paid())
123
- user_dict = user_dict or {}
124
- [
125
- user_dict.update(
126
- {ele.post.model_id: user_dict.get(ele.post.model_id, []) + [ele]}
127
- )
128
- for ele in output
129
- ]
118
+ def scrape_paid_all(user_dict=None):
119
+ user_dict = OF.process_all_paid()
130
120
  oldUsers = selector.get_ALL_SUBS_DICT()
131
- for value in user_dict.values():
132
- model_id = value[0].post.model_id
133
- username = value[0].post.username
121
+ length = len(list(user_dict.keys()))
122
+ for count, value in enumerate(user_dict.values()):
123
+ model_id = value["model_id"]
124
+ username = value["username"]
125
+ posts = value["posts"]
126
+ medias = value["medias"]
127
+ log.warning(
128
+ f"Download paid content for {model_id}_{username} number:{count+1}/{length} models "
129
+ )
134
130
  selector.set_ALL_SUBS_DICTVManger(
135
131
  {username: models.Model(profile.scrape_profile(model_id))}
136
132
  )
137
- download.download_process(
138
- username,
139
- model_id,
140
- value,
141
- )
133
+ download.download_process(username, model_id, medias, posts=posts)
142
134
  # restore og users
143
135
  selector.set_ALL_SUBS_DICT(oldUsers)
144
136
 
@@ -168,7 +160,7 @@ def normal_post_process():
168
160
  )
169
161
  try:
170
162
  model_id = ele.id
171
- operations.table_init_create(model_id, ele.name)
163
+ operations.table_init_create(model_id=model_id, username=ele.name)
172
164
  combined_urls, posts = asyncio.run(OF.process_areas(ele, model_id))
173
165
  download.download_process(
174
166
  ele.name, model_id, combined_urls, posts=posts
@@ -198,9 +190,9 @@ def process_like():
198
190
  f"Getting {','.join(areas.get_like_area())} for [bold]{ele.name}[/bold]\n[bold]Subscription Active:[/bold] {ele.active}"
199
191
  )
200
192
  model_id = ele.id
201
- operations.table_init_create(model_id, ele.name)
202
- unfavorited_posts = like.get_post_for_like(model_id, ele.name)
203
- unfavorited_posts = filters.media_filter_for_like(
193
+ operations.table_init_create(model_id=model_id, username=ele.name)
194
+ unfavorited_posts = like.get_post_for_like(model_id=model_id, username=ele.name)
195
+ unfavorited_posts = filters.post_filter_for_like(
204
196
  unfavorited_posts, like=True
205
197
  )
206
198
  post_ids = like.get_post_ids(unfavorited_posts)
@@ -225,9 +217,9 @@ def process_unlike():
225
217
  f"Getting {','.join(areas.get_like_area())} for [bold]{ele.name}[/bold]\n[bold]Subscription Active:[/bold] {ele.active}"
226
218
  )
227
219
  model_id = profile.get_id(ele.name)
228
- operations.table_init_create(model_id, ele.name)
220
+ operations.table_init_create(model_id=model_id, username=ele.name)
229
221
  favorited_posts = like.get_posts_for_unlike(model_id, ele.name)
230
- favorited_posts = filters.media_filter_for_like(
222
+ favorited_posts = filters.post_filter_for_like(
231
223
  favorited_posts, like=False
232
224
  )
233
225
  post_ids = like.get_post_ids(favorited_posts)
@@ -255,5 +247,5 @@ def add_selected_areas():
255
247
  actions.select_areas()
256
248
  functs.append(process_unlike)
257
249
  if read_args.retriveArgs().scrape_paid:
258
- functs.append(scrape_paid)
250
+ functs.append(scrape_paid_all)
259
251
  return functs