scraper2-hj3415 2.3.0__tar.gz → 2.4.1__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 (62) hide show
  1. {scraper2_hj3415-2.3.0 → scraper2_hj3415-2.4.1}/PKG-INFO +1 -1
  2. {scraper2_hj3415-2.3.0 → scraper2_hj3415-2.4.1}/pyproject.toml +1 -1
  3. {scraper2_hj3415-2.3.0 → scraper2_hj3415-2.4.1}/src/scraper2/app/composition.py +6 -14
  4. {scraper2_hj3415-2.3.0 → scraper2_hj3415-2.4.1}/src/scraper2/main.py +2 -20
  5. {scraper2_hj3415-2.3.0 → scraper2_hj3415-2.4.1}/LICENSE +0 -0
  6. {scraper2_hj3415-2.3.0 → scraper2_hj3415-2.4.1}/README.md +0 -0
  7. {scraper2_hj3415-2.3.0 → scraper2_hj3415-2.4.1}/src/scraper2/.DS_Store +0 -0
  8. {scraper2_hj3415-2.3.0 → scraper2_hj3415-2.4.1}/src/scraper2/__init__.py +0 -0
  9. {scraper2_hj3415-2.3.0 → scraper2_hj3415-2.4.1}/src/scraper2/adapters/out/.DS_Store +0 -0
  10. {scraper2_hj3415-2.3.0 → scraper2_hj3415-2.4.1}/src/scraper2/adapters/out/__init__.py +0 -0
  11. {scraper2_hj3415-2.3.0 → scraper2_hj3415-2.4.1}/src/scraper2/adapters/out/playwright/__init__.py +0 -0
  12. {scraper2_hj3415-2.3.0 → scraper2_hj3415-2.4.1}/src/scraper2/adapters/out/playwright/browser.py +0 -0
  13. {scraper2_hj3415-2.3.0 → scraper2_hj3415-2.4.1}/src/scraper2/adapters/out/playwright/browser_factory.py +0 -0
  14. {scraper2_hj3415-2.3.0 → scraper2_hj3415-2.4.1}/src/scraper2/adapters/out/playwright/session.py +0 -0
  15. {scraper2_hj3415-2.3.0 → scraper2_hj3415-2.4.1}/src/scraper2/adapters/out/sinks/.DS_Store +0 -0
  16. {scraper2_hj3415-2.3.0 → scraper2_hj3415-2.4.1}/src/scraper2/adapters/out/sinks/memory/__init__.py +0 -0
  17. {scraper2_hj3415-2.3.0 → scraper2_hj3415-2.4.1}/src/scraper2/adapters/out/sinks/memory/c101_memory_sink.py +0 -0
  18. {scraper2_hj3415-2.3.0 → scraper2_hj3415-2.4.1}/src/scraper2/adapters/out/sinks/memory/c103_memory_sink.py +0 -0
  19. {scraper2_hj3415-2.3.0 → scraper2_hj3415-2.4.1}/src/scraper2/adapters/out/sinks/memory/c104_memory_sink.py +0 -0
  20. {scraper2_hj3415-2.3.0 → scraper2_hj3415-2.4.1}/src/scraper2/adapters/out/sinks/memory/c106_memory_sink.py +0 -0
  21. {scraper2_hj3415-2.3.0 → scraper2_hj3415-2.4.1}/src/scraper2/adapters/out/sinks/memory/c108_memory_sink.py +0 -0
  22. {scraper2_hj3415-2.3.0 → scraper2_hj3415-2.4.1}/src/scraper2/adapters/out/sinks/memory/store.py +0 -0
  23. {scraper2_hj3415-2.3.0 → scraper2_hj3415-2.4.1}/src/scraper2/adapters/out/sinks/mongo/__init__.py +0 -0
  24. {scraper2_hj3415-2.3.0 → scraper2_hj3415-2.4.1}/src/scraper2/adapters/out/sinks/mongo/c101_mongo_sink.py +0 -0
  25. {scraper2_hj3415-2.3.0 → scraper2_hj3415-2.4.1}/src/scraper2/adapters/out/sinks/mongo/c103_mongo_sink.py +0 -0
  26. {scraper2_hj3415-2.3.0 → scraper2_hj3415-2.4.1}/src/scraper2/adapters/out/sinks/mongo/c104_mongo_sink.py +0 -0
  27. {scraper2_hj3415-2.3.0 → scraper2_hj3415-2.4.1}/src/scraper2/adapters/out/sinks/mongo/c106_mongo_sink.py +0 -0
  28. {scraper2_hj3415-2.3.0 → scraper2_hj3415-2.4.1}/src/scraper2/adapters/out/sinks/mongo/c108_mongo_sink.py +0 -0
  29. {scraper2_hj3415-2.3.0 → scraper2_hj3415-2.4.1}/src/scraper2/app/__init__.py +0 -0
  30. {scraper2_hj3415-2.3.0 → scraper2_hj3415-2.4.1}/src/scraper2/app/parsing/__init__.py +0 -0
  31. {scraper2_hj3415-2.3.0 → scraper2_hj3415-2.4.1}/src/scraper2/app/parsing/_converters.py +0 -0
  32. {scraper2_hj3415-2.3.0 → scraper2_hj3415-2.4.1}/src/scraper2/app/parsing/_normalize.py +0 -0
  33. {scraper2_hj3415-2.3.0 → scraper2_hj3415-2.4.1}/src/scraper2/app/parsing/c101_parser.py +0 -0
  34. {scraper2_hj3415-2.3.0 → scraper2_hj3415-2.4.1}/src/scraper2/app/parsing/c103_parser.py +0 -0
  35. {scraper2_hj3415-2.3.0 → scraper2_hj3415-2.4.1}/src/scraper2/app/parsing/c104_parser.py +0 -0
  36. {scraper2_hj3415-2.3.0 → scraper2_hj3415-2.4.1}/src/scraper2/app/parsing/c106_parser.py +0 -0
  37. {scraper2_hj3415-2.3.0 → scraper2_hj3415-2.4.1}/src/scraper2/app/parsing/c108_parser.py +0 -0
  38. {scraper2_hj3415-2.3.0 → scraper2_hj3415-2.4.1}/src/scraper2/app/ports/__init__.py +0 -0
  39. {scraper2_hj3415-2.3.0 → scraper2_hj3415-2.4.1}/src/scraper2/app/ports/browser/__init__.py +0 -0
  40. {scraper2_hj3415-2.3.0 → scraper2_hj3415-2.4.1}/src/scraper2/app/ports/browser/browser_factory_port.py +0 -0
  41. {scraper2_hj3415-2.3.0 → scraper2_hj3415-2.4.1}/src/scraper2/app/ports/browser/browser_port.py +0 -0
  42. {scraper2_hj3415-2.3.0 → scraper2_hj3415-2.4.1}/src/scraper2/app/ports/ingest_port.py +0 -0
  43. {scraper2_hj3415-2.3.0 → scraper2_hj3415-2.4.1}/src/scraper2/app/ports/sinks/__init__.py +0 -0
  44. {scraper2_hj3415-2.3.0 → scraper2_hj3415-2.4.1}/src/scraper2/app/ports/sinks/base_sink_port.py +0 -0
  45. {scraper2_hj3415-2.3.0 → scraper2_hj3415-2.4.1}/src/scraper2/app/ports/sinks/c101_sink_port.py +0 -0
  46. {scraper2_hj3415-2.3.0 → scraper2_hj3415-2.4.1}/src/scraper2/app/ports/sinks/c103_sink_port.py +0 -0
  47. {scraper2_hj3415-2.3.0 → scraper2_hj3415-2.4.1}/src/scraper2/app/ports/sinks/c104_sink_port.py +0 -0
  48. {scraper2_hj3415-2.3.0 → scraper2_hj3415-2.4.1}/src/scraper2/app/ports/sinks/c106_sink_port.py +0 -0
  49. {scraper2_hj3415-2.3.0 → scraper2_hj3415-2.4.1}/src/scraper2/app/ports/sinks/c108_sink_port.py +0 -0
  50. {scraper2_hj3415-2.3.0 → scraper2_hj3415-2.4.1}/src/scraper2/app/usecases/__init__.py +0 -0
  51. {scraper2_hj3415-2.3.0 → scraper2_hj3415-2.4.1}/src/scraper2/app/usecases/fetch/__init__.py +0 -0
  52. {scraper2_hj3415-2.3.0 → scraper2_hj3415-2.4.1}/src/scraper2/app/usecases/fetch/fetch_c101.py +0 -0
  53. {scraper2_hj3415-2.3.0 → scraper2_hj3415-2.4.1}/src/scraper2/app/usecases/fetch/fetch_c103.py +0 -0
  54. {scraper2_hj3415-2.3.0 → scraper2_hj3415-2.4.1}/src/scraper2/app/usecases/fetch/fetch_c104.py +0 -0
  55. {scraper2_hj3415-2.3.0 → scraper2_hj3415-2.4.1}/src/scraper2/app/usecases/fetch/fetch_c106.py +0 -0
  56. {scraper2_hj3415-2.3.0 → scraper2_hj3415-2.4.1}/src/scraper2/app/usecases/fetch/fetch_c108.py +0 -0
  57. {scraper2_hj3415-2.3.0 → scraper2_hj3415-2.4.1}/src/scraper2/app/usecases/ingest/__init__.py +0 -0
  58. {scraper2_hj3415-2.3.0 → scraper2_hj3415-2.4.1}/src/scraper2/app/usecases/ingest/ingest_c101.py +0 -0
  59. {scraper2_hj3415-2.3.0 → scraper2_hj3415-2.4.1}/src/scraper2/app/usecases/ingest/ingest_c103.py +0 -0
  60. {scraper2_hj3415-2.3.0 → scraper2_hj3415-2.4.1}/src/scraper2/app/usecases/ingest/ingest_c104.py +0 -0
  61. {scraper2_hj3415-2.3.0 → scraper2_hj3415-2.4.1}/src/scraper2/app/usecases/ingest/ingest_c106.py +0 -0
  62. {scraper2_hj3415-2.3.0 → scraper2_hj3415-2.4.1}/src/scraper2/app/usecases/ingest/ingest_c108.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: scraper2-hj3415
