db2_hj3415 0.1.9__py2.py3-none-any.whl → 0.1.10__py2.py3-none-any.whl

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.
db2_hj3415/nfs/_ops.py CHANGED
@@ -1,3 +1,5 @@
1
+ from typing import Literal
2
+
1
3
  from motor.motor_asyncio import AsyncIOMotorClient
2
4
  from db2_hj3415.nfs import DB_NAME, connection
3
5
  from db2_hj3415.nfs.models import CodeName
@@ -48,20 +50,20 @@ def get_all_codes_sync() -> list[str]:
48
50
  connection.close_mongo_client_sync()
49
51
 
50
52
 
51
- async def get_all_codes_names(client: AsyncIOMotorClient) -> list[CodeName]:
53
+ async def get_all_codes_names(client: AsyncIOMotorClient, sort_by:Literal['종목명', '코드']='종목명') -> list[CodeName]:
52
54
  collection = client[DB_NAME]['c101']
53
- cursor = collection.find({}, {"코드": 1, "종목명": 1, "_id": 0})
55
+ cursor = collection.find({}, {"코드": 1, "종목명": 1, "_id": 0}).sort(sort_by, 1)
54
56
  result = []
55
57
  async for doc in cursor:
56
58
  result.append(CodeName(**doc))
57
59
  return result
58
60
 
59
61
 
60
- def get_all_codes_names_sync() -> list[CodeName] | None:
62
+ def get_all_codes_names_sync(sort_by:Literal['종목명', '코드']='종목명') -> list[CodeName] | None:
61
63
  client = connection.get_mongo_client_sync()
62
64
  try:
63
65
  collection = client[DB_NAME]['c101']
64
- cursor = collection.find({}, {"코드": 1, "종목명": 1, "_id": 0})
66
+ cursor = collection.find({}, {"코드": 1, "종목명": 1, "_id": 0}).sort(sort_by, 1)
65
67
  return [CodeName(**doc) for doc in cursor]
66
68
  finally:
67
69
  connection.close_mongo_client_sync()
