bhfutils 0.2.6__tar.gz → 0.2.7__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 (115) hide show
  1. {bhfutils-0.2.6 → bhfutils-0.2.7}/PKG-INFO +1 -1
  2. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/crawler/pipelines.py +20 -5
  3. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/crawler/settings_template.py +4 -0
  4. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils.egg-info/PKG-INFO +1 -1
  5. {bhfutils-0.2.6 → bhfutils-0.2.7}/setup.py +1 -1
  6. {bhfutils-0.2.6 → bhfutils-0.2.7}/MANIFEST.in +0 -0
  7. {bhfutils-0.2.6 → bhfutils-0.2.7}/README.rst +0 -0
  8. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/__init__.py +0 -0
  9. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/crawler/__init__.py +0 -0
  10. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/crawler/bhf_signals.py +0 -0
  11. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/crawler/config/__init__.py +0 -0
  12. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/crawler/config/file_pusher.py +0 -0
  13. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/crawler/custom_cookies.py +0 -0
  14. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/crawler/distributed_scheduler.py +0 -0
  15. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/crawler/expire.py +0 -0
  16. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/crawler/items.py +0 -0
  17. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/crawler/log_retry_middleware.py +0 -0
  18. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/crawler/meta_passthrough_middleware.py +0 -0
  19. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/crawler/playwright/__init__.py +0 -0
  20. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/crawler/playwright/cursor/__init__.py +0 -0
  21. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/crawler/playwright/cursor/do_async/__init__.py +0 -0
  22. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/crawler/playwright/cursor/do_async/_mouse_helper.py +0 -0
  23. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/crawler/playwright/cursor/do_async/_spoof.py +0 -0
  24. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/crawler/playwright/cursor/do_sync/__init__.py +0 -0
  25. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/crawler/playwright/cursor/do_sync/_mouse_helper.py +0 -0
  26. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/crawler/playwright/cursor/do_sync/_spoof.py +0 -0
  27. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/crawler/playwright/cursor/js/mouseHelper.js +0 -0
  28. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/crawler/playwright/cursor/shared/__init__.py +0 -0
  29. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/crawler/playwright/cursor/shared/math.py +0 -0
  30. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/crawler/playwright/cursor/shared/spoof.py +0 -0
  31. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/crawler/playwright/handler.py +0 -0
  32. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/crawler/playwright/headers.py +0 -0
  33. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/crawler/playwright/js/__init__.py +0 -0
  34. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/crawler/playwright/js/chrome.app.js +0 -0
  35. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/crawler/playwright/js/chrome.csi.js +0 -0
  36. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/crawler/playwright/js/chrome.loadtimes.js +0 -0
  37. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/crawler/playwright/js/chrome.runtime.js +0 -0
  38. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/crawler/playwright/js/hairline.js +0 -0
  39. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/crawler/playwright/js/iframe.contentWindow.js +0 -0
  40. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/crawler/playwright/js/magic-arrays.js +0 -0
  41. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/crawler/playwright/js/media.codecs.js +0 -0
  42. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/crawler/playwright/js/navigator.deviceMemory.js +0 -0
  43. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/crawler/playwright/js/navigator.hardwareConcurrency.js +0 -0
  44. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/crawler/playwright/js/navigator.languages.js +0 -0
  45. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/crawler/playwright/js/navigator.permissions.js +0 -0
  46. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/crawler/playwright/js/navigator.platform.js +0 -0
  47. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/crawler/playwright/js/navigator.plugins.js +0 -0
  48. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/crawler/playwright/js/navigator.userAgent.js +0 -0
  49. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/crawler/playwright/js/navigator.vendor.js +0 -0
  50. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/crawler/playwright/js/navigator.webdriver.js +0 -0
  51. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/crawler/playwright/js/screen.touch.js +0 -0
  52. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/crawler/playwright/js/user-agent-override.js +0 -0
  53. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/crawler/playwright/js/utils.js +0 -0
  54. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/crawler/playwright/js/webgl.vendor.js +0 -0
  55. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/crawler/playwright/js/window.dimensions.js +0 -0
  56. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/crawler/playwright/page.py +0 -0
  57. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/crawler/playwright/stealth.py +0 -0
  58. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/crawler/policy.py +0 -0
  59. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/crawler/proxy_rotate.py +0 -0
  60. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/crawler/redis_domain_max_page_filter.py +0 -0
  61. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/crawler/redis_dupefilter.py +0 -0
  62. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/crawler/redis_global_page_per_domain_filter.py +0 -0
  63. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/crawler/redis_retry_middleware.py +0 -0
  64. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/crawler/redis_stats_middleware.py +0 -0
  65. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/crawler/spiders/__init__.py +0 -0
  66. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/crawler/spiders/redis_spider.py +0 -0
  67. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/crawler/tests/__init__.py +0 -0
  68. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/crawler/tests/online.py +0 -0
  69. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/crawler/tests/test_distributed_scheduler.py +0 -0
  70. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/crawler/tests/test_link_spider.py +0 -0
  71. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/crawler/tests/test_log_retry_middleware.py +0 -0
  72. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/crawler/tests/test_meta_passthrough_middleware.py +0 -0
  73. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/crawler/tests/test_pipelines.py +0 -0
  74. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/crawler/tests/test_redis_dupefilter.py +0 -0
  75. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/crawler/tests/test_redis_page_limit_filters.py +0 -0
  76. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/crawler/tests/test_redis_retry_middleware.py +0 -0
  77. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/crawler/tests/test_redis_stats_middleware.py +0 -0
  78. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/crawler/tests/test_wandering_spider.py +0 -0
  79. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/examples/__init__.py +0 -0
  80. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/examples/example_ah.py +0 -0
  81. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/examples/example_lf.py +0 -0
  82. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/examples/example_mt.py +0 -0
  83. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/examples/example_rq.py +0 -0
  84. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/examples/example_rtq.py +0 -0
  85. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/examples/example_sc.py +0 -0
  86. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/examples/example_sw.py +0 -0
  87. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/examples/example_zw.py +0 -0
  88. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/scutils/__init__.py +0 -0
  89. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/scutils/argparse_helper.py +0 -0
  90. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/scutils/log_factory.py +0 -0
  91. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/scutils/method_timer.py +0 -0
  92. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/scutils/redis_queue.py +0 -0
  93. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/scutils/redis_throttled_queue.py +0 -0
  94. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/scutils/settings_wrapper.py +0 -0
  95. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/scutils/stats_collector.py +0 -0
  96. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/scutils/zookeeper_watcher.py +0 -0
  97. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/tests/__init__.py +0 -0
  98. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/tests/default_settings.py +0 -0
  99. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/tests/online.py +0 -0
  100. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/tests/override_defaults.py +0 -0
  101. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/tests/test_argparse_helper.py +0 -0
  102. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/tests/test_log_factory.py +0 -0
  103. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/tests/test_method_timer.py +0 -0
  104. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/tests/test_redis_queue.py +0 -0
  105. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/tests/test_redis_throttled_queue.py +0 -0
  106. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/tests/test_settings_wrapper.py +0 -0
  107. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/tests/test_stats_collector.py +0 -0
  108. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/tests/test_zookeeper_watcher.py +0 -0
  109. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils/tests/throttled_queue.py +0 -0
  110. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils.egg-info/SOURCES.txt +0 -0
  111. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils.egg-info/dependency_links.txt +0 -0
  112. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils.egg-info/requires.txt +0 -0
  113. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils.egg-info/top_level.txt +0 -0
  114. {bhfutils-0.2.6 → bhfutils-0.2.7}/bhfutils.egg-info/zip-safe +0 -0
  115. {bhfutils-0.2.6 → bhfutils-0.2.7}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bhfutils
