ofscraper 3.9.0.dev11__tar.gz → 3.9.0.dev12__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (197) hide show
  1. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/PKG-INFO +2 -1
  2. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/actions/like.py +39 -66
  3. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/actions/process.py +5 -3
  4. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/actions/scraper.py +28 -23
  5. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/api/archive.py +133 -140
  6. ofscraper-3.9.0.dev12/ofscraper/api/common/logs.py +8 -0
  7. ofscraper-3.9.0.dev12/ofscraper/api/highlights.py +487 -0
  8. ofscraper-3.9.0.dev12/ofscraper/api/labels.py +450 -0
  9. ofscraper-3.9.0.dev12/ofscraper/api/me.py +75 -0
  10. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/api/messages.py +150 -187
  11. ofscraper-3.9.0.dev12/ofscraper/api/paid.py +399 -0
  12. ofscraper-3.9.0.dev12/ofscraper/api/pinned.py +258 -0
  13. ofscraper-3.9.0.dev12/ofscraper/api/profile.py +198 -0
  14. ofscraper-3.9.0.dev12/ofscraper/api/subscriptions/helpers.py +50 -0
  15. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/api/subscriptions/individual.py +12 -7
  16. ofscraper-3.9.0.dev12/ofscraper/api/subscriptions/lists.py +320 -0
  17. ofscraper-3.9.0.dev12/ofscraper/api/subscriptions/subscriptions.py +248 -0
  18. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/api/timeline.py +145 -170
  19. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/classes/base.py +1 -1
  20. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/classes/media.py +25 -33
  21. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/classes/models.py +7 -7
  22. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/classes/placeholder.py +4 -2
  23. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/classes/semaphoreDelayed.py +4 -6
  24. ofscraper-3.9.0.dev12/ofscraper/classes/sessionmanager.py +384 -0
  25. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/commands/check.py +207 -169
  26. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/commands/manual.py +97 -51
  27. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/const/config.py +2 -1
  28. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/const/constants.py +1 -0
  29. ofscraper-3.9.0.dev12/ofscraper/const/date.py +2 -0
  30. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/const/general.py +2 -0
  31. ofscraper-3.9.0.dev12/ofscraper/const/metadata.py +2 -0
  32. ofscraper-3.9.0.dev12/ofscraper/const/req.py +64 -0
  33. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/const/url.py +2 -0
  34. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/db/operations.py +23 -8
  35. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/db/operations_/labels.py +20 -9
  36. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/db/operations_/media.py +11 -3
  37. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/db/operations_/messages.py +3 -4
  38. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/db/operations_/others.py +4 -4
  39. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/db/operations_/stories.py +5 -3
  40. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/download/alt_download.py +35 -54
  41. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/download/alt_downloadbatch.py +39 -55
  42. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/download/common/common.py +0 -1
  43. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/download/common/globals.py +2 -17
  44. ofscraper-3.9.0.dev12/ofscraper/download/common/keyhelpers.py +261 -0
  45. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/download/common/log.py +13 -12
  46. ofscraper-3.9.0.dev12/ofscraper/download/common/metadata.py +108 -0
  47. ofscraper-3.9.0.dev12/ofscraper/download/common/sem.py +0 -0
  48. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/download/common/text.py +3 -1
  49. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/download/download.py +17 -5
  50. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/download/downloadbatch.py +27 -19
  51. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/download/downloadnormal.py +23 -13
  52. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/download/main_download.py +41 -62
  53. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/download/main_downloadbatch.py +43 -76
  54. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/filters/media/helpers.py +21 -1
  55. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/filters/media/main.py +1 -20
  56. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/models/retriver.py +3 -1
  57. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/models/selector.py +30 -1
  58. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/prompts/helpers/prompt_helpers.py +72 -7
  59. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/prompts/promptConvert.py +26 -12
  60. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/prompts/prompt_groups/config.py +4 -4
  61. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/prompts/prompt_groups/model.py +1 -0
  62. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/prompts/prompt_strings.py +2 -2
  63. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/args/groups/common_args.py +4 -4
  64. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/args/groups/main_args.py +108 -112
  65. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/args/groups/manual_args.py +5 -1
  66. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/args/groups/message_args.py +7 -4
  67. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/args/groups/paid_args.py +7 -4
  68. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/args/groups/post_args.py +6 -3
  69. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/args/groups/story_args.py +7 -4
  70. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/args/user.py +3 -3
  71. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/auth/request.py +66 -49
  72. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/config/custom.py +4 -2
  73. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/config/data.py +16 -7
  74. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/config/schema.py +1 -1
  75. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/constants.py +1 -1
  76. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/dates.py +24 -23
  77. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/logs/classes.py +35 -60
  78. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/manager.py +4 -4
  79. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/progress.py +1 -2
  80. ofscraper-3.9.0.dev12/ofscraper/utils/sems.py +1 -0
  81. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/system/network.py +9 -5
  82. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/pyproject.toml +2 -1
  83. ofscraper-3.9.0.dev11/ofscraper/api/highlights.py +0 -548
  84. ofscraper-3.9.0.dev11/ofscraper/api/labels.py +0 -471
  85. ofscraper-3.9.0.dev11/ofscraper/api/me.py +0 -116
  86. ofscraper-3.9.0.dev11/ofscraper/api/paid.py +0 -451
  87. ofscraper-3.9.0.dev11/ofscraper/api/pinned.py +0 -270
  88. ofscraper-3.9.0.dev11/ofscraper/api/profile.py +0 -244
  89. ofscraper-3.9.0.dev11/ofscraper/api/subscriptions/helpers.py +0 -85
  90. ofscraper-3.9.0.dev11/ofscraper/api/subscriptions/lists.py +0 -368
  91. ofscraper-3.9.0.dev11/ofscraper/api/subscriptions/subscriptions.py +0 -313
  92. ofscraper-3.9.0.dev11/ofscraper/classes/sessionbuilder.py +0 -245
  93. ofscraper-3.9.0.dev11/ofscraper/const/date.py +0 -2
  94. ofscraper-3.9.0.dev11/ofscraper/const/req.py +0 -29
  95. ofscraper-3.9.0.dev11/ofscraper/download/common/keyhelpers.py +0 -318
  96. ofscraper-3.9.0.dev11/ofscraper/download/common/metadata.py +0 -158
  97. ofscraper-3.9.0.dev11/ofscraper/download/common/sem.py +0 -45
  98. ofscraper-3.9.0.dev11/ofscraper/utils/sems.py +0 -10
  99. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/LICENSE +0 -0
  100. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/README.md +0 -0
  101. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/__main__.py +0 -0
  102. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/__version__.py +0 -0
  103. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/__version__.pye +0 -0
  104. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/actions/__init__.py +0 -0
  105. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/api/init.py +0 -0
  106. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/classes/labels.py +0 -0
  107. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/classes/multiprocessprogress.py +0 -0
  108. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/classes/posts.py +0 -0
  109. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/classes/table.py +0 -0
  110. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/commands/picker.py +0 -0
  111. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/commands/scraper.py +0 -0
  112. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/const/binary.py +0 -0
  113. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/const/download.py +0 -0
  114. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/const/files.py +0 -0
  115. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/const/logger.py +0 -0
  116. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/const/other_url.py +0 -0
  117. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/const/prompts.py +0 -0
  118. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/const/test_constants.py +0 -0
  119. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/const/time.py +0 -0
  120. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/db/__init__.py +0 -0
  121. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/db/operations_/helpers.py +0 -0
  122. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/db/operations_/posts.py +0 -0
  123. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/db/operations_/profile.py +0 -0
  124. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/db/operations_/wrapper.py +0 -0
  125. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/download/common/message.py +0 -0
  126. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/download/common/paths.py +0 -0
  127. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/download/common/progress.py +0 -0
  128. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/filters/models/date.py +0 -0
  129. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/filters/models/flags.py +0 -0
  130. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/filters/models/other.py +0 -0
  131. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/filters/models/price.py +0 -0
  132. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/filters/models/sort.py +0 -0
  133. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/filters/models/subtype.py +0 -0
  134. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/prompts/helpers/model_helpers.py +0 -0
  135. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/prompts/keybindings.py +0 -0
  136. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/prompts/prompt_groups/actions.py +0 -0
  137. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/prompts/prompt_groups/area.py +0 -0
  138. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/prompts/prompt_groups/auth.py +0 -0
  139. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/prompts/prompt_groups/binary.py +0 -0
  140. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/prompts/prompt_groups/menu.py +0 -0
  141. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/prompts/prompt_groups/profile.py +0 -0
  142. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/prompts/prompt_validators.py +0 -0
  143. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/prompts/prompts.py +0 -0
  144. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/runner/exit.py +0 -0
  145. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/runner/load.py +0 -0
  146. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/runner/run.py +0 -0
  147. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/__init__.py +0 -0
  148. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/actions.py +0 -0
  149. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/args/areas.py +0 -0
  150. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/args/globals.py +0 -0
  151. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/args/helpers.py +0 -0
  152. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/args/parse.py +0 -0
  153. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/args/quality.py +0 -0
  154. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/args/read.py +0 -0
  155. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/args/write.py +0 -0
  156. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/auth/context.py +0 -0
  157. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/auth/data.py +0 -0
  158. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/auth/file.py +0 -0
  159. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/auth/helpers.py +0 -0
  160. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/auth/make.py +0 -0
  161. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/auth/schema.py +0 -0
  162. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/binaries.py +0 -0
  163. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/cache.py +0 -0
  164. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/checkers.py +0 -0
  165. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/config/config.py +0 -0
  166. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/config/context.py +0 -0
  167. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/config/file.py +0 -0
  168. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/config/menu.py +0 -0
  169. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/config/wrapper.py +0 -0
  170. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/console.py +0 -0
  171. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/context/exit.py +0 -0
  172. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/context/run_async.py +0 -0
  173. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/context/stdout.py +0 -0
  174. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/encoding.py +0 -0
  175. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/hash.py +0 -0
  176. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/logs/close.py +0 -0
  177. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/logs/globals.py +0 -0
  178. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/logs/helpers.py +0 -0
  179. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/logs/logger.py +0 -0
  180. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/logs/logs.py +0 -0
  181. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/logs/other.py +0 -0
  182. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/logs/stdout.py +0 -0
  183. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/me.py +0 -0
  184. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/menu.py +0 -0
  185. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/paths/check.py +0 -0
  186. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/paths/common.py +0 -0
  187. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/paths/manage.py +0 -0
  188. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/paths/paths.py +0 -0
  189. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/profiles/data.py +0 -0
  190. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/profiles/manage.py +0 -0
  191. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/profiles/tools.py +0 -0
  192. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/run.py +0 -0
  193. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/separate.py +0 -0
  194. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/settings.py +0 -0
  195. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/system/free.py +0 -0
  196. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/system/system.py +0 -0
  197. {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/text.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ofscraper
3
- Version: 3.9.0.dev11
3
+ Version: 3.9.0.dev12
4
4
  Summary: automatically scrape onlyfans
5
5
  Author: datawhores
6
6
  Author-email: datawhores@riseup.net
@@ -35,6 +35,7 @@ Requires-Dist: poetry-dynamic-versioning (>=1.2.0,<2.0.0)
35
35
  Requires-Dist: prompt-toolkit (>=3.0.43,<4.0.0)
36
36
  Requires-Dist: psutil (>=5.9.8,<6.0.0)
37
37
  Requires-Dist: pycryptodome (>=3.20.0,<4.0.0)
38
+ Requires-Dist: pynumparser (>=1.4.1,<2.0.0)
38
39
  Requires-Dist: pywidevine (>=1.8.0,<2.0.0)
39
40
  Requires-Dist: requests (>=2.31.0,<3.0.0)
40
41
  Requires-Dist: rich (>=13.7.1,<14.0.0)
@@ -11,9 +11,10 @@ r"""
11
11
 
12
12
  """
13
13
 
14
+ import functools
14
15
  import asyncio
16
+ import time
15
17
  import logging
16
- import traceback
17
18
 
18
19
  from rich.progress import (
19
20
  BarColumn,
@@ -23,31 +24,21 @@ from rich.progress import (
23
24
  TextColumn,
24
25
  )
25
26
  from rich.style import Style
26
- from tenacity import (
27
- AsyncRetrying,
28
- retry,
29
- retry_if_not_exception_type,
30
- stop_after_attempt,
31
- wait_random,
32
- )
33
27
 
34
28
  import ofscraper.api.archive as archive
35
29
  import ofscraper.api.labels as labels_api
36
30
  import ofscraper.api.pinned as pinned
37
31
  import ofscraper.api.timeline as timeline
38
- import ofscraper.classes.labels as labels
39
32
  import ofscraper.classes.posts as posts_
40
- import ofscraper.classes.sessionbuilder as sessionbuilder
33
+ import ofscraper.classes.sessionmanager as sessionManager
41
34
  import ofscraper.utils.args.areas as areas
42
35
  import ofscraper.utils.args.read as read_args
43
36
  import ofscraper.utils.console as console
44
37
  import ofscraper.utils.constants as constants
45
38
  import ofscraper.utils.progress as progress_utils
46
39
  import ofscraper.utils.system.system as system
47
- from ofscraper.classes.semaphoreDelayed import semaphoreDelayed
48
40
  from ofscraper.utils.context.run_async import run
49
41
 
50
- sem = semaphoreDelayed(1)
51
42
  log = logging.getLogger("shared")
52
43
 
53
44
 
@@ -57,7 +48,12 @@ async def get_posts(model_id, username):
57
48
  final_post_areas = set(areas.get_like_area())
58
49
  tasks = []
59
50
  with progress_utils.setup_api_split_progress_live():
60
- async with sessionbuilder.sessionBuilder() as c:
51
+ async with sessionManager.sessionManager(
52
+ sem=constants.getattr("LIKE_MAX_SEMS"),
53
+ retries=constants.getattr("API_NUM_TRIES"),
54
+ wait_min=constants.getattr("OF_MIN_WAIT_API"),
55
+ wait_max=constants.getattr("OF_MAX_WAIT_API"),
56
+ ) as c:
61
57
  while True:
62
58
  max_count = min(
63
59
  constants.getattr("API_MAX_AREAS"),
@@ -149,13 +145,13 @@ def get_post_for_like(model_id, username):
149
145
 
150
146
 
151
147
  def filter_for_unfavorited(posts: list) -> list:
152
- output = list(filter(lambda x: x.favorited == False, posts))
148
+ output = list(filter(lambda x: x.favorited == False and x.opened, posts))
153
149
  log.debug(f"[bold]Number of unliked post[/bold] {len(output)}")
154
150
  return output
155
151
 
156
152
 
157
153
  def filter_for_favorited(posts: list) -> list:
158
- output = list(filter(lambda x: x.favorited == True, posts))
154
+ output = list(filter(lambda x: x.favorited == True and x.opened, posts))
159
155
  log.debug(f"[bold]Number of liked post[/bold] {len(output)}")
160
156
  return output
161
157
 
@@ -172,19 +168,16 @@ def get_post_ids(posts: list) -> list:
172
168
  return list(map(lambda x: x.id, posts))
173
169
 
174
170
 
175
- def like(model_id, username, ids: list):
176
- _like(model_id, username, ids, True)
171
+ def like(model_id, ids: list):
172
+ _like(model_id, ids, True)
177
173
 
178
174
 
179
- def unlike(model_id, username, ids: list):
180
- _like(model_id, username, ids, False)
175
+ def unlike(model_id, ids: list):
176
+ _like(model_id, ids, False)
181
177
 
182
178
 
183
- @run
184
- async def _like(model_id, username, ids: list, like_action: bool):
179
+ def _like(model_id, ids: list, like_action: bool):
185
180
  title = "Liking" if like_action else "Unliking"
186
- global sem
187
- sem.delay = 3
188
181
  with Progress(
189
182
  SpinnerColumn(style=Style(color="blue")),
190
183
  TextColumn("{task.description}"),
@@ -192,59 +185,39 @@ async def _like(model_id, username, ids: list, like_action: bool):
192
185
  MofNCompleteColumn(),
193
186
  console=console.get_shared_console(),
194
187
  ) as overall_progress:
195
- async with sessionbuilder.sessionBuilder() as c:
188
+ with sessionManager.sessionManager(
189
+ sem=1,
190
+ backend="httpx",
191
+ retries=constants.getattr("API_LIKE_NUM_TRIES"),
192
+ wait_min=constants.getattr("OF_MIN_WAIT_API"),
193
+ wait_max=constants.getattr("OF_MAX_WAIT_API"),
194
+ ) as c:
196
195
  tasks = []
197
196
  task1 = overall_progress.add_task(f"{title} posts...\n", total=len(ids))
198
197
 
199
198
  [
200
- tasks.append(asyncio.create_task(_like_request(c, id, model_id)))
199
+ tasks.append(functools.partial(_like_request,c, id, model_id))
201
200
  for id in ids
202
201
  ]
203
- for count, coro in enumerate(asyncio.as_completed(tasks)):
204
- id = await coro
202
+ sleep_duration = 3
203
+ for count, func in enumerate(tasks):
204
+ id = func()
205
205
  log.debug(
206
206
  f"ID: {id} Performed {'like' if like_action==True else 'unlike'} action"
207
207
  )
208
-
209
208
  if count + 1 % 60 == 0 and count + 1 % 50 == 0:
210
- sem.delay = 15
211
- elif count + 1 % 60 == 0:
212
- sem.delay = 3
213
- elif count + 1 % 50 == 0:
214
- sem.delay = 30
215
-
209
+ sleep_duration=40
210
+ elif count % 60 == 0:
211
+ sleep_duration = 1 # Divisible by 60 - 1 second sleep
212
+ elif count % 50 == 0:
213
+ sleep_duration = 30 # Divisible by 50 - 30 seconds sleep
216
214
  overall_progress.update(task1, advance=1, refresh=True)
215
+ time.sleep(sleep_duration)
217
216
 
218
217
 
219
- async def _like_request(c, id, model_id):
220
- global sem
221
- async for _ in AsyncRetrying(
222
- retry=retry_if_not_exception_type(KeyboardInterrupt),
223
- stop=stop_after_attempt(constants.getattr("NUM_TRIES")),
224
- wait=wait_random(
225
- min=constants.getattr("OF_MIN"),
226
- max=constants.getattr("OF_MAX"),
227
- ),
228
- reraise=True,
229
- ):
230
- with _:
231
- await sem.acquire()
232
- try:
233
- async with c.requests(
234
- constants.getattr("favoriteEP").format(id, model_id), "post"
235
- )() as r:
236
- if r.ok:
237
- return id
238
- else:
239
- log.debug(
240
- f"[bold]timeline response status code:[/bold]{r.status}"
241
- )
242
- log.debug(f"[bold]timeline response:[/bold] {await r.text_()}")
243
- log.debug(f"[bold]timeline headers:[/bold] {r.headers}")
244
- r.raise_for_status()
245
- except Exception as E:
246
- log.traceback_(E)
247
- log.traceback_(traceback.format_exc())
248
- raise E
249
- finally:
250
- sem.release()
218
+
219
+ def _like_request(c, id, model_id):
220
+ with c.requests(
221
+ constants.getattr("favoriteEP").format(id, model_id),method="post"
222
+ ) as _:
223
+ return id
@@ -191,12 +191,14 @@ def process_like():
191
191
  )
192
192
  model_id = ele.id
193
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)
194
+ unfavorited_posts = like.get_post_for_like(
195
+ model_id=model_id, username=ele.name
196
+ )
195
197
  unfavorited_posts = filters.post_filter_for_like(
196
198
  unfavorited_posts, like=True
197
199
  )
198
200
  post_ids = like.get_post_ids(unfavorited_posts)
199
- like.like(model_id, ele.name, post_ids)
201
+ like.like(model_id, post_ids)
200
202
 
201
203
 
202
204
  @exit.exit_wrapper
@@ -223,7 +225,7 @@ def process_unlike():
223
225
  favorited_posts, like=False
224
226
  )