db2_hj3415/nfs/c108.py CHANGED
@@ -75,14 +75,14 @@ async def save_many(many_data: dict[str, pd.DataFrame], client: AsyncIOMotorClie
75
75
  return total_result
76
76
 
77
77
 
78
- async def get_latest(code: str, client: AsyncIOMotorClient, days:int = 30) -> list[C108]:
78
+ async def get_latest(code: str, client: AsyncIOMotorClient, days:int = 60) -> list[C108]:
79
79
  """
80
80
  최근 N일 이내의 C108 리포트 도큐먼트를 조회합니다.
81
81
 
82
82
  Args:
83
83
  code (str): 종목 코드 (예: "005930").
84
84
  client (AsyncIOMotorClient): 비동기 MongoDB 클라이언트.
85
- days (int, optional): 현재 시점에서 며칠 전까지의 데이터를 조회할지 설정합니다. 기본값은 30일.
85
+ days (int, optional): 현재 시점에서 며칠 전까지의 데이터를 조회할지 설정합니다. 기본값은 60일.
86
86
 
87
87
  Returns:
88
88
  list[C108]: 조건에 해당하는 C108 도큐먼트 리스트. 일치하는 문서가 없을 경우 빈 리스트를 반환합니다.
db2_hj3415/nfs/dart.py CHANGED
@@ -1,6 +1,7 @@
1
1
  from motor.motor_asyncio import AsyncIOMotorClient
2
- from pymongo import InsertOne
2
+ from pymongo import InsertOne, DESCENDING
3
3
  from db2_hj3415.nfs import Dart, DB_NAME, get_collection
4
+ from datetime import datetime, timezone, timedelta
4
5
 
5
6
  COL_NAME = "dart"
6
7
 
@@ -25,3 +26,76 @@ async def save_many(many_data: list[Dart], client: AsyncIOMotorClient) -> dict:
25
26
  return {"inserted_count": result.inserted_count, "skipped": skipped}
26
27
  except Exception as e:
27
28
  return {"error": str(e)}
29
+
30
+
31
+ async def get_data_last_n_days(code: str, client: AsyncIOMotorClient, days:int = 30) -> list[Dart]:
32
+ """
33
+ 지정한 종목 코드(code)에 대해 최근 N일(days) 동안의 DART 데이터를 비동기로 조회합니다.
34
+
35
+ MongoDB 컬렉션에서 날짜 기준으로 N일 이전(cutoff) 이후의 문서들을 조회하며,
36
+ 결과는 최신 날짜순(DESCENDING)으로 정렬됩니다.
37
+
38
+ Parameters:
39
+ code (str): 조회할 종목 코드 (예: '005930').
40
+ client (AsyncIOMotorClient): 비동기 MongoDB 클라이언트.
41
+ days (int, optional): 며칠 전까지의 데이터를 가져올지 설정 (기본값: 30일).
42
+
43
+ Returns:
44
+ list[Dart]: Dart Pydantic 모델의 리스트. 데이터가 없으면 빈 리스트 반환.
45
+ """
46
+ collection = get_collection(client, DB_NAME, COL_NAME)
47
+ now = datetime.now(timezone.utc)
48
+ cutoff = now - timedelta(days=days)
49
+
50
+ cursor = collection.find(
51
+ {
52
+ "코드": code,
53
+ "날짜": {"$gte": cutoff}
54
+ }
55
+ ).sort("날짜", DESCENDING)
56
+
57
+ docs = await cursor.to_list(length=None)
58
+ if not docs:
59
+ return []
60
+ else:
61
+ darts = []
62
+ for doc in docs:
63
+ doc["_id"] = str(doc["_id"])
64
+ darts.append(Dart(**doc))
65
+ return darts
66
+
67
+
68
+ async def get_data_today(client: AsyncIOMotorClient) -> list[Dart]:
69
+ """
70
+ 오늘 날짜의 DART 데이터를 비동기로 조회합니다.
71
+
72
+ MongoDB 컬렉션에서 오늘 날짜에 해당하는 모든 종목의 문서를 조회하며,
73
+ 결과는 '날짜' 필드를 기준으로 내림차순 정렬됩니다.
74
+
75
+ Parameters:
76
+ client (AsyncIOMotorClient): 비동기 MongoDB 클라이언트.
77
+
78
+ Returns:
79
+ List[Dart]: Dart Pydantic 모델의 리스트. 없으면 빈 리스트.
80
+ """
81
+ collection = get_collection(client, DB_NAME, COL_NAME)
82
+
83
+ # 오늘 00:00 ~ 내일 00:00 사이의 UTC 기준
84
+ now = datetime.now(timezone.utc)
85
+ start_of_day = datetime(now.year, now.month, now.day, tzinfo=timezone.utc)
86
+ start_of_next_day = start_of_day + timedelta(days=1)
87
+
88
+ cursor = collection.find(
89
+ {
90
+ "날짜": {
91
+ "$gte": start_of_day,
92
+ "$lt": start_of_next_day
93
+ }
94
+ }
95
+ ).sort("날짜", DESCENDING)
96
+
97
+ docs = await cursor.to_list(length=None)
98
+ if not docs:
99
+ return []
100
+
101
+ return [Dart(**{**doc, "_id": str(doc["_id"])}) for doc in docs]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: db2_hj3415
3
- Version: 0.1.9
3
+ Version: 0.1.10
4
4
  Summary: Gathering the stock data by playwright
5
5
  Author-email: Hyungjin Kim <hj3415@gmail.com>
6
6
  Description-Content-Type: text/markdown
@@ -20,13 +20,13 @@ db2_hj3415/mi/usdkrw.py,sha256=QjcHqFSpSgyzI5lzRfYycNUzolzM-ikOvPDFy4FPadM,876
20
20
  db2_hj3415/mi/wti.py,sha256=wMoS5yHGOlUS2b2P7Eok5U_59eehYXQGfqWa56J_dkk,768
21
21
  db2_hj3415/nfs/__init__.py,sha256=JA3ZZHIKFTzDkRp2DC_WCBocotjU5ZlNTFT3JrastXI,230
22
22
  db2_hj3415/nfs/_c10346.py,sha256=9cb6yZp5ZfPY5JZO7_4BuHiV_md4yDrM3XFrUf7oH5g,9392
23
- db2_hj3415/nfs/_ops.py,sha256=a6p0pxW805aaKETM-w9I6p5g7PP22QT1U4DQfgJkF0c,2519
23
+ db2_hj3415/nfs/_ops.py,sha256=oJW86wMxLrfbxv-1qlrtJDk-vKoJ8L-k4YSR-N7sLRw,2683
24
24
  db2_hj3415/nfs/c101.py,sha256=5gndh6OAQPHc6cvBBnBqdfHuMt34oEoFaXFOdCRv62I,5077
25
25
  db2_hj3415/nfs/c103.py,sha256=HfbknyRcC7-mKF5vnZzlHnESl9fBRwoIEZ_WCy6-tsM,1864
26
26
  db2_hj3415/nfs/c104.py,sha256=yYV2dxble1pXx4f_X7q6bKY54WDHgJ3btTbvX0C3Mik,1864
27
27
  db2_hj3415/nfs/c106.py,sha256=lzbMROOQ-w1AU8oeSYsYFhYuk0EuOux97CKuJrWhx1A,1864
28
- db2_hj3415/nfs/c108.py,sha256=F_kP1HMhpe9E6VKm_m-aDl6PZ-FqVs5-O2_-rU8f34Y,3761
29
- db2_hj3415/nfs/dart.py,sha256=yaqs7Qt8AYzbKWdPSNsaryOBOpVmNudTooBEaj2N-aY,876
28
+ db2_hj3415/nfs/c108.py,sha256=WvT7Fs-BOd0nm_aZGWI4g8Kyo-fFu1dUP7QYyTL87tk,3761
29
+ db2_hj3415/nfs/dart.py,sha256=vVDP2ee5akaoR_m17eN4PxVxxfg5K77TLxVXzQ9ZLyU,3392
30
30
  db2_hj3415/nfs/models.py,sha256=Y5FgSiB_BPzX5hY8RLWAFSXCl22LTECTi6RJAtXbaMU,5005
31
31
  db2_hj3415/valuation/__init__.py,sha256=SxzWnyeo412A6q7yqYHtQz0Qv-haoAN6qr5Q4h2NRqw,274
32
32
  db2_hj3415/valuation/_ops.py,sha256=NuTtlLo30lGaiTPHKJP81yP8nfifFvEneCUUjChhLlQ,2480
@@ -35,7 +35,7 @@ db2_hj3415/valuation/growth.py,sha256=bpixczYpGx6cfb2ChsZXM8YkNDrHMaNWdkuMyPZuld
35
35
  db2_hj3415/valuation/mil.py,sha256=kOc9MYrzHYTL7oBSOI95gTD2Edu3H2yOd3R-0qdaH8c,480
36
36
  db2_hj3415/valuation/models.py,sha256=fBmWhtdUE56E7AaFs-04aw4WC8ptm-Thl_IX7Yex0js,5592
37
37
  db2_hj3415/valuation/red.py,sha256=YV3uavn0A6-T5fk5YiD5MdpC2XhjZMN1mP-e2n_VJrs,481
38
- db2_hj3415-0.1.9.dist-info/entry_points.txt,sha256=JAGFsxKtvbNgaKCSKo-QRYwCyToabWmdRW0MZWtg9kg,45
39
- db2_hj3415-0.1.9.dist-info/WHEEL,sha256=Dyt6SBfaasWElUrURkknVFAZDHSTwxg3PaTza7RSbkY,100
40
- db2_hj3415-0.1.9.dist-info/METADATA,sha256=fLFeHOr2kGOTyrbnIHVIqTbYhVFm_7QYUIaNaxqVg-Q,688
41
- db2_hj3415-0.1.9.dist-info/RECORD,,
38
+ db2_hj3415-0.1.10.dist-info/entry_points.txt,sha256=JAGFsxKtvbNgaKCSKo-QRYwCyToabWmdRW0MZWtg9kg,45
39
+ db2_hj3415-0.1.10.dist-info/WHEEL,sha256=Dyt6SBfaasWElUrURkknVFAZDHSTwxg3PaTza7RSbkY,100
40
+ db2_hj3415-0.1.10.dist-info/METADATA,sha256=nTnOhMzON77D0gN7YMDOSOE4SVAqa1BgV8X3AuRUTiE,689
41
+ db2_hj3415-0.1.10.dist-info/RECORD,,