3
- Version: 0.2.6
3
+ Version: 0.2.7
4
4
  Summary: Utilities that are used by any spider of Behoof project
5
5
  Home-page: https://behoof.app/
6
6
  Author: Teplygin Vladimir
@@ -131,14 +131,29 @@ class KafkaPipeline(object):
131
131
  # falls back to the system trust store. Set it only for a private CA.
132
132
  producer_kwargs['ssl_cafile'] = settings.get('KAFKA_SSL_CAFILE')
133
133
 
134
+ # Only passed when set explicitly, so the client keeps its own default: on for
135
+ # kafka-python 3.x, absent in 2.x. Verified working against the 3.4.1 broker
136
+ # both ways, so there is no reason to force either.
137
+ enable_idempotence = settings.get('KAFKA_PRODUCER_ENABLE_IDEMPOTENCE')
138
+ if enable_idempotence is not None and 'enable_idempotence' in KafkaProducer.DEFAULT_CONFIG:
139
+ producer_kwargs['enable_idempotence'] = enable_idempotence
140
+
141
+ # Tuning options come and go between client releases - kafka-python 3.x dropped
142
+ # buffer_memory, for one - and an unknown key makes the constructor fail outright.
143
+ # Drop what this client does not know about instead, and say so.
144
+ for key in [k for k in producer_kwargs if k not in KafkaProducer.DEFAULT_CONFIG]:
145
+ logger.warning("Kafka client does not support setting, ignoring it",
146
+ extra={'setting': key})
147
+ producer_kwargs.pop(key)
148
+
134
149
  try:
135
150
  producer = KafkaProducer(**producer_kwargs)
136
151
  except Exception as e:
137
- logger.error("Unable to connect to Kafka in Pipeline"", raising exit flag.")
138
- # this is critical so we choose to exit.
139
- # exiting because this is a different thread from the crawlers
140
- # and we want to ensure we can connect to Kafka when we boot
141
- sys.exit(1)
152
+ # Raise rather than sys.exit(): this runs inside the Twisted reactor while
153
+ # Scrapy builds the pipelines, where SystemExit leaves the process hanging
154
+ # with nothing in the crawl log. An exception aborts the crawl visibly.
155
+ logger.error("Unable to connect to Kafka in Pipeline", extra={'error': str(e)})
156
+ raise
142
157
  topic_prefix = settings['KAFKA_TOPIC_PREFIX']
143
158
  use_base64 = settings['KAFKA_BASE_64_ENCODE']
144
159
 
@@ -32,6 +32,10 @@ KAFKA_SASL_PASSWORD = None
32
32
  # Only needed for a certificate from a private CA; leave None for a public one.
33
33
  KAFKA_SSL_CAFILE = None
34
34
 
35
+ # Leave None to keep whatever the installed kafka-python defaults to. Set True or False
36
+ # only to override it deliberately.
37
+ KAFKA_PRODUCER_ENABLE_IDEMPOTENCE = None
38
+
35
39
  ZOOKEEPER_ASSIGN_PATH = '/scrapy-cluster/crawler/'
36
40
  ZOOKEEPER_ID = 'all'
37
41
  ZOOKEEPER_HOSTS = 'localhost:2181'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bhfutils
3
- Version: 0.2.6
3
+ Version: 0.2.7
4
4
  Summary: Utilities that are used by any spider of Behoof project
5
5
  Home-page: https://behoof.app/
6
6
  Author: Teplygin Vladimir
@@ -43,7 +43,7 @@ if 'nosetests' in sys.argv[1:]:
43
43
 
44
44
  setup(
45
45
  name='bhfutils',
46
- version='0.2.6',
46
+ version='0.2.7',
47
47
  description='Utilities that are used by any spider of Behoof project',
48
48
  long_description=readme(),
49
49
  long_description_content_type='text/x-rst',
File without changes
File without changes
File without changes
File without changes