225
227
  post_ids = like.get_post_ids(favorited_posts)
226
- like.unlike(model_id, ele.name, post_ids)
228
+ like.unlike(model_id, post_ids)
227
229
 
228
230
 
229
231
  def add_selected_areas():
@@ -28,7 +28,7 @@ import ofscraper.api.timeline as timeline
28
28
  import ofscraper.classes.labels as labels
29
29
  import ofscraper.classes.media as media
30
30
  import ofscraper.classes.posts as posts_
31
- import ofscraper.classes.sessionbuilder as sessionbuilder
31
+ import ofscraper.classes.sessionmanager as sessionManager
32
32
  import ofscraper.db.operations as operations
33
33
  import ofscraper.filters.media.main as filters
34
34
  import ofscraper.utils.args.areas as areas
@@ -63,7 +63,7 @@ async def process_messages(model_id, username, c):
63
63
  )
64
64
  log.debug("Removing locked messages media")
65
65
  output = []
66
- [output.extend(message.media) for message in messages_]
66
+ [output.extend(message.all_media) for message in messages_]
67
67
  log.debug(f"[bold]Messages media count[/bold] {len(output)}")
68
68
  # Update after database
69
69
  cache.set(
@@ -98,7 +98,7 @@ async def process_paid_post(model_id, username, c):
98
98
  username=username,
99
99
  )
