ofscraper 3.10.dev2__tar.gz → 3.10.dev4__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 (249) hide show
  1. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/PKG-INFO +1 -1
  2. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/commands/check.py +1 -1
  3. ofscraper-3.10.dev4/ofscraper/commands/helpers/context.py +147 -0
  4. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/commands/manual.py +2 -2
  5. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/commands/metadata.py +2 -5
  6. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/commands/scraper/actions/download.py +1 -1
  7. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/commands/scraper/actions/like.py +18 -8
  8. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/commands/scraper/runner.py +15 -50
  9. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/const/values/like.py +0 -5
  10. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/db/operations_/merge.py +1 -1
  11. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/download/download.py +5 -6
  12. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/download/downloadbatch.py +3 -9
  13. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/download/downloadnormal.py +5 -10
  14. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/download/shared/utils/log.py +20 -11
  15. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/filters/media/helpers.py +10 -1
  16. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/filters/media/main.py +2 -2
  17. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/console.py +2 -2
  18. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/context/exit.py +1 -1
  19. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/live/groups.py +4 -0
  20. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/live/screens.py +39 -21
  21. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/live/updater.py +2 -2
  22. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/logs/classes.py +14 -3
  23. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/logs/other.py +1 -1
  24. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/logs/stdout.py +6 -5
  25. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/pyproject.toml +1 -1
  26. ofscraper-3.10.dev2/ofscraper/commands/helpers/context.py +0 -104
  27. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/LICENSE +0 -0
  28. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/README.md +0 -0
  29. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/__main__.py +0 -0
  30. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/__version__.py +0 -0
  31. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/__version__.pye +0 -0
  32. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/api/archive.py +0 -0
  33. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/api/common/logs.py +0 -0
  34. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/api/highlights.py +0 -0
  35. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/api/init.py +0 -0
  36. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/api/labels.py +0 -0
  37. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/api/me.py +0 -0
  38. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/api/messages.py +0 -0
  39. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/api/paid.py +0 -0
  40. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/api/pinned.py +0 -0
  41. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/api/profile.py +0 -0
  42. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/api/subscriptions/helpers.py +0 -0
  43. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/api/subscriptions/individual.py +0 -0
  44. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/api/subscriptions/lists.py +0 -0
  45. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/api/subscriptions/subscriptions.py +0 -0
  46. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/api/timeline.py +0 -0
  47. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/classes/base.py +0 -0
  48. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/classes/labels.py +0 -0
  49. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/classes/media.py +0 -0
  50. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/classes/models.py +0 -0
  51. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/classes/multiprocessprogress.py +0 -0
  52. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/classes/placeholder.py +0 -0
  53. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/classes/posts.py +0 -0
  54. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/classes/sessionmanager.py +0 -0
  55. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/classes/table/button.py +0 -0
  56. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/classes/table/fields/boolfield.py +0 -0
  57. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/classes/table/fields/datefield.py +0 -0
  58. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/classes/table/fields/mediafield.py +0 -0
  59. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/classes/table/fields/numfield.py +0 -0
  60. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/classes/table/fields/pricefield.py +0 -0
  61. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/classes/table/fields/responsefield.py +0 -0
  62. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/classes/table/fields/selectfield.py +0 -0
  63. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/classes/table/fields/textsearch.py +0 -0
  64. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/classes/table/fields/timefield.py +0 -0
  65. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/classes/table/inputs/filterinput.py +0 -0
  66. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/classes/table/inputs/intergerinput.py +0 -0
  67. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/classes/table/inputs/strinput.py +0 -0
  68. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/classes/table/row_names.py +0 -0
  69. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/classes/table/status.py +0 -0
  70. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/classes/table/table.py +0 -0
  71. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/classes/table/table_console.py +0 -0
  72. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/commands/helpers/picker.py +0 -0
  73. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/commands/helpers/shared.py +0 -0
  74. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/commands/helpers/strings.py +0 -0
  75. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/commands/scraper/post.py +0 -0
  76. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/commands/scraper/scrape_context.py +0 -0
  77. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/commands/scraper/scraper.py +0 -0
  78. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/const/constants.py +0 -0
  79. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/const/values/binary.py +0 -0
  80. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/const/values/config.py +0 -0
  81. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/const/values/date.py +0 -0
  82. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/const/values/download.py +0 -0
  83. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/const/values/files.py +0 -0
  84. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/const/values/general.py +0 -0
  85. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/const/values/live.py +0 -0
  86. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/const/values/logger.py +0 -0
  87. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/const/values/metadata.py +0 -0
  88. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/const/values/other_url.py +0 -0
  89. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/const/values/path.py +0 -0
  90. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/const/values/prompts.py +0 -0
  91. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/const/values/req.py +0 -0
  92. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/const/values/table.py +0 -0
  93. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/const/values/test_constants.py +0 -0
  94. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/const/values/time.py +0 -0
  95. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/const/values/url.py +0 -0
  96. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/db/__init__.py +0 -0
  97. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/db/operations.py +0 -0
  98. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/db/operations_/helpers.py +0 -0
  99. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/db/operations_/labels.py +0 -0
  100. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/db/operations_/media.py +0 -0
  101. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/db/operations_/messages.py +0 -0
  102. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/db/operations_/others.py +0 -0
  103. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/db/operations_/posts.py +0 -0
  104. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/db/operations_/profile.py +0 -0
  105. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/db/operations_/stories.py +0 -0
  106. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/db/operations_/wrapper.py +0 -0
  107. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/download/alt_download.py +0 -0
  108. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/download/alt_downloadbatch.py +0 -0
  109. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/download/main_download.py +0 -0
  110. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/download/main_downloadbatch.py +0 -0
  111. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/download/shared/classes/retries.py +0 -0
  112. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/download/shared/classes/session.py +0 -0
  113. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/download/shared/common/alt_common.py +0 -0
  114. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/download/shared/common/general.py +0 -0
  115. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/download/shared/common/main_common.py +0 -0
  116. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/download/shared/globals.py +0 -0
  117. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/download/shared/utils/keyhelpers.py +0 -0
  118. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/download/shared/utils/media.py +0 -0
  119. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/download/shared/utils/message.py +0 -0
  120. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/download/shared/utils/metadata.py +0 -0
  121. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/download/shared/utils/paths.py +0 -0
  122. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/download/shared/utils/progress.py +0 -0
  123. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/download/shared/utils/text.py +0 -0
  124. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/filters/models/date.py +0 -0
  125. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/filters/models/flags.py +0 -0
  126. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/filters/models/helpers.py +0 -0
  127. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/filters/models/other.py +0 -0
  128. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/filters/models/price.py +0 -0
  129. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/filters/models/sort.py +0 -0
  130. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/filters/models/subtype.py +0 -0
  131. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/models/retriver.py +0 -0
  132. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/models/selector.py +0 -0
  133. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/prompts/helpers/model_helpers.py +0 -0
  134. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/prompts/helpers/prompt_helpers.py +0 -0
  135. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/prompts/keybindings.py +0 -0
  136. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/prompts/promptConvert.py +0 -0
  137. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/prompts/prompt_groups/actions.py +0 -0
  138. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/prompts/prompt_groups/area.py +0 -0
  139. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/prompts/prompt_groups/auth.py +0 -0
  140. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/prompts/prompt_groups/binary.py +0 -0
  141. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/prompts/prompt_groups/config.py +0 -0
  142. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/prompts/prompt_groups/menu.py +0 -0
  143. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/prompts/prompt_groups/merge.py +0 -0
  144. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/prompts/prompt_groups/model.py +0 -0
  145. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/prompts/prompt_groups/profile.py +0 -0
  146. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/prompts/prompt_strings.py +0 -0
  147. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/prompts/prompt_validators.py +0 -0
  148. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/prompts/prompts.py +0 -0
  149. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/runner/exit.py +0 -0
  150. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/runner/load.py +0 -0
  151. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/runner/run.py +0 -0
  152. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/__init__.py +0 -0
  153. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/actions.py +0 -0
  154. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/args/arguments/advanced_processing.py +0 -0
  155. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/args/arguments/advanced_program.py +0 -0
  156. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/args/arguments/advanced_user_filter.py +0 -0
  157. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/args/arguments/automatic.py +0 -0
  158. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/args/arguments/content.py +0 -0
  159. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/args/arguments/download.py +0 -0
  160. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/args/arguments/file.py +0 -0
  161. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/args/arguments/logging.py +0 -0
  162. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/args/arguments/media_type.py +0 -0
  163. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/args/arguments/program.py +0 -0
  164. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/args/arguments/user_list.py +0 -0
  165. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/args/arguments/user_select.py +0 -0
  166. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/args/arguments/user_sort.py +0 -0
  167. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/args/bundles/advanced_common.py +0 -0
  168. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/args/bundles/common.py +0 -0
  169. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/args/bundles/main.py +0 -0
  170. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/args/bundles/manual.py +0 -0
  171. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/args/bundles/message_check.py +0 -0
  172. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/args/bundles/metadata.py +0 -0
  173. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/args/bundles/paid_check.py +0 -0
  174. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/args/bundles/post_check.py +0 -0
  175. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/args/bundles/story_check.py +0 -0
  176. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/args/commands/main.py +0 -0
  177. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/args/commands/manual.py +0 -0
  178. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/args/commands/message.py +0 -0
  179. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/args/commands/metadata.py +0 -0
  180. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/args/commands/paid.py +0 -0
  181. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/args/commands/post.py +0 -0
  182. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/args/commands/story.py +0 -0
  183. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/args/globals.py +0 -0
  184. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/args/groups/common_args.py +0 -0
  185. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/args/helpers/areas.py +0 -0
  186. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/args/helpers/before.py +0 -0
  187. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/args/helpers/check.py +0 -0
  188. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/args/helpers/date.py +0 -0
  189. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/args/helpers/type.py +0 -0
  190. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/args/output.py +0 -0
  191. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/args/parse.py +0 -0
  192. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/args/quality.py +0 -0
  193. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/args/read.py +0 -0
  194. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/args/user.py +0 -0
  195. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/args/write.py +0 -0
  196. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/auth/context.py +0 -0
  197. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/auth/data.py +0 -0
  198. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/auth/file.py +0 -0
  199. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/auth/helpers.py +0 -0
  200. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/auth/make.py +0 -0
  201. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/auth/request.py +0 -0
  202. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/auth/schema.py +0 -0
  203. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/binaries.py +0 -0
  204. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/cache.py +0 -0
  205. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/checkers.py +0 -0
  206. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/config/config.py +0 -0
  207. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/config/context.py +0 -0
  208. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/config/custom.py +0 -0
  209. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/config/data.py +0 -0
  210. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/config/file.py +0 -0
  211. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/config/menu.py +0 -0
  212. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/config/schema.py +0 -0
  213. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/config/wrapper.py +0 -0
  214. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/constants.py +0 -0
  215. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/context/run_async.py +0 -0
  216. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/context/stdout.py +0 -0
  217. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/dates.py +0 -0
  218. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/encoding.py +0 -0
  219. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/hash.py +0 -0
  220. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/live/empty.py +0 -0
  221. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/live/live.py +0 -0
  222. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/live/panel.py +0 -0
  223. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/live/progress.py +0 -0
  224. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/live/tasks.py +0 -0
  225. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/logs/close.py +0 -0
  226. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/logs/globals.py +0 -0
  227. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/logs/handle.py +0 -0
  228. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/logs/helpers.py +0 -0
  229. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/logs/logger.py +0 -0
  230. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/logs/logs.py +0 -0
  231. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/manager.py +0 -0
  232. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/me.py +0 -0
  233. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/menu.py +0 -0
  234. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/merge.py +0 -0
  235. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/paths/check.py +0 -0
  236. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/paths/common.py +0 -0
  237. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/paths/manage.py +0 -0
  238. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/paths/paths.py +0 -0
  239. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/profiles/data.py +0 -0
  240. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/profiles/manage.py +0 -0
  241. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/profiles/tools.py +0 -0
  242. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/run.py +0 -0
  243. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/sems.py +0 -0
  244. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/separate.py +0 -0
  245. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/settings.py +0 -0
  246. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/system/free.py +0 -0
  247. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/system/network.py +0 -0
  248. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/system/system.py +0 -0
  249. {ofscraper-3.10.dev2 → ofscraper-3.10.dev4}/ofscraper/utils/text.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ofscraper