3
- Version: 2.3.0
3
+ Version: 2.4.1
4
4
  Summary: Naver WiseReport scraper
5
5
  Keywords: example,demo
6
6
  Author-email: Hyungjin Kim <hj3415@gmail.com>
@@ -4,7 +4,7 @@ build-backend = "flit_core.buildapi"
4
4
 
5
5
  [project]
6
6
  name = "scraper2-hj3415" # PyPI 이름 (하이픈 허용)
7
- version = "2.3.0"
7
+ version = "2.4.1"
8
8
  description = "Naver WiseReport scraper"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -112,21 +112,11 @@ class Usecases:
112
112
  browser_factory: Optional[BrowserFactoryPort] = None
113
113
 
114
114
  async def aclose(self) -> None:
115
- # 1) playwright 먼저 닫기 (subprocess 정리)
116
115
  if self.browser_factory is not None:
117
- close = getattr(self.browser_factory, "aclose", None)
118
- if callable(close):
119
- await close()
116
+ await self.browser_factory.aclose()
120
117
 
121
- # 2) mongo 닫기
122
118
  if self.mongo is not None:
123
- close = getattr(self.mongo, "close", None)
124
- if callable(close):
125
- out = close()
126
- if hasattr(out, "__await__"):
127
- await out
128
-
129
-
119
+ await self.mongo.close()
130
120
 