100
100
  output = []
101
- [output.extend(post.media) for post in paid_content]
101
+ [output.extend(post.all_media) for post in paid_content]
102
102
  log.debug(f"[bold]Paid media count without locked[/bold] {len(output)}")
103
103
 
104
104
  await operations.batch_mediainsert(
@@ -143,7 +143,7 @@ async def process_stories(model_id, username, c):
143
143
  f"[bold]Story media count[/bold] {sum(map(lambda x:len(x.post_media), stories))}"
144
144
  )
145
145
  output = []
146
- [output.extend(stories.media) for stories in stories]
146
+ [output.extend(stories.all_media) for stories in stories]
147
147
  await operations.batch_mediainsert(
148
148
  output,
149
149
  model_id=model_id,
@@ -183,7 +183,7 @@ async def process_highlights(model_id, username, c):
183
183
  f"[bold]highlight media count[/bold] {sum(map(lambda x:len(x.post_media), highlights_))}"
184
184
  )
185
185
  output = []
186
- [output.extend(stories.media) for stories in highlights_]
186
+ [output.extend(stories.all_media) for stories in highlights_]
187
187
  await operations.batch_mediainsert(
188
188
  output,
189
189
  model_id=model_id,
@@ -231,7 +231,7 @@ async def process_timeline_posts(model_id, username, c):
231
231
  )