3
- Version: 3.10.dev2
3
+ Version: 3.10.dev4
4
4
  Summary: automatically scrape onlyfans
5
5
  Author: datawhores
6
6
  Author-email: datawhores@riseup.net
@@ -70,7 +70,7 @@ def process_item():
70
70
  try:
71
71
  row, key = table.row_queue.get()
72
72
  except Exception as E:
73
- log.error(f"Error getting item from queue: {E}")
73
+ log.debug(f"Error getting item from queue: {E}")
74
74
  return
75
75
  for count, _ in enumerate(range(0, 2)):
76
76
  try:
@@ -0,0 +1,147 @@
1
+ import logging
2
+ import traceback
3
+ from itertools import chain
4
+
5
+
6
+
7
+ import ofscraper.models.selector as selector
8
+ import ofscraper.utils.args.helpers.areas as areas
9
+ import ofscraper.utils.args.read as read_args
10
+ import ofscraper.utils.constants as constants
11
+ import ofscraper.utils.live.screens as progress_utils
12
+ from ofscraper.commands.scraper.post import post_media_process
13
+
14
+ from ofscraper.commands.helpers.strings import (
15
+ area_str,
16
+ avatar_str,
17
+ data_str,
18
+ progress_str,
19
+ )
20
+ log = logging.getLogger("shared")
21
+
22
+
23
+ def get_user_action_function(func):
24
+ async def wrapper(userdata,session,*args, **kwargs):
25
+ async with session as c:
26
+ data=[]
27
+ for ele in userdata:
28
+ try:
29
+ with progress_utils.setup_api_split_progress_live():
30
+ all_media, posts, like_posts = await post_media_process(ele, c=c)
31
+ with progress_utils.setup_activity_counter_live(revert=False):
32
+ avatar = ele.avatar
33
+ if (
34
+ constants.getattr("SHOW_AVATAR")
35
+ and avatar
36
+ and read_args.retriveArgs ().userfirst
37
+ ):
38
+ logging.getLogger("shared_other").warning(avatar_str.format(avatar=avatar))
39
+ data_helper(ele)
40
+ data.append(await func(all_media, posts, like_posts,ele=ele))
41
+ except Exception as e:
42
+
43
+ log.traceback_(f"failed with exception: {e}")
44
+ log.traceback_(traceback.format_exc())
45
+
46
+ if isinstance(e, KeyboardInterrupt):
47
+ raise e
48
+ finally:
49
+ progress_utils.increment_user_activity()
50
+ records=chain.from_iterable(data)
51
+ if len(records)<2:
52
+ return
53
+ for record in records:
54
+ log.warning(record)
55
+
56
+ return wrapper
57
+
58
+
59
+
60
+
61
+ def get_userfirst_data_function(funct):
62
+ async def wrapper(userdata, session, *args, **kwargs):
63
+ progress_utils.update_activity_task(description="Getting all user data first")
64
+ progress_utils.update_user_activity(description="Users with Data Retrieved")
65
+ progress_utils.update_activity_count(description="Overall progress", total=2)
66
+ data = {}
67
+ async with session:
68
+ for ele in userdata:
69
+ try:
70
+ data_helper(ele)
71
+ with progress_utils.setup_activity_counter_live(revert=False):
72
+ data.update(await funct(session, ele))
73
+ except Exception as e:
74
+ log.traceback_(f"failed with exception: {e}")
75
+ log.traceback_(traceback.format_exc())
76
+ if isinstance(e, KeyboardInterrupt):
77
+ raise e
78
+ finally:
79
+ session.reset_sleep()
80
+ progress_utils.increment_user_activity()
81
+ return data
82
+
83
+ return wrapper
84
+
85
+
86
+ def get_userfirst_action_execution_function(funct):
87
+ async def wrapper(data,*args, **kwargs):
88
+ progress_utils.increment_activity_count(total=2)
89
+ try:
90
+ progress_utils.update_user_activity(total=len(data.items()))
91
+ for _, val in data.items():
92
+ all_media = val["media"]
93
+ posts = val["posts"]
94
+ like_posts = val["like_posts"]
95
+ ele = val["ele"]
96
+ avatar = ele.avatar
97
+ if (
98
+ constants.getattr("SHOW_AVATAR")
99
+ and avatar
100
+ and read_args.retriveArgs().userfirst
101
+ ):
102
+ logging.getLogger("shared_other").warning(avatar_str.format(avatar=avatar))
103
+ try:
104
+ with progress_utils.setup_activity_counter_live(revert=False):
105
+ await funct(all_media, posts, like_posts,*args, ele=ele,**kwargs)
106
+ except Exception as e:
107
+ log.traceback_(f"failed with exception: {e}")
108
+ log.traceback_(traceback.format_exc())
109
+ if isinstance(e, KeyboardInterrupt):
110
+ raise e
111
+ finally:
112
+ progress_utils.increment_user_activity()
113
+ except Exception as e:
114
+ log.traceback_(f"failed with exception: {e}")
115
+ log.traceback_(traceback.format_exc())
116
+ if isinstance(e, KeyboardInterrupt):
117
+ raise e
118
+ finally:
119
+ progress_utils.increment_activity_count(description="Overall progress", total=2)
120
+
121
+ return wrapper
122
+
123
+
124
+
125
+ def data_helper(user):
126
+ avatar = user.avatar
127
+ username = user.name
128
+ active = user.active
129
+ final_post_areas = areas.get_final_posts_area()
130
+ length = selector.get_num_selected()
131
+ count = progress_utils.get_user_task_obj().completed
132
+
133
+
134
+ logging.getLogger("shared_other").warning(
135
+ progress_str.format(count=count + 1, length=length)
136
+ )
137
+ logging.getLogger("shared_other").warning(data_str.format(name=username))
138
+ if constants.getattr("SHOW_AVATAR") and avatar:
139
+ logging.getLogger("shared_other").warning(avatar_str.format(avatar=avatar))
140
+ progress_utils.update_activity_task(
141
+ description=area_str.format(
142
+ areas=",".join(final_post_areas), name=username, active=active
143
+ )
144
+ )
145
+ logging.getLogger("shared_other").info(
146
+ area_str.format(areas=",".join(final_post_areas), name=username, active=active)
147
+ )
@@ -30,7 +30,7 @@ def manual_download(urls=None):
30
30
  network.check_cdm()