131
121
  # -------------------------
132
122
  # builders
@@ -202,11 +192,13 @@ def build_usecases(
202
192
  if sink_kind == "memory":
203
193
  bundle = build_memory_bundle()
204
194
  ingest = build_ingest_usecases(fetch=fetch, sinks=bundle.sinks)
205
- return Usecases(fetch=fetch, ingest=ingest, sinks=bundle.sinks, store=bundle.store)
195
+ return Usecases(fetch=fetch, ingest=ingest, sinks=bundle.sinks, store=bundle.store,
196
+ browser_factory=factory)
206
197
 
207
198
  if sink_kind == "mongo":
208
199
  bundle = build_mongo_bundle()
209
200
  ingest = build_ingest_usecases(fetch=fetch, sinks=bundle.sinks)
210
- return Usecases(fetch=fetch, ingest=ingest, sinks=bundle.sinks, mongo=bundle.mongo, db=bundle.db)
201
+ return Usecases(fetch=fetch, ingest=ingest, sinks=bundle.sinks, mongo=bundle.mongo, db=bundle.db,
202
+ browser_factory=factory)
211
203
 
212
204
  raise ValueError(f"Unknown sink_kind: {sink_kind}")
@@ -33,16 +33,6 @@ app.add_typer(mi_app, name="mi")
33
33
  def _endpoint_list(ep: Endpoint) -> list[str]:
34
34
  return ["c101", "c103", "c104", "c106", "c108"] if ep == "all" else [ep]
35
35
 
36
-
37
- async def _maybe_await_close(obj: Any) -> None:
38
- close = getattr(obj, "close", None)
39
- if close is None:
40
- return
41
- out = close()
42
- if asyncio.iscoroutine(out):
43
- await out
44
-
45
-
46
36
  async def _mongo_bootstrap(db) -> None:
47
37
  from db2.nfs import ensure_indexes
48
38
  from db2.settings import get_settings
@@ -233,11 +223,7 @@ def nfs_one(
233
223
  else:
234
224
  typer.echo(_dto_to_pretty(dto))
235
225
  finally:
236
- close = getattr(ucs, "aclose", None)
237
- if callable(close):
238
- await close()
239
- elif getattr(ucs, "mongo", None) is not None:
240
- await _maybe_await_close(ucs.mongo)
226
+ await ucs.aclose()
241
227
 
242
228
  asyncio.run(_run())
243
229
 
@@ -284,11 +270,7 @@ def nfs_all(
284
270
  progress_every=1, # chunk마다
285
271
  )
286
272
  finally:
287
- close = getattr(ucs, "aclose", None)
288
- if callable(close):
289
- await close()
290
- elif getattr(ucs, "mongo", None) is not None:
291
- await _maybe_await_close(ucs.mongo)
273
+ await ucs.aclose()
292
274
 
293
275
  asyncio.run(_run())
294
276
 
File without changes