232
232
  log.debug("Removing locked timeline media")
233
233
  output = []
234
- [output.extend(post.media) for post in timeline_only_posts]
234
+ [output.extend(post.all_media) for post in timeline_only_posts]
235
235
  log.debug(f"[bold]Timeline media count without locked[/bold] {len(output)}")
236
236
 
237
237
  await operations.batch_mediainsert(
@@ -281,7 +281,7 @@ async def process_archived_posts(model_id, username, c):
281
281
  )
282
282
  log.debug("Removing locked archived media")
283
283
  output = []
284
- [output.extend(post.media) for post in archived_posts]
284
+ [output.extend(post.all_media) for post in archived_posts]
285
285
  log.debug(f"[bold]Archived media count without locked[/bold] {len(output)}")
286
286
 
287
287
  await operations.batch_mediainsert(
@@ -325,7 +325,7 @@ async def process_pinned_posts(model_id, username, c):
325
325
  )
326
326
  log.debug("Removing locked pinned media")
327
327
  output = []
328
- [output.extend(post.media) for post in pinned_posts]
328
+ [output.extend(post.all_media) for post in pinned_posts]
329
329
  log.debug(f"[bold]Pinned media count without locked[/bold] {len(output)}")
330
330
 
331
331
  await operations.batch_mediainsert(
@@ -386,6 +386,7 @@ async def process_all_paid():
386
386
  with stdout.lowstdout():
387
387
  paid_content = await paid.get_all_paid_posts()
388
388
  user_dict = {}
389
+
389
390
  for ele in paid_content:
390
391
  user_id = ele.get("fromUser", {}).get("id") or ele.get("author", {}).get(
391
392
  "id"
@@ -394,11 +395,10 @@ async def process_all_paid():
394
395
  output = {}
395
396
  for model_id, value in user_dict.items():
396
397
  username = profile.scrape_profile(model_id).get("username")
397
- if (
398
- username == "modeldeleted"
399
- and await operations.check_profile_table_exists(
400
- model_id=model_id, username=username
401
- )
398
+ if username == constants.getattr(
399
+ "DELETED_MODEL_PLACEHOLDER"
400
+ ) and await operations.check_profile_table_exists(
401
+ model_id=model_id, username=username
402
402
  ):
403
403
  username = (
404
404
  await operations.get_profile_info(
@@ -421,7 +421,7 @@ async def process_all_paid():
421
421
  for post in all_posts
422
422
  if post.id not in seen and not seen.add(post.id)
423
423
  ]
424
- new_medias = [item for post in new_posts for item in post.media]
424
+ new_medias = [item for post in new_posts for item in post.all_media]
425
425
  new_medias = filters.filterMedia(new_medias)
426
426
  new_posts = filters.filterPost(new_posts)
427
427
  await operations.make_post_table_changes(
@@ -455,22 +455,22 @@ async def process_labels(model_id, username, c):
455
455
  with stdout.lowstdout():
456
456
  labelled_posts_ = await labels_api.get_labels_progress(model_id, c=c)
457
457
 
458
- labelled_posts_ = list(
458
+ labelled_posts_labels = list(
459
459
  map(lambda x: labels.Label(x, model_id, username), labelled_posts_)
460
460
  )
461
461
  await operations.make_label_table_changes(
462
- labelled_posts_,
463
- model_id=model_id,
464
- username=username,
462
+ labelled_posts_labels,
463
+ model_id=model_id,
464
+ username=username,
465
465
  )
466
466
 
467
467
  log.debug(
468
- f"[bold]Label media count with locked[/bold] {sum(map(lambda x:len(x),[post.post_media for labelled_post in labelled_posts_ for post in labelled_post.posts]))}"
468
+ f"[bold]Label media count with locked[/bold] {sum(map(lambda x:len(x),[post.post_media for labelled_post in labelled_posts_labels for post in labelled_post.posts]))}"
469
469
  )
470
470
  log.debug("Removing locked messages media")
471
471
  output = [
472
- post.media
473
- for labelled_post in labelled_posts_
472
+ post.all_media
473
+ for labelled_post in labelled_posts_labels
474
474
  for post in labelled_post.posts
475
475
  ]
476
476
  log.debug(
@@ -478,7 +478,7 @@ async def process_labels(model_id, username, c):
478
478
  )
479
479
 
480
480
  return [item for sublist in output for item in sublist], [
481
- post for ele in labelled_posts_ for post in ele.posts
481
+ post for ele in labelled_posts_labels for post in ele.posts
482
482
  ]
483
483
  except Exception as E:
484
484
  try:
@@ -513,7 +513,12 @@ async def process_task(model_id, username, ele):
513
513
  postObjs = []
514
514
  final_post_areas = set(areas.get_download_area())
515
515
  tasks = []
516
- async with sessionbuilder.sessionBuilder() as c:
516
+ async with sessionManager.sessionManager(
517
+ sem=constants.getattr("API_REQ_SEM_MAX"),
518
+ retries=constants.getattr("API_NUM_TRIES"),
519
+ wait_min=constants.getattr("OF_MIN_WAIT_API"),
520
+ wait_max=constants.getattr("OF_MAX_WAIT_API"),
521
+ ) as c:
517
522
  while True:
518
523
  max_count = min(
519
524
  constants.getattr("API_MAX_AREAS"),