31
31
  allow_manual_dupes()
32
32
  url_dicts = process_urls(urls)
33
- with progress_utils.setup_activity_live():
33
+ with progress_utils.setup_activity_progress_live():
34
34
  progress_utils.update_activity_task(
35
35
  description="Getting data from retrived posts"
36
36
  )
@@ -51,7 +51,7 @@ def manual_download(urls=None):
51
51
  set_user_data(url_dicts)
52
52
 
53
53
  for _, value in url_dicts.items():
54
- with progress_utils.setup_activity_live():
54
+ with progress_utils.setup_activity_progress_live():
55
55
  model_id = value.get("model_id")
56
56
  username = value.get("username")
57
57
  model_id = value.get("model_id")
@@ -32,7 +32,6 @@ import ofscraper.utils.live.screens as progress_utils
32
32
  import ofscraper.utils.profiles.tools as profile_tools
33
33
  from ofscraper.__version__ import __version__
34
34
  from ofscraper.commands.helpers.context import (
35
- get_user_action_execution_function,
36
35
  get_user_action_function,
37
36
  get_userfirst_action_execution_function,
38
37
  get_userfirst_data_function,
@@ -53,7 +52,7 @@ log = logging.getLogger("shared")
53
52
 
54
53
 
55
54
  def metadata():
56
- with progress_utils.setup_activity_live(stop=True):
55
+ with progress_utils.setup_activity_progress_live(stop=True):
57
56
  if read_args.retriveArgs().scrape_paid:
58
57
  progress_utils.update_activity_task(
59
58
  description="Updating Metadata for Entire Paid page"
@@ -189,8 +188,6 @@ async def execute_metadata_action_user_first(data):
189
188
  await get_user_action_execution_function(execute_metadata_action_on_user)(
190
189
  media=media, user=ele
191
190
  )
192
- # await download.download_process(username, model_id, filterMedia)
193
- # metadata_stray_media(username, model_id, media)
194
191
  except Exception as e:
195
192
  if isinstance(e, KeyboardInterrupt):
196
193
  raise e
@@ -251,7 +248,7 @@ def process_selected_areas():
251
248
  log.debug("[bold blue] Running Metadata Mode [/bold blue]")
252
249
  force_change_download()
253
250
  with scrape_context_manager():
254
- with progress_utils.setup_activity_live(stop=True):
251
+ with progress_utils.setup_activity_progress_live(stop=True):
255
252
  if read_args.retriveArgs().metadata:
256
253
  metadata()
257
254
 
@@ -31,7 +31,7 @@ async def downloader(ele=None, posts=None, media=None, **kwargs):
31
31
  username = ele.name
32
32
  progress_utils.update_activity_task(description=download_str.format(name=username))
33
33
  logging.getLogger("shared_other").warning(download_str.format(name=username))
34
- await download.download_process(username, model_id, media, posts=posts)
34
+ return await download.download_process(username, model_id, media, posts=posts)
35
35
 
36
36
 
37
37
  @run
@@ -21,6 +21,9 @@ import ofscraper.utils.cache as cache
21
21
  import ofscraper.utils.constants as constants
22
22
  import ofscraper.utils.context.exit as exit
23
23
  import ofscraper.utils.live.screens as progress_utils
24
+ from rich.markup import escape
25
+ from rich.text import Text
26
+
24
27
 
25
28
  log = logging.getLogger("shared")
26
29
  like_str = "Performing Like Action on {name}"
@@ -35,7 +38,7 @@ def process_like(posts=None, model_id=None, task=None, username=None, **kwargs):
35
38
  unfavorited_posts = get_posts_for_like(posts)
36
39
  posts = pre_filter(posts)
37
40
  post_ids = get_post_ids(unfavorited_posts)
38
- like(model_id, post_ids)
41
+ return like(model_id, username,post_ids)
39
42
 
40
43
 
41
44
  @exit.exit_wrapper
@@ -46,7 +49,7 @@ def process_unlike(posts=None, model_id=None, task=None, username=None, **kwargs
46
49
  favorited_posts = get_posts_for_unlike(posts)
47
50
  posts = pre_filter(posts)
48
51
  post_ids = get_post_ids(favorited_posts)
49
- unlike(model_id, post_ids)
52
+ return unlike(model_id, username,post_ids)
50
53
 
51
54
 
52
55
  def get_posts_for_unlike(post):
@@ -82,15 +85,15 @@ def get_post_ids(posts: list) -> list:
82
85
  return list(map(lambda x: x.id, posts))
83
86
 
84
87
 
85
- def like(model_id, ids: list):
86
- _like(model_id, ids, True)
88
+ def like(model_id, username,ids: list):
89
+ return _like(model_id,username, ids, True)
87
90
 
88
91
 
89
- def unlike(model_id, ids: list):
90
- _like(model_id, ids, False)
92
+ def unlike(model_id,username, ids: list):
93
+ return _like(model_id, username,ids, False)
91
94
 
92
95
 
93
- def _like(model_id, ids: list, like_action: bool):
96
+ def _like(model_id, username,ids: list, like_action: bool):
94
97
  like_str = (
95
98
  "Posts toggled from unlike to like...\n"
96
99
  if like_action
@@ -134,8 +137,15 @@ def _like(model_id, ids: list, like_action: bool):
134
137
  progress_utils.increment_like_task(task2)
135
138
  progress_utils.increment_like_task(task)
136
139
  time.sleep(sleep_duration)
140
+ title="Liked" if like_action else "Unliked"
141
+ liked=progress_utils.get_like_task(task2).completed
142
+ post=progress_utils.get_like_task(task).completed
143
+ action=title.lower()
144
+ text_out=f"[bold]\\[{username}][/bold] [bold]\\[Action {title}][/bold] ({post} post checked, {liked} post changes to {action})"
137
145
  progress_utils.remove_like_task(task)
138
-
146
+ progress_utils.remove_like_task(task2)
147
+ log.warning(text_out)
148
+ return text_out
139
149
 
140
150
  def _toggle_like_requests(c, id, model_id):
141
151
 
@@ -1,5 +1,4 @@
1
1
  import logging
2
- import traceback
3
2
 
4
3
  import ofscraper.api.init as init
5
4
  import ofscraper.classes.sessionmanager as sessionManager
@@ -14,11 +13,9 @@ import ofscraper.utils.context.exit as exit
14
13
  import ofscraper.utils.live.screens as progress_utils
15
14
  import ofscraper.utils.profiles.tools as profile_tools
16
15
  from ofscraper.commands.helpers.context import (
17
- get_user_action_execution_function,
18
16
  get_user_action_function,
19
17
  get_userfirst_action_execution_function,
20
18
  get_userfirst_data_function,
21
- user_first_data_inner_context,
22
19
  )
23
20
  from ofscraper.commands.helpers.shared import run_action_bool
24
21
  from ofscraper.commands.scraper.post import post_media_process
@@ -33,7 +30,7 @@ log = logging.getLogger("shared")
33
30
  def runner():
34
31
  check_auth()
35
32
  with scrape_context_manager():
36
- with progress_utils.setup_activity_live(stop=True):
33
+ with progress_utils.setup_activity_group_live(setup=True,revert=False):
37
34
  if read_args.retriveArgs().scrape_paid:
38
35
  progress_utils.update_activity_task(
39
36
  description="Scraping Entire Paid page"
@@ -71,94 +68,62 @@ def prepare():
71
68
  @exit.exit_wrapper
72
69
  @run
73
70
  async def process_users_actions_normal(userdata=None, session=None):
74
- user_action_funct = get_user_action_function(process_actions_for_user)
75
71
  progress_utils.update_user_activity(description="Users with Actions Completed")
76
- async with session as c:
77
- for ele in userdata:
78
- await user_action_funct(user=ele, c=c)
72
+ await get_user_action_function( execute_user_action)(userdata,session)
79
73
 
80
74
 
81
- async def process_actions_for_user(user=None, c=None, *kwargs):
82
- try:
83
- all_media, posts, like_posts = await post_media_process(user, c=c)
84
- await get_user_action_execution_function(execute_user_action)(
85
- all_media, posts, like_posts, ele=user
86
- )
87
- except Exception as e:
88
- if isinstance(e, KeyboardInterrupt):
89
- raise e
90
- log.traceback_(f"failed with exception: {e}")
91
- log.traceback_(traceback.format_exc())
92
-
93
75
 
94
76
  async def execute_user_action(all_media, posts, like_posts, ele=None):
95
77
  actions = read_args.retriveArgs().action
96
78
  username = ele.name
97
79
  model_id = ele.id
80
+ out=[]
98
81
  for action in actions:
99
82
  if action == "download":
100
- await download_action.downloader(
83
+ out.append(await download_action.downloader(
101
84
  ele=ele,
102
85
  posts=posts,
103
86
  media=all_media,
104
87
  model_id=model_id,
105
88
  username=username,
106
- )
89
+ ))
107
90
  elif action == "like":
108
- like_action.process_like(
91
+ out.append(like_action.process_like(
109
92
  ele=ele,
110
93
  posts=like_posts,
111
94
  media=all_media,
112
95
  model_id=model_id,
113
96
  username=username,
114
- )
97
+ ))
115
98
  elif action == "unlike":
116
- like_action.process_unlike(
99
+ out.append(like_action.process_unlike(
117
100
  ele=ele,
118
101
  posts=like_posts,
119
102
  media=all_media,
120
103
  model_id=model_id,
121
104
  username=username,
122
- )
105
+ ))
106
+ return out
123
107
 
124
108
 
125
109
  @exit.exit_wrapper
126
110
  @run
127
111
  async def process_users_actions_user_first(userdata, session):
128
-
129
112
  data = await get_userfirst_data_function(get_users_data_user_first)(
130
113
  userdata, session
131
114
  )
132
-
133
- await get_userfirst_action_execution_function(execute_users_actions_user_first)(
134
- data
135
- )
136
-
137
-
138
- async def execute_users_actions_user_first(data):
139
115
  progress_utils.update_activity_task(description="Performing Actions on Users")
140
116
  progress_utils.update_user_activity(
141
117
  description="Users with Actions completed", completed=0
142
118
  )
143
- for _, val in data.items():
144
- all_media = val["media"]
145
- posts = val["posts"]
146
- like_posts = val["like_posts"]
147
- ele = val["ele"]
148
- await get_user_action_execution_function(execute_user_action)(
149
- all_media, posts, like_posts, ele=ele
150
- )
151
119
 
120
+ await get_userfirst_action_execution_function(execute_user_action)(
121
+ data
122
+ )
152
123
 
153
- async def get_users_data_user_first(session, ele):
154
- try:
155
- return await process_ele_user_first_data_retriver(ele, session)
156
- except Exception as e:
157
- if isinstance(e, KeyboardInterrupt):
158
- raise e
159
- log.traceback_(f"failed with exception: {e}")
160
- log.traceback_(traceback.format_exc())
161
124
 
125
+ async def get_users_data_user_first(session, ele):
126
+ return await process_ele_user_first_data_retriver(ele, session)
162
127
 
163
128
  async def process_ele_user_first_data_retriver(ele, session):
164
129
  model_id = ele.id
@@ -1,8 +1,3 @@
1
-
2
-
3
-
4
-
5
-
6
1
  STABLE_SLEEP_DURATION_LIKE=5
7
2
  SLEEP_DURATION_LIKE_60=1
8
3
  SLEEP_DURATION_LIKE_50=30
@@ -71,7 +71,7 @@ async def batch_database_changes(new_root, old_root, user_dbs=None):
71
71
 
72
72
  except Exception as E:
73
73
  failures.append({"path": str(ele), "reason": E})
74
- log.error(f"Issue getting required info for {ele}")
74
+ log.warning(f"Issue getting required info for {ele}")
75
75
  log.traceback_(E)
76
76
  log.traceback_(traceback.format_exc())
77
77
  log.info(
@@ -13,6 +13,7 @@ import ofscraper.utils.settings as settings
13
13
  import ofscraper.utils.system.system as system
14
14
  from ofscraper.download.shared.utils.text import textDownloader
15
15
  from ofscraper.utils.context.run_async import run
16
+ from ofscraper.download.shared.utils.log import empty_log
16
17
 
17
18
 
18
19
  @run
@@ -26,10 +27,11 @@ async def download_process(username, model_id, medialist, posts=None):
26
27
 
27
28
  async def download_picker(username, model_id, medialist):
28
29
  if len(medialist) == 0:
30
+ out=empty_log(username)
29
31
  logging.getLogger("shared").error(
30
- f"[bold]{username}[/bold] ({0} photos, {0} videos, {0} audios, {0} skipped, {0} failed)"
32
+ out
31
33
  )
32
- return 0, 0, 0, 0, 0
34
+ return out
33
35
  elif (
34
36
  system.getcpu_count() > 1
35
37
  and (
@@ -71,7 +73,4 @@ def download_post_process(username, model_id, medialist, postlist):
71
73
  log.traceback_(traceback.format_exc())
72
74
 
73
75
 
74
- def empty_log(username):
75
- logging.getLogger("shared").error(
76
- f"[bold]{username}[/bold] ({0} photos, {0} videos, {0} audios, {0} skipped, {0} failed)"
77
- )
76
+
@@ -36,7 +36,7 @@ from ofscraper.download.shared.common.general import (
36
36
  get_medialog,
37
37
  subProcessVariableInit,
38
38
  )
39
- from ofscraper.download.shared.utils.log import final_log, log_download_progress
39
+ from ofscraper.download.shared.utils.log import final_log, final_log_text ,log_download_progress
40
40
  from ofscraper.download.shared.utils.metadata import metadata
41
41
  from ofscraper.download.shared.utils.paths import addGlobalDir, setDirectoriesDate
42
42
  from ofscraper.download.shared.utils.progress import convert_num_bytes
@@ -51,7 +51,7 @@ def process_dicts(username, model_id, filtered_medialist):
51
51
  common_globals.log = log
52
52
  live = (
53
53
  partial(progress_utils.setup_download_progress_live, multi=True)
54
- if not metadata_mode
54
+ if not metadata_md
55
55
  else partial(progress_utils.setup_metadata_progress_live)
56
56
  )
57
57
  try:
@@ -199,13 +199,7 @@ def process_dicts(username, model_id, filtered_medialist):
199
199
  with exit.DelayedKeyboardInterrupt():
200
200
  raise E
201
201
  final_log(username)
202
- return (
203
- common_globals.photo_count,
204
- common_globals.video_count,
205
- common_globals.audio_count,
206
- common_globals.forced_skipped,
207
- common_globals.skipped,
208
- )
202
+ return final_log_text(username)
209
203
 
210
204
 
211
205
  def queue_process(pipe_, task1, total):
@@ -29,7 +29,7 @@ from ofscraper.download.alt_download import alt_download
29
29
  from ofscraper.download.main_download import main_download
30
30
  from ofscraper.download.shared.classes.session import download_session
31
31
  from ofscraper.download.shared.common.general import get_medialog
32
- from ofscraper.download.shared.utils.log import final_log, log_download_progress
32
+ from ofscraper.download.shared.utils.log import final_log, final_log_text,log_download_progress
33
33
  from ofscraper.download.shared.utils.metadata import metadata
34
34
  from ofscraper.download.shared.utils.paths import setDirectoriesDate
35
35
  from ofscraper.download.shared.utils.progress import convert_num_bytes
@@ -39,12 +39,12 @@ from ofscraper.utils.context.run_async import run
39
39
  @run
40
40
  async def process_dicts(username, model_id, medialist):
41
41
 
42
- metadata_mode = read_args.retriveArgs().metadata
42
+ metadata_md= read_args.retriveArgs().metadata
43
43
 
44
44
  # This need to be here: https://stackoverflow.com/questions/73599594/asyncio-works-in-python-3-10-but-not-in-python-3-8
45
45
  live = (
46
46
  partial(progress_utils.setup_download_progress_live, multi=False)
47
- if not metadata_mode
47
+ if not metadata_md
48
48
  else partial(progress_utils.setup_metadata_progress_live)
49
49
  )
50
50
 
@@ -148,13 +148,8 @@ async def process_dicts(username, model_id, medialist):
148
148
  log_thread.join()
149
149
  other_thread.join() if other_thread else None
150
150
  final_log(username, log=logging.getLogger("shared"))
151
- return (
152
- common_globals.photo_count,
153
- common_globals.video_count,
154
- common_globals.audio_count,
155
- common_globals.forced_skipped,
156
- common_globals.skipped,
157
- )
151
+ return final_log_text(username)
152
+
158
153
 
159
154
  except Exception as E:
160
155
  with exit.DelayedKeyboardInterrupt():
@@ -57,21 +57,30 @@ downloads total [{common_globals.video_count} videos, {common_globals.audio_coun
57
57
 
58
58
 
59
59
  def final_log(username, log=None):
60
+ (log or common_globals.log).error(
61
+ final_log_text(username)
62
+ )
63
+
64
+ def final_log_text(username):
60
65
 
61
66
  if read_args.retriveArgs().metadata:
62
- skipped_word = "media metadata unchanged"
63
- (log or common_globals.log).error(
64
- f"[bold]{username}[/bold] ({format_size(common_globals.total_bytes )}) ({common_globals.photo_count+common_globals.audio_count+common_globals.video_count}"
65
- f" downloads total [{common_globals.video_count} videos, {common_globals.audio_count} audios, {common_globals.photo_count} photos], "
66
- f"{common_globals.forced_skipped} {skipped_word}, {common_globals.skipped} failed)"
67
- )
67
+ return (f"[bold]\\[{username}][/bold] [bold]\\[Action Download][/bold] ({format_size(common_globals.total_bytes )}) ({common_globals.photo_count+common_globals.audio_count+common_globals.video_count}"
68
+ f" downloads total [{common_globals.video_count} videos, {common_globals.audio_count} audios, {common_globals.photo_count} photos], "
69
+ f"{common_globals.forced_skipped} {skipped_word}, {common_globals.skipped} failed)")
68
70
  else:
69
71
  skipped_word = "skipped"
70
- (log or common_globals.log).error(
71
- f"[bold]{username}[/bold] ({format_size(common_globals.total_bytes )}) ({common_globals.photo_count+common_globals.audio_count+common_globals.video_count}"
72
- f" downloads total [{common_globals.video_count} videos, {common_globals.audio_count} audios, {common_globals.photo_count} photos], "
73
- f"{common_globals.forced_skipped} {skipped_word}, {common_globals.skipped} failed)"
74
- )
72
+ return (f"[bold]\\[{username}][/bold] [bold]\\[Action Download][/bold] ({format_size(common_globals.total_bytes )}) ({common_globals.photo_count+common_globals.audio_count+common_globals.video_count}"
73
+ f" downloads total [{common_globals.video_count} videos, {common_globals.audio_count} audios, {common_globals.photo_count} photos], "
74
+ f"{common_globals.forced_skipped} {skipped_word}, {common_globals.skipped} failed)")
75
+
76
+
77
+ def empty_log(username):
78
+ return f"[bold]\\[{username}][/bold] [bold]\\[Action Download][/bold] ({0} photos, {0} videos, {0} audios, {0} skipped, {0} failed)"
79
+
80
+
81
+
82
+
83
+
75
84
 
76
85
 
77
86
  def text_log(username, value=0, fails=0, exists=0, log=None):
@@ -22,7 +22,7 @@ def sort_by_date(media):
22
22
  return sorted(media, key=lambda x: x.date)
23
23
 
24
24
 
25
- def dupefilter(media):
25
+ def dupefilterMedia(media):
26
26
  output =defaultdict(lambda:None)
27
27
  for item in media:
28
28
  if not output[item.id]:
@@ -32,6 +32,15 @@ def dupefilter(media):
32
32
  return output.values()
33
33
 
34
34
 
35
+ def dupefilterPost(post):
36
+ output =defaultdict(lambda:None)
37
+ for item in post:
38
+ if not output[item.id]:
39
+ output[item.id]=item
40
+ elif item.open and not output[item.id].open:
41
+ output[item.id]=item
42
+ return output.values()
43
+
35
44
  def post_datesorter(output):
36
45
  return list(sorted(output, key=lambda x: x.date, reverse=True))
37
46
 
@@ -69,7 +69,7 @@ def filterMedia(media, username=None, model_id=None):
69
69
 
70
70
  # additional filters
71
71
  if not read_args.retriveArgs().command == "metadata":
72
- media = helpers.dupefilter(media)
72
+ media = helpers.dupefilterMedia(media)
73
73
  count += 1
74
74
  helpers.trace_log_media(count, media, "media dupe media_id filter:")
75
75
  log.debug(f"filter {count}-> media dupe media_id filter count: {len(media)}")
@@ -97,7 +97,7 @@ def filterPost(post):
97
97
  log.debug(f"filter {count}-> post date sort filter count: {len(post)}")
98
98
 
99
99
  count += 1
100
- post = helpers.dupefilter(post)
100
+ post = helpers.dupefilterPost(post)
101
101
  helpers.trace_log_post(count, post, "post dupe filter:")
102
102
  log.debug(f"filter {count}-> post dupe filter count: {len(post)}")
103
103
 
@@ -28,7 +28,7 @@ def get_console():
28
28
  def get_shared_console():
29
29
  global shared_console
30
30
  if not shared_console:
31
- shared_console = Console(theme=theme, quiet=quiet)
31
+ shared_console = Console(theme=theme, quiet=quiet,markup=True)
32
32
 
33
33
  return shared_console
34
34
 
@@ -36,7 +36,7 @@ def get_shared_console():
36
36
  def get_other_console():
37
37
  global other_console
38
38
  if not other_console:
39
- other_console = Console(theme=theme)
39
+ other_console = Console(theme=theme,markup=True)
40
40
  return other_console
41
41
 
42
42
 
@@ -82,7 +82,7 @@ class DelayedKeyboardInterrupt:
82
82
  def exit_wrapper(func):
83
83
  def inner(*args, **kwargs):
84
84
  try:
85
- func(*args, **kwargs)
85
+ return func(*args, **kwargs)
86
86
  except KeyboardInterrupt:
87
87
  with DelayedKeyboardInterrupt():
88
88
  raise KeyboardInterrupt