analyser_hj3415 2.0.0__tar.gz

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2024 Hyungjin Kim
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
@@ -0,0 +1,232 @@
1
+ Metadata-Version: 2.1
2
+ Name: analyser_hj3415
3
+ Version: 2.0.0
4
+ Summary: Stock analyser and database processing programs
5
+ Author-email: Hyungjin Kim <hj3415@gmail.com>
6
+ Description-Content-Type: text/markdown
7
+ Classifier: License :: OSI Approved :: MIT License
8
+ Requires-Dist: pandas>=2.2.2
9
+ Requires-Dist: pymongo>=4.8.0
10
+ Requires-Dist: sqlalchemy>=2.0.31
11
+ Requires-Dist: utils-hj3415>=2.0.1
12
+ Requires-Dist: scraper2-hj3415>=0.4.0
13
+ Project-URL: Home, https://www.hyungjin.kr
14
+
15
+ ### analyser-hj3415
16
+
17
+ #### Introduction
18
+ analyser_hj3415 manage the database.
19
+
20
+ ---
21
+ #### Requirements
22
+
23
+ scrapy>=2.11.2
24
+ pandas>=2.2.2
25
+ sqlalchemy>=2.0.31
26
+ selenium>=4.22.0
27
+ utils-hj3415>=2.0.1
28
+ analyser_hj3415>=0.3.5
29
+
30
+ ---
31
+ #### API
32
+
33
+ ---
34
+ #### Install
35
+
36
+
37
+ ---
38
+ #### Composition
39
+ analyser_hj3415 모듈은 세가지 파트로 구성되어 있습니다.
40
+
41
+ 1. setting 모듈
42
+ setting 모듈은 데이터베이스를 활성화하고 주소를 설정하는 역할을 합니다.
43
+ 데이터베이스의 주소와 활성화 여부를 파일에 저장합니다.
44
+
45
+ ```python
46
+ from analyser_hj3415 import setting
47
+
48
+ # 현재 데이터 베이스 상태를 DbSetting 클래스 형식으로 반환한다.
49
+ db_setting = setting.load_df()
50
+
51
+ # 현재 데이터베이스 상태 출력
52
+ print(db_setting)
53
+
54
+ # 몽고db 주소 변경 (2가지 방식)
55
+ setting.chg_mongo_addr('mongodb://192.168.0.173:27017')
56
+ db_setting.mongo_addr = 'mongodb://192.168.0.173:27017'
57
+
58
+ # sqlite3 주소 변경 (2가지 방식)
59
+ setting.chg_sqlite3_path('/home/hj3415/Stock/_db')
60
+ db_setting.sqlite3_path = '/home/hj3415/Stock/_db'
61
+
62
+ # 데이터베이스를 기본값으로 설정합니다.
63
+ # DEF_MONGO_ADDR = 'mongodb://localhost:27017'
64
+ # DEF_WIN_SQLITE3_PATH = 'C:\\_db'
65
+ # DEF_LINUX_SQLITE3_PATH = '/home/hj3415/Stock/_db'
66
+ setting.set_default()
67
+
68
+ # 각 데이터베이스 사용 설정
69
+ setting.turn_on_mongo()
70
+ setting.turn_off_mongo()
71
+ setting.turn_off_sqlite3()
72
+ setting.turn_on_sqlite3()
73
+ ```
74
+
75
+ 2. mongo 모듈
76
+ 몽고db를 데이터베이스로 사용할 경우를 위한 함수들의 모듈입니다.
77
+ 현재는 몽고db를 비활성화 할 경우 올바로 작동하지 않기 때문에 디폴트 데이터베이스 입니다.
78
+
79
+ 1) Base 클래스
80
+
81
+ 모든 데이터베이스 클래스의 기반 클래스로 실제 직접 사용하지 않음.
82
+
83
+ ```python
84
+ from analyser_hj3415.mongo import Base
85
+ base = Base(db='mi', col='kospi')
86
+
87
+ # db 주소를 변경함. 단 파일에 저장되는 것이 아니라 클래스 내부에서 일시적으로 설정하는 것임
88
+ base.chg_addr('mongodb://192.168.0.173:27017')
89
+
90
+ # 현재 설정된 db 주소, db 명, 컬렉션을 반환함.
91
+ base.get_status()
92
+ # ('mongodb://192.168.0.173:27017', 'mi', 'kospi')
93
+
94
+ # 데이터 베이스 관리 함수
95
+ base.get_all_db()
96
+ ```
97
+
98
+ 2 - 1) Corps 클래스
99
+
100
+ DB 내에서 종목에 관련된 기반클래스로 db명은 6자리 숫자 코드명임.
101
+
102
+ ```python
103
+ from analyser_hj3415.mongo import Corps
104
+
105
+ corps = Corps(code='005930', page='c101')
106
+
107
+ # 코드를 변경함. 6자리 숫자인지 확인 후 설정함.
108
+ corps.chg_code('005490')
109
+
110
+ # 페이지를 변경함. 페이지명의 유효성 확인 후 설정함.
111
+ # ('c101', 'c104y', 'c104q', 'c106', 'c108', 'c103손익계산서q', 'c103재무상태표q', 'c103현금흐름표q', 'c103손익계산서y', 'c103재무상태표y', 'c103현금흐름표y', 'dart')
112
+ corps.chg_page(page='c108')
113
+
114
+ # 데이터 베이스 관리 함수
115
+ corps.get_all_codes()
116
+ corps.del_all_codes()
117
+ corps.drop_corp(code='005930')
118
+ corps.get_all_pages()
119
+ corps.drop_all_pages(code='005930')
120
+ corps.drop_page(code='005930', page='c101')
121
+ corps.get_all_item()
122
+ ```
123
+
124
+ 2 - 2) MI 클래스
125
+
126
+ DB 내에서 Market index 관련 클래스
127
+
128
+ ```python
129
+ from analyser_hj3415.mongo import MI
130
+ mi = MI(index='kospi')
131
+
132
+ # 인덱스를 변경함. 인덱스명의 유효성 확인 후 설정
133
+ # ('aud', 'chf', 'gbond3y', 'gold', 'silver', 'kosdaq', 'kospi', 'sp500', 'usdkrw', 'wti', 'avgper', 'yieldgap', 'usdidx')
134
+ mi.chg_index(index='gold')
135
+
136
+ # 저장된 가장 최근 값 반환
137
+ mi.get_recent()
138
+
139
+ # 데이터를 저장함.
140
+ mi.save(mi_dict={'date': '2021.07.21', 'value': '1154.50'})
141
+
142
+ # 데이터 베이스 관리 함수
143
+ mi.get_all_indexes()
144
+ mi.drop_all_indexes()
145
+ mi.drop_index(index='silver')
146
+ mi.get_all_item()
147
+ ```
148
+
149
+ 2 - 3) DartByDate 클래스
150
+
151
+ dart_hj3415의 dart 모듈에서 dart 데이터프레임을 추출하면 각 날짜별 컬렉션으로 저장하는 클래스
152
+
153
+ ```python
154
+ from dart_hj3415 import dart
155
+ from analyser_hj3415.mongo import DartByDate
156
+
157
+ date = '20210812'
158
+ dart_db = DartByDate(date=date)
159
+
160
+ # 오늘 날짜의 dart 데이터프레임을 추출하여 데이터베이스에 저장
161
+ df = dart.get_df(edate=date)
162
+ dart_db.save(df)
163
+
164
+ # 공시 데이터를 데이터프레임으로 반환한다.
165
+ dart_db.get_data()
166
+ dart_db.get_data(title='임원ㆍ주요주주특정증권등소유상황보고서')
167
+ ```
168
+
169
+ 2 - 4) EvalByDate 클래스
170
+
171
+ eval_hj3415의 eval 모듈에서 eval 데이터프레임을 추출하여 저장하거나 불러올때 사용.
172
+ (실제로 eval_hj3415.eval.make_today_eval_df()에서 오늘자 데이터프레임을 항상 저장한다)
173
+
174
+ ```python
175
+ import pandas as pd
176
+ import datetime
177
+ from analyser_hj3415.mongo import EvalByDate
178
+
179
+ today_str = datetime.datetime.today().strftime('%Y%m%d')
180
+ eval_db = EvalByDate(date=today_str)
181
+
182
+ # 오늘 날짜의 dart 데이터프레임을 추출하여 데이터베이스에 저장
183
+ eval_db.save(pd.DataFrame())
184
+
185
+ # 공시 데이터를 데이터프레임으로 반환한다.
186
+ eval_db.get_data()
187
+ ```
188
+
189
+ 2 - 5) Noti 클래스
190
+
191
+ dart_hj3415의 analysis 모듈에서 공시를 분석하여 의미있는 공시를 노티하고 노티한 기록을 저장하는 클래스
192
+
193
+ ```python
194
+ from analyser_hj3415.mongo import Noti
195
+ noti_db = Noti()
196
+
197
+ # 저장이 필요한 노티 데이터를 딕셔너리로 전달하여 데이터베이스에 저장
198
+ data = {'code': '005930',
199
+ 'rcept_no': '20210514000624',
200
+ 'rcept_dt': '20210514',
201
+ 'report_nm': '임원ㆍ주요주주특정증권등소유상황보고서',
202
+ 'point': 2,
203
+ 'text': '등기임원이 1.0억 이상 구매하지 않음.'}
204
+ noti_db.save(noti_dict=data)
205
+
206
+ # 오래된 노티 데이터를 정리하는 함수
207
+ noti_db.cleaning_data(days_ago=15)
208
+ ```
209
+
210
+ 3) Corps
211
+
212
+ C101 페이지 관리 클래스
213
+
214
+ ```python
215
+ from analyser_hj3415.mongo import C101
216
+ c101 = C101(code='005930')
217
+ ...
218
+ ```
219
+
220
+ 구현 클래스는 C101, C108, C106, C103, C104
221
+
222
+ 3. sqlite 모듈
223
+ sqlite3를 데이테베이스로 사용할 경우를 위한 함수들의 모듈입니다.
224
+ 현재 sqlite3는 사용하지 않기 때문에 작동하지 않습니다.
225
+
226
+ ```python
227
+ from analyser_hj3415 import sqlite
228
+
229
+ ```
230
+ ---
231
+
232
+
@@ -0,0 +1,217 @@
1
+ ### analyser-hj3415
2
+
3
+ #### Introduction
4
+ analyser_hj3415 manage the database.
5
+
6
+ ---
7
+ #### Requirements
8
+
9
+ scrapy>=2.11.2
10
+ pandas>=2.2.2
11
+ sqlalchemy>=2.0.31
12
+ selenium>=4.22.0
13
+ utils-hj3415>=2.0.1
14
+ analyser_hj3415>=0.3.5
15
+
16
+ ---
17
+ #### API
18
+
19
+ ---
20
+ #### Install
21
+
22
+
23
+ ---
24
+ #### Composition
25
+ analyser_hj3415 모듈은 세가지 파트로 구성되어 있습니다.
26
+
27
+ 1. setting 모듈
28
+ setting 모듈은 데이터베이스를 활성화하고 주소를 설정하는 역할을 합니다.
29
+ 데이터베이스의 주소와 활성화 여부를 파일에 저장합니다.
30
+
31
+ ```python
32
+ from analyser_hj3415 import setting
33
+
34
+ # 현재 데이터 베이스 상태를 DbSetting 클래스 형식으로 반환한다.
35
+ db_setting = setting.load_df()
36
+
37
+ # 현재 데이터베이스 상태 출력
38
+ print(db_setting)
39
+
40
+ # 몽고db 주소 변경 (2가지 방식)
41
+ setting.chg_mongo_addr('mongodb://192.168.0.173:27017')
42
+ db_setting.mongo_addr = 'mongodb://192.168.0.173:27017'
43
+
44
+ # sqlite3 주소 변경 (2가지 방식)
45
+ setting.chg_sqlite3_path('/home/hj3415/Stock/_db')
46
+ db_setting.sqlite3_path = '/home/hj3415/Stock/_db'
47
+
48
+ # 데이터베이스를 기본값으로 설정합니다.
49
+ # DEF_MONGO_ADDR = 'mongodb://localhost:27017'
50
+ # DEF_WIN_SQLITE3_PATH = 'C:\\_db'
51
+ # DEF_LINUX_SQLITE3_PATH = '/home/hj3415/Stock/_db'
52
+ setting.set_default()
53
+
54
+ # 각 데이터베이스 사용 설정
55
+ setting.turn_on_mongo()
56
+ setting.turn_off_mongo()
57
+ setting.turn_off_sqlite3()
58
+ setting.turn_on_sqlite3()
59
+ ```
60
+
61
+ 2. mongo 모듈
62
+ 몽고db를 데이터베이스로 사용할 경우를 위한 함수들의 모듈입니다.
63
+ 현재는 몽고db를 비활성화 할 경우 올바로 작동하지 않기 때문에 디폴트 데이터베이스 입니다.
64
+
65
+ 1) Base 클래스
66
+
67
+ 모든 데이터베이스 클래스의 기반 클래스로 실제 직접 사용하지 않음.
68
+
69
+ ```python
70
+ from analyser_hj3415.mongo import Base
71
+ base = Base(db='mi', col='kospi')
72
+
73
+ # db 주소를 변경함. 단 파일에 저장되는 것이 아니라 클래스 내부에서 일시적으로 설정하는 것임
74
+ base.chg_addr('mongodb://192.168.0.173:27017')
75
+
76
+ # 현재 설정된 db 주소, db 명, 컬렉션을 반환함.
77
+ base.get_status()
78
+ # ('mongodb://192.168.0.173:27017', 'mi', 'kospi')
79
+
80
+ # 데이터 베이스 관리 함수
81
+ base.get_all_db()
82
+ ```
83
+
84
+ 2 - 1) Corps 클래스
85
+
86
+ DB 내에서 종목에 관련된 기반클래스로 db명은 6자리 숫자 코드명임.
87
+
88
+ ```python
89
+ from analyser_hj3415.mongo import Corps
90
+
91
+ corps = Corps(code='005930', page='c101')
92
+
93
+ # 코드를 변경함. 6자리 숫자인지 확인 후 설정함.
94
+ corps.chg_code('005490')
95
+
96
+ # 페이지를 변경함. 페이지명의 유효성 확인 후 설정함.
97
+ # ('c101', 'c104y', 'c104q', 'c106', 'c108', 'c103손익계산서q', 'c103재무상태표q', 'c103현금흐름표q', 'c103손익계산서y', 'c103재무상태표y', 'c103현금흐름표y', 'dart')
98
+ corps.chg_page(page='c108')
99
+
100
+ # 데이터 베이스 관리 함수
101
+ corps.get_all_codes()
102
+ corps.del_all_codes()
103
+ corps.drop_corp(code='005930')
104
+ corps.get_all_pages()
105
+ corps.drop_all_pages(code='005930')
106
+ corps.drop_page(code='005930', page='c101')
107
+ corps.get_all_item()
108
+ ```
109
+
110
+ 2 - 2) MI 클래스
111
+
112
+ DB 내에서 Market index 관련 클래스
113
+
114
+ ```python
115
+ from analyser_hj3415.mongo import MI
116
+ mi = MI(index='kospi')
117
+
118
+ # 인덱스를 변경함. 인덱스명의 유효성 확인 후 설정
119
+ # ('aud', 'chf', 'gbond3y', 'gold', 'silver', 'kosdaq', 'kospi', 'sp500', 'usdkrw', 'wti', 'avgper', 'yieldgap', 'usdidx')
120
+ mi.chg_index(index='gold')
121
+
122
+ # 저장된 가장 최근 값 반환
123
+ mi.get_recent()
124
+
125
+ # 데이터를 저장함.
126
+ mi.save(mi_dict={'date': '2021.07.21', 'value': '1154.50'})
127
+
128
+ # 데이터 베이스 관리 함수
129
+ mi.get_all_indexes()
130
+ mi.drop_all_indexes()
131
+ mi.drop_index(index='silver')
132
+ mi.get_all_item()
133
+ ```
134
+
135
+ 2 - 3) DartByDate 클래스
136
+
137
+ dart_hj3415의 dart 모듈에서 dart 데이터프레임을 추출하면 각 날짜별 컬렉션으로 저장하는 클래스
138
+
139
+ ```python
140
+ from dart_hj3415 import dart
141
+ from analyser_hj3415.mongo import DartByDate
142
+
143
+ date = '20210812'
144
+ dart_db = DartByDate(date=date)
145
+
146
+ # 오늘 날짜의 dart 데이터프레임을 추출하여 데이터베이스에 저장
147
+ df = dart.get_df(edate=date)
148
+ dart_db.save(df)
149
+
150
+ # 공시 데이터를 데이터프레임으로 반환한다.
151
+ dart_db.get_data()
152
+ dart_db.get_data(title='임원ㆍ주요주주특정증권등소유상황보고서')
153
+ ```
154
+
155
+ 2 - 4) EvalByDate 클래스
156
+
157
+ eval_hj3415의 eval 모듈에서 eval 데이터프레임을 추출하여 저장하거나 불러올때 사용.
158
+ (실제로 eval_hj3415.eval.make_today_eval_df()에서 오늘자 데이터프레임을 항상 저장한다)
159
+
160
+ ```python
161
+ import pandas as pd
162
+ import datetime
163
+ from analyser_hj3415.mongo import EvalByDate
164
+
165
+ today_str = datetime.datetime.today().strftime('%Y%m%d')
166
+ eval_db = EvalByDate(date=today_str)
167
+
168
+ # 오늘 날짜의 dart 데이터프레임을 추출하여 데이터베이스에 저장
169
+ eval_db.save(pd.DataFrame())
170
+
171
+ # 공시 데이터를 데이터프레임으로 반환한다.
172
+ eval_db.get_data()
173
+ ```
174
+
175
+ 2 - 5) Noti 클래스
176
+
177
+ dart_hj3415의 analysis 모듈에서 공시를 분석하여 의미있는 공시를 노티하고 노티한 기록을 저장하는 클래스
178
+
179
+ ```python
180
+ from analyser_hj3415.mongo import Noti
181
+ noti_db = Noti()
182
+
183
+ # 저장이 필요한 노티 데이터를 딕셔너리로 전달하여 데이터베이스에 저장
184
+ data = {'code': '005930',
185
+ 'rcept_no': '20210514000624',
186
+ 'rcept_dt': '20210514',
187
+ 'report_nm': '임원ㆍ주요주주특정증권등소유상황보고서',
188
+ 'point': 2,
189
+ 'text': '등기임원이 1.0억 이상 구매하지 않음.'}
190
+ noti_db.save(noti_dict=data)
191
+
192
+ # 오래된 노티 데이터를 정리하는 함수
193
+ noti_db.cleaning_data(days_ago=15)
194
+ ```
195
+
196
+ 3) Corps
197
+
198
+ C101 페이지 관리 클래스
199
+
200
+ ```python
201
+ from analyser_hj3415.mongo import C101
202
+ c101 = C101(code='005930')
203
+ ...
204
+ ```
205
+
206
+ 구현 클래스는 C101, C108, C106, C103, C104
207
+
208
+ 3. sqlite 모듈
209
+ sqlite3를 데이테베이스로 사용할 경우를 위한 함수들의 모듈입니다.
210
+ 현재 sqlite3는 사용하지 않기 때문에 작동하지 않습니다.
211
+
212
+ ```python
213
+ from analyser_hj3415 import sqlite
214
+
215
+ ```
216
+ ---
217
+
File without changes
@@ -0,0 +1,109 @@
1
+ import argparse
2
+ from utils_hj3415 import utils
3
+ from .db import chk_db, mongo
4
+ from . import eval, report
5
+ from scraper2_hj3415.nfscrapy import run as nfsrun
6
+
7
+
8
+ def dbmanager():
9
+ cmd = ['repair', 'sync', 'eval', 'update']
10
+ parser = argparse.ArgumentParser()
11
+ parser.add_argument('cmd', help=f"Command - {cmd}")
12
+ parser.add_argument('target', help="Target for scraping (type 6digit code or 'all' or 'parts')")
13
+ parser.add_argument('-d', '--db_path', help="Set mongo database path")
14
+
15
+ args = parser.parse_args()
16
+
17
+ db_path = args.db_path if args.db_path else "mongodb://192.168.0.173:27017"
18
+ client = mongo.connect_mongo(db_path)
19
+
20
+ if args.cmd in cmd:
21
+ if args.cmd == 'repair':
22
+ if args.target == 'all' or utils.is_6digit(args.target):
23
+ need_for_repair_codes = chk_db.chk_integrity_corps(client, args.target)
24
+ # repair dict 예시 - {'343510': ['c106', 'c104', 'c103'], '298000': ['c104'], '091810': ['c104']}
25
+ print(f"Need for repairing codes :{need_for_repair_codes}")
26
+ if need_for_repair_codes:
27
+ # x = input("Do you want to try to repair db by scraping? (y/N)")
28
+ # if x == 'y' or x == 'Y':
29
+ for code, failed_page_list in need_for_repair_codes.items():
30
+ for page in failed_page_list:
31
+ if page == 'c101':
32
+ nfsrun.c101([code, ], db_path)
33
+ elif page == 'c103':
34
+ nfsrun.c103([code, ], db_path)
35
+ elif page == 'c104':
36
+ nfsrun.c104([code, ], db_path)
37
+ elif page == 'c106':
38
+ nfsrun.c106([code, ], db_path)
39
+ recheck_result = chk_db.chk_integrity_corps(client, code)
40
+ if recheck_result:
41
+ # 다시 스크랩해도 오류가 지속되는 경우
42
+ print(f"The db integrity failure persists..{recheck_result}")
43
+ # x = input(f"Do you want to delete {code} on DB? (y/N)")
44
+ # if x == 'y' or x == 'Y':
45
+ # mongo.Corps.del_db(client, code)
46
+ # else:
47
+ # print("Canceled.")
48
+ mongo.Corps.del_db(client, code)
49
+ # else:
50
+ # print("Done.")
51
+ else:
52
+ print("Done.")
53
+ else:
54
+ print(f"Invalid target option : {args.target}")
55
+ elif args.cmd == 'update':
56
+ if args.target == 'all' or utils.is_6digit(args.target):
57
+ need_for_update_codes = list(chk_db.chk_modifying_corps(client, args.target).keys())
58
+ # need_for_update_codes 예시 - [codes....]
59
+ print(f"Need for updating codes :{need_for_update_codes}")
60
+ if need_for_update_codes:
61
+ nfsrun.c103(need_for_update_codes, db_path)
62
+ nfsrun.c104(need_for_update_codes, db_path)
63
+ nfsrun.c106(need_for_update_codes, db_path)
64
+ elif args.target == 'parts':
65
+ pass
66
+ else:
67
+ print(f"Invalid target option : {args.target}")
68
+ elif args.cmd == 'sync':
69
+ if args.target == 'all':
70
+ chk_db.sync_mongo_with_krx(client)
71
+ else:
72
+ print(f"The target should be 'all' in sync command.")
73
+ elif args.cmd == 'eval':
74
+ if args.target == 'all':
75
+ # eval을 평가해서 데이터베이스에 저장한다.
76
+ eval.make_today_eval_df(client, refresh=True)
77
+ else:
78
+ print(f"The target should be 'all' in sync command.")
79
+ else:
80
+ print(f"The command should be in {cmd}")
81
+
82
+ client.close()
83
+
84
+
85
+ def evalmanager():
86
+ cmd = ['report', ]
87
+ parser = argparse.ArgumentParser()
88
+ parser.add_argument('cmd', help=f"Command - {cmd}")
89
+ parser.add_argument('target', help="Target for scraping (type 6digit code or 'all' or 'parts')")
90
+ parser.add_argument('-d', '--db_path', help="Set mongo database path")
91
+
92
+ args = parser.parse_args()
93
+
94
+ db_path = args.db_path if args.db_path else "mongodb://192.168.0.173:27017"
95
+ client = mongo.connect_mongo(db_path)
96
+
97
+ if args.cmd in cmd:
98
+ if args.cmd == 'report':
99
+ if utils.is_6digit(args.target):
100
+ print(report.Report(client, args.target))
101
+ else:
102
+ print(f"Invalid target option : {args.target}")
103
+ else:
104
+ print(f"The command should be in {cmd}")
105
+
106
+
107
+ if __name__ == "__main__":
108
+ # dbmanager()
109
+ evalmanager()