vnai 0.0.5__py3-none-any.whl → 0.0.7__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.
vnai/__init__.py CHANGED
@@ -103,10 +103,7 @@ class VnstockInitializer:
103
103
  else:
104
104
  environment = "Other" # Non-interactive environment (e.g., script executed from an IDE)
105
105
  else:
106
- if 'google.colab' in sys.modules:
107
- environment = "Google Colab"
108
- else:
109
- environment = "Jupyter"
106
+ environment = "Jupyter"
110
107
  except (ImportError, AttributeError):
111
108
  # Fallback if IPython isn't installed or other checks fail
112
109
  if sys.stdout.isatty():
@@ -114,6 +111,22 @@ class VnstockInitializer:
114
111
  else:
115
112
  environment = "Other"
116
113
 
114
+ try:
115
+ if 'google.colab' in sys.modules:
116
+ hosting_service = "Google Colab"
117
+ elif 'CODESPACE_NAME' in os.environ:
118
+ hosting_service = "Github Codespace"
119
+ elif 'GITPOD_WORKSPACE_CLUSTER_HOST' in os.environ:
120
+ hosting_service = "Gitpod"
121
+ elif 'REPLIT_USER' in os.environ:
122
+ hosting_service = "Replit"
123
+ elif 'KAGGLE_CONTAINER_NAME' in os.environ:
124
+ hosting_service = "Kaggle"
125
+ elif '.hf.space' in os.environ['SPACE_HOST']:
126
+ hosting_service = "Hugging Face Spaces"
127
+ except:
128
+ hosting_service = "Local or Unknown"
129
+
117
130
  # System information
118
131
  os_info = platform.uname()
119
132
 
@@ -135,6 +148,7 @@ class VnstockInitializer:
135
148
  info = {
136
149
  "uuid": machine_id,
137
150
  "environment": environment,
151
+ "hosting_service": hosting_service,
138
152
  "python_version": platform.python_version(),
139
153
  "os_name": os_info.system,
140
154
  "os_version": os_info.version,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: vnai
3
- Version: 0.0.5
3
+ Version: 0.0.7
4
4
  Author: Vnstock HQ
5
5
  Author-email: support@vnstock.site
6
6
  Classifier: Programming Language :: Python :: 3
@@ -0,0 +1,5 @@
1
+ vnai/__init__.py,sha256=72F-l8UJ5Egaez41BTN58SeDOxv7h78-PyYKKZK1T_U,15323
2
+ vnai-0.0.7.dist-info/METADATA,sha256=3faoC2891w6Kv41jzVRCq9znMJMCB_YAVhxTzafsNq0,576
3
+ vnai-0.0.7.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
4
+ vnai-0.0.7.dist-info/top_level.txt,sha256=4zI0qZHePCwvgSqXl4420sBcd0VzZn4MEcRsAIFae3k,5
5
+ vnai-0.0.7.dist-info/RECORD,,
raw/__init__.py DELETED
@@ -1,335 +0,0 @@
1
- import os
2
- import pathlib
3
- import importlib.metadata
4
- import requests
5
- import psutil
6
- import platform
7
- import uuid
8
- import sys
9
- import socket
10
- import json
11
- import base64
12
- from cryptography.fernet import Fernet
13
-
14
- TC_VAR = "ACCEPT_TC"
15
- TC_VAL = "tôi đồng ý"
16
-
17
- HOME_DIR = pathlib.Path.home()
18
- PROJECT_DIR = HOME_DIR / ".vnstock"
19
- ID_DIR = PROJECT_DIR / 'id'
20
- TG = b'gAAAAABmOPXPmFYXs94INEralMxhR38geFp91TZRLP29C41OoO0k7D7QiXIR2nWl5PCEoQCKECZw8b-Xeek3oqT6LcpcpJsAPyOGOBTX5cw_r5Mv0o8SBLa53jOeuVAwCAhId_BpMtOO'
21
- TC_PATH = ID_DIR / "terms_agreement.txt"
22
-
23
- class VnstockInitializer:
24
- def __init__(self, target):
25
- self.TERMS_AND_CONDITIONS = """
26
- THOẢ THUẬN SỬ DỤNG - ĐIỀU KHOẢN & ĐIỀU KIỆN SỬ DỤNG VNSTOCK3
27
- ------------------------
28
- Khi sử dụng vnstock, bạn xác nhận rằng bạn đã đọc, hiểu rõ, và chấp nhận các điều khoản mô tả dưới đây.
29
- Vui lòng nhập 'Tôi đồng ý' hoặc nhấn Enter để chấp nhận các điều khoản và điều kiện này và tiếp tục sử dụng phần mềm.
30
-
31
- I. ĐIỀU KHOẢN CHUNG
32
- ------------------------
33
- - Thư viện này chỉ dành cho mục đích cá nhân và không được phân phối lại hoặc sử dụng cho mục đích thương mại mà không có sự đồng ý bằng văn bản chính thức từ tác giả. Tất cả bản quyền và sở hữu trí tuệ thuộc về tác giả. Bất kỳ hành vi vi phạm bản quyền hoặc sở hữu trí tuệ sẽ bị xử lý theo pháp luật.
34
-
35
- - Bạn không được sử dụng Vnstock cho các mục đích bất hợp pháp, phi đạo đức, hoặc trái với quy định pháp luật hiện hành.
36
-
37
- - Bạn đồng ý rằng tác giả không chịu trách nhiệm cho bất kỳ thiệt hại, mất mát, hoặc hậu quả nào phát sinh từ việc sử dụng thư viện này, đặc biệt trong hoạt động đầu tư hoặc bất kỳ hoạt động nào có rủi ro. Bạn tự chịu trách nhiệm cho các quyết định đầu tư của mình.
38
-
39
- - Bạn đồng ý tuân thủ mọi luật pháp, quy định, và hướng dẫn liên quan khi sử dụng thư viện này.
40
-
41
- - Bạn chấp nhận rằng Vnstock có thể lưu trữ dữ liệu ẩn danh của thiết bị để tối ưu tính năng và cải thiện hiệu năng phần mềm. Thông tin này sẽ được bảo mật và không được chia sẻ với bên thứ ba mà không có sự đồng ý của bạn.
42
-
43
- II. LƯU TRỮ & XỬ LÝ DỮ LIỆU
44
- ------------------------
45
- Thư viện này thu thập dữ liệu để phân tích, thống kê, và cải thiện hiệu suất. Dữ liệu này sẽ không được chia sẻ với bên thứ ba. Dưới đây là danh sách các thông tin được thu thập, cùng với giải thích và ví dụ mẫu:
46
-
47
- - UUID (Machine ID): Một định danh duy nhất cho máy tính của bạn, giúp phân biệt các thiết bị. Ví dụ: "123e4567-e89b-12d3-a456-426614174000".
48
-
49
- - Environment (Môi trường): Mô tả môi trường chạy chương trình, như "development", "testing", hoặc "production". Ví dụ: "production".
50
-
51
- - Python Version (Phiên bản Python): Phiên bản Python đang chạy trên hệ thống của bạn. Ví dụ: "3.9.1".
52
-
53
- - OS Name (Tên hệ điều hành): Tên hệ điều hành đang chạy trên máy tính. Ví dụ: "Windows".
54
-
55
- - OS Version (Phiên bản hệ điều hành): Phiên bản cụ thể của hệ điều hành. Ví dụ: "10.0.19041".
56
-
57
- - Machine (Máy): Mô tả loại máy tính hoặc kiến trúc phần cứng. Ví dụ: "AMD64".
58
-
59
- - CPU Model (Mô hình CPU): Thông tin về loại bộ xử lý (CPU) trên máy tính. Ví dụ: "Intel Core i7-8700".
60
-
61
- - CPU Cores (Số lõi CPU): Số lõi vật lý của CPU. Ví dụ: 6.
62
-
63
- - CPU Logical Cores (Số lõi CPU logic): Số lõi logic của CPU, thường bao gồm cả lõi vật lý và lõi ảo. Ví dụ: 12.
64
-
65
- - RAM Total (Tổng dung lượng RAM): Tổng dung lượng bộ nhớ RAM trên máy tính, tính bằng gigabyte (GB). Ví dụ: 16.0 GB.
66
-
67
- - RAM Available (Dung lượng RAM có sẵn): Dung lượng bộ nhớ RAM còn trống, tính bằng gigabyte (GB). Ví dụ: 8.5 GB.
68
-
69
- - Local IP (Địa chỉ IP cục bộ): Địa chỉ IP cục bộ của máy tính.
70
-
71
- - MAC Address (Địa chỉ MAC): Địa chỉ MAC (Media Access Control) của thiết bị mạng. Ví dụ: "00:1A:A2:3B:4C:5D".
72
- """
73
-
74
- self.home_dir = HOME_DIR
75
- self.project_dir = PROJECT_DIR
76
- self.id_dir = ID_DIR
77
- self.terms_file_path = TC_PATH
78
- self.RH = 'asejruyy^&%$#W2vX>NfwrevDRESWR'
79
- self.LH = 'YMAnhuytr%$59u90y7j-mjhgvyFTfbiuUYH'
80
-
81
- # Create the project directory if it doesn't exist
82
- self.project_dir.mkdir(exist_ok=True)
83
- self.id_dir.mkdir(exist_ok=True)
84
- self.target = target
85
-
86
- kb = (str(self.project_dir).split("/")[-1] + str(self.id_dir).split("/")[-1] + str(self.terms_file_path).split("/")[-1]).ljust(32)[:32].encode('utf-8')
87
- kb64 = base64.urlsafe_b64encode(kb)
88
- self.cph = Fernet(kb64)
89
-
90
- def system_info(self):
91
- """
92
- Gathers information about the environment and system.
93
- """
94
- # Generate UUID
95
- machine_id = str(uuid.uuid4())
96
-
97
- # Environment (modify to detect your specific frameworks)
98
- try:
99
- from IPython import get_ipython
100
- if 'IPKernelApp' not in get_ipython().config: # Check if not in IPython kernel
101
- if sys.stdout.isatty():
102
- environment = "Terminal"
103
- else:
104
- environment = "Other" # Non-interactive environment (e.g., script executed from an IDE)
105
- else:
106
- if 'google.colab' in sys.modules:
107
- environment = "Google Colab"
108
- else:
109
- environment = "Jupyter"
110
- except (ImportError, AttributeError):
111
- # Fallback if IPython isn't installed or other checks fail
112
- if sys.stdout.isatty():
113
- environment = "Terminal"
114
- else:
115
- environment = "Other"
116
-
117
- # System information
118
- os_info = platform.uname()
119
-
120
- # CPU information
121
- cpu_arch = platform.processor()
122
- cpu_logical_cores = psutil.cpu_count(logical=True)
123
- cpu_cores = psutil.cpu_count(logical=False)
124
-
125
- # Memory information
126
- ram_total = psutil.virtual_memory().total / (1024**3) # GB
127
- ram_available = psutil.virtual_memory().available / (1024**3) # GB
128
-
129
- hostname = socket.gethostname()
130
- IPAddr = socket.gethostbyname(hostname)
131
-
132
- mac = ':'.join(['{:02x}'.format((uuid.getnode() >> elements) & 0xff) for elements in range(0, 2 * 6, 2)])
133
-
134
- # Combine information into a dictionary
135
- info = {
136
- "uuid": machine_id,
137
- "environment": environment,
138
- "python_version": platform.python_version(),
139
- "os_name": os_info.system,
140
- "os_version": os_info.version,
141
- "machine": os_info.machine,
142
- "cpu_model": cpu_arch,
143
- "cpu_cores": cpu_cores,
144
- "cpu_logical_cores": cpu_logical_cores,
145
- "ram_total": round(ram_total, 1),
146
- "ram_available": round(ram_available, 1),
147
- "local_ip": IPAddr,
148
- "mac_address": mac,
149
- }
150
-
151
- return info
152
-
153
- def show_terms_and_conditions(self):
154
- """
155
- Displays terms and conditions and asks for acceptance.
156
- """
157
- print(self.TERMS_AND_CONDITIONS)
158
-
159
- # check if os.environ[TC_VAR] exist and equal to tôi đồng ý
160
- if TC_VAR in os.environ and os.environ[TC_VAR] == TC_VAL:
161
- response = TC_VAL
162
- else:
163
- response = input("Nhập 'Tôi đồng ý' hoặc nhấn Enter để chấp nhận: ")
164
- if not response.strip():
165
- response = TC_VAL
166
- os.environ[TC_VAR] = response
167
-
168
- if response.strip().lower() == TC_VAL:
169
- from datetime import datetime
170
- # get now time in string
171
- now = datetime.now()
172
- HARDWARE = self.system_info()
173
- # VERSION = pkg_resources.get_distribution('vnstock').version
174
-
175
- VERSION = None
176
- try:
177
- VERSION = importlib.metadata.version('vnstock')
178
- except importlib.metadata.PackageNotFoundError:
179
- print("Package 'vnstock' not found")
180
-
181
- # parse HARDWARE to string to store in the file
182
- signed_aggreement = f"PHIÊN BẢN: {VERSION}\nMÔ TẢ:\nNgười dùng có mã nhận dạng {HARDWARE['uuid']} đã chấp nhận điều khoản & điều kiện sử dụng Vnstock lúc {now}\n---\n\nTHÔNG TIN THIẾT BỊ: {str(HARDWARE)}\n\nĐính kèm bản sao nội dung bạn đã đọc, hiểu rõ và đồng ý dưới đây:\n{self.TERMS_AND_CONDITIONS}"
183
-
184
- # Store the acceptance
185
- with open(self.terms_file_path, "w", encoding="utf-8") as f:
186
- f.write(signed_aggreement)
187
-
188
- print("---\nCảm ơn bạn đã chấp nhận điều khoản và điều kiện!\nBạn đã có thể tiếp tục sử dụng Vnstock!")
189
- return True
190
- else:
191
- return False
192
-
193
- def log_analytics_data(self):
194
- """
195
- Sends analytics data to a webhook.
196
- """
197
- HARDWARE = self.system_info()
198
- EP = 'gAAAAABmOPNX4DJAsImlkzvtcyezBxr4UcK_HpCOgz-GOF9yBDP99tWNFYM_ZjeC22kNqmX3urZa467BC1D2fPLJrUkp6rQizYEMK4m196ZlOzUhwCbfjdvURXesL3LC7DofOgwWjNyltPQ8AnPyB4YUMnnAwnFooQ=='
199
- TGE = self.cph.decrypt(self.target).decode('utf-8')
200
- WH = f"{self.cph.decrypt(((self.RH+EP+self.RH)[30:-30]).encode()).decode('utf-8')}{TGE}"
201
-
202
- data = {
203
- "systems": HARDWARE,
204
- "accepted_agreement": True,
205
- "installed_packages": self.packages_installed(),
206
- }
207
-
208
- # save data to a json file in id folder
209
- with open(self.id_dir / "environment.json", "w", encoding="utf-8") as f:
210
- f.write(json.dumps(data, indent=4))
211
-
212
- try:
213
- response = requests.post(WH, json=data)
214
- except:
215
- raise SystemExit("Không thể gửi dữ liệu phân tích. Vui lòng kiểm tra kết nối mạng và thử lại sau.")
216
-
217
- def check_terms_accepted(self):
218
- """
219
- Checks if terms and conditions are accepted.
220
- """
221
- if not self.terms_file_path.exists():
222
- # If not, ask for acceptance
223
- accepted = self.show_terms_and_conditions()
224
- if not accepted:
225
- raise SystemExit("Điều khoản và điều kiện không được chấp nhận. Không thể tiếp tục.")
226
- else:
227
- self.log_analytics_data()
228
-
229
- def packages_installed(self):
230
- """
231
- Checks installed packages and returns a dictionary.
232
- """
233
- # Define package mapping
234
- package_mapping = {
235
- "vnstock_family": [
236
- "vnstock",
237
- "vnstock3",
238
- "vnstock_ezchart",
239
- "vnstock_data_pro"
240
- "vnstock_market_data_pipeline",
241
- "vnstock_ta"
242
- ],
243
- "analytics": [
244
- "openbb",
245
- "pandas_ta"
246
- ],
247
- "static_charts": [
248
- "matplotlib",
249
- "seaborn",
250
- "altair"
251
- ],
252
- "dashboard": [
253
- "streamlit",
254
- "voila",
255
- "panel"
256
- ],
257
- "interactive_charts": [
258
- "mplfinance",
259
- "plotly",
260
- "plotline",
261
- "bokeh",
262
- "pyecharts",
263
- "highcharts-core",
264
- "highcharts-stock"
265
- ],
266
- "datafeed": [
267
- "yfinance",
268
- "alpha_vantage",
269
- "pandas-datareader",
270
- "investpy",
271
- ],
272
- "official_api": [
273
- "ssi-fc-data",
274
- "ssi-fctrading"
275
- ],
276
- "risk_return": [
277
- "pyfolio",
278
- "empyrical",
279
- "quantstats"
280
- ],
281
- "machine_learning": [
282
- "scipy",
283
- "sklearn",
284
- "statsmodels",
285
- "pytorch",
286
- "tensorflow",
287
- "keras",
288
- "xgboost"
289
- ],
290
- "indicators": [
291
- "stochastic",
292
- "talib",
293
- "tqdm",
294
- "finta",
295
- "financetoolkit",
296
- "tulipindicators"
297
- ],
298
- "backtesting": [
299
- "vectorbt",
300
- "backtesting",
301
- "bt",
302
- "zipline",
303
- "pyalgotrade",
304
- "backtrader",
305
- "pybacktest"
306
- ],
307
- "server": [
308
- "fastapi",
309
- "flask",
310
- "uvicorn",
311
- "gunicorn"
312
- ],
313
- "framework": [
314
- "lightgbm",
315
- "catboost",
316
- "django",
317
- ]
318
- }
319
-
320
- installed_packages = {}
321
-
322
- for category, packages in package_mapping.items():
323
- installed_packages[category] = []
324
- for pkg in packages:
325
- try:
326
- version = importlib.metadata.version(pkg)
327
- installed_packages[category].append((pkg, version))
328
- except importlib.metadata.PackageNotFoundError:
329
- pass
330
-
331
- return installed_packages
332
-
333
- def tc_init():
334
- vnstock_initializer = VnstockInitializer(TG)
335
- vnstock_initializer.check_terms_accepted()
raw/analytics.py DELETED
@@ -1,341 +0,0 @@
1
- import os
2
- import pathlib
3
- # import pkg_resources
4
- import importlib.metadata
5
- import asyncio
6
- import requests
7
- import psutil
8
- import platform
9
- import uuid
10
- import sys
11
- import socket
12
-
13
- class VnstockInitializer:
14
- def __init__(self, hook_id):
15
- # Define terms and conditions
16
- self.TERMS_AND_CONDITIONS = """
17
- THOẢ THUẬN SỬ DỤNG - ĐIỀU KHOẢN & ĐIỀU KIỆN SỬ DỤNG VNSTOCK3
18
- ------------------------
19
- Khi sử dụng vnstock, bạn xác nhận rằng bạn đã đọc, hiểu rõ, và chấp nhận các điều khoản mô tả dưới đây. Vui lòng nhập 'Tôi đồng ý' hoặc nhấn Enter để chấp nhận các điều khoản và điều kiện này và tiếp tục sử dụng phần mềm.
20
-
21
- I. ĐIỀU KHOẢN CHUNG
22
- ------------------------
23
- - Thư viện này chỉ dành cho mục đích cá nhân và không được phân phối lại hoặc sử dụng cho mục đích thương mại mà không có sự đồng ý bằng văn bản chính thức từ tác giả. Tất cả bản quyền và sở hữu trí tuệ thuộc về tác giả. Bất kỳ hành vi vi phạm bản quyền hoặc sở hữu trí tuệ sẽ bị xử lý theo pháp luật.
24
-
25
- - Bạn không được sử dụng thư viện này cho các mục đích bất hợp pháp, phi đạo đức, hoặc trái với quy định pháp luật hiện hành.
26
-
27
- - Bạn đồng ý rằng tác giả không chịu trách nhiệm cho bất kỳ thiệt hại, mất mát, hoặc hậu quả nào phát sinh từ việc sử dụng thư viện này, đặc biệt trong hoạt động đầu tư hoặc bất kỳ hoạt động nào có rủi ro. Bạn tự chịu trách nhiệm cho các quyết định đầu tư của mình.
28
-
29
- - Bạn đồng ý tuân thủ mọi luật pháp, quy định, và hướng dẫn liên quan khi sử dụng thư viện này.
30
-
31
- - Bạn chấp nhận rằng thư viện này có thể lưu trữ dữ liệu cục bộ để lưu cấu hình, cung cấp tính năng cá nhân hóa, hoặc cho mục đích phân tích. Thông tin này sẽ được bảo mật và không được chia sẻ với bên thứ ba mà không có sự đồng ý của bạn.
32
-
33
- II. LƯU TRỮ & XỬ LÝ DỮ LIỆU
34
- ------------------------
35
- Thư viện này thu thập dữ liệu để phân tích, thống kê, và cải thiện hiệu suất. Dữ liệu này được lưu trữ cục bộ và không được chia sẻ với bên thứ ba. Dưới đây là danh sách các thông tin được thu thập, cùng với giải thích và ví dụ mẫu:
36
-
37
- - UUID (Machine ID): Một định danh duy nhất cho máy tính của bạn, giúp phân biệt các thiết bị. Ví dụ: "123e4567-e89b-12d3-a456-426614174000".
38
-
39
- - Environment (Môi trường): Mô tả môi trường chạy chương trình, như "development", "testing", hoặc "production". Ví dụ: "production".
40
-
41
- - Python Version (Phiên bản Python): Phiên bản Python đang chạy trên hệ thống của bạn. Ví dụ: "3.9.1".
42
-
43
- - OS Name (Tên hệ điều hành): Tên hệ điều hành đang chạy trên máy tính. Ví dụ: "Windows".
44
-
45
- - OS Version (Phiên bản hệ điều hành): Phiên bản cụ thể của hệ điều hành. Ví dụ: "10.0.19041".
46
-
47
- - Machine (Máy): Mô tả loại máy tính hoặc kiến trúc phần cứng. Ví dụ: "AMD64".
48
-
49
- - CPU Model (Mô hình CPU): Thông tin về loại bộ xử lý (CPU) trên máy tính. Ví dụ: "Intel Core i7-8700".
50
-
51
- - CPU Cores (Số lõi CPU): Số lõi vật lý của CPU. Ví dụ: 6.
52
-
53
- - CPU Logical Cores (Số lõi CPU logic): Số lõi logic của CPU, thường bao gồm cả lõi vật lý và lõi ảo. Ví dụ: 12.
54
-
55
- - RAM Total (Tổng dung lượng RAM): Tổng dung lượng bộ nhớ RAM trên máy tính, tính bằng gigabyte (GB). Ví dụ: 16.0 GB.
56
-
57
- - RAM Available (Dung lượng RAM có sẵn): Dung lượng bộ nhớ RAM còn trống, tính bằng gigabyte (GB). Ví dụ: 8.5 GB.
58
-
59
- - Local IP (Địa chỉ IP cục bộ): Địa chỉ IP cục bộ của máy tính.
60
-
61
- - MAC Address (Địa chỉ MAC): Địa chỉ MAC (Media Access Control) của thiết bị mạng. Ví dụ: "00:1A:A2:3B:4C:5D".
62
- """
63
-
64
- self.HOME_DIR = pathlib.Path.home()
65
- self.PROJECT_DIR = self.HOME_DIR / ".vnstock"
66
- self.TERMS_FILE_PATH = self.PROJECT_DIR / "terms_agreement.txt"
67
-
68
- # Create the project directory if it doesn't exist
69
- self.PROJECT_DIR.mkdir(exist_ok=True)
70
- self.hook_id = hook_id
71
-
72
- async def system_info(self):
73
- """
74
- Gathers information about the environment and system.
75
- """
76
- # Generate UUID
77
- machine_id = str(uuid.uuid4())
78
-
79
- # Environment (modify to detect your specific frameworks)
80
- try:
81
- from IPython import get_ipython
82
- if 'IPKernelApp' not in get_ipython().config: # Check if not in IPython kernel
83
- if sys.stdout.isatty():
84
- environment = "Terminal"
85
- else:
86
- environment = "Other" # Non-interactive environment (e.g., script executed from an IDE)
87
- else:
88
- environment = "Jupyter"
89
- except (ImportError, AttributeError):
90
- # Fallback if IPython isn't installed or other checks fail
91
- if sys.stdout.isatty():
92
- environment = "Terminal"
93
- else:
94
- environment = "Other"
95
-
96
- # System information
97
- os_info = platform.uname()
98
-
99
- # CPU information
100
- cpu_arch = platform.processor()
101
- cpu_logical_cores = psutil.cpu_count(logical=True)
102
- cpu_cores = psutil.cpu_count(logical=False)
103
-
104
- # Memory information
105
- ram_total = psutil.virtual_memory().total / (1024**3) # GB
106
- ram_available = psutil.virtual_memory().available / (1024**3) # GB
107
-
108
- hostname = socket.gethostname()
109
- IPAddr = socket.gethostbyname(hostname)
110
-
111
- mac = ':'.join(['{:02x}'.format((uuid.getnode() >> elements) & 0xff) for elements in range(0, 2 * 6, 2)])
112
-
113
- # Combine information into a dictionary
114
- info = {
115
- "uuid": machine_id,
116
- "environment": environment,
117
- "python_version": platform.python_version(),
118
- "os_name": os_info.system,
119
- "os_version": os_info.version,
120
- "machine": os_info.machine,
121
- "cpu_model": cpu_arch,
122
- "cpu_cores": cpu_cores,
123
- "cpu_logical_cores": cpu_logical_cores,
124
- "ram_total": round(ram_total, 1),
125
- "ram_available": round(ram_available, 1),
126
- "local_ip": IPAddr,
127
- "mac_address": mac,
128
- }
129
-
130
- return info
131
-
132
- async def show_terms_and_conditions(self):
133
- """
134
- Displays terms and conditions and asks for acceptance.
135
- """
136
- print(self.TERMS_AND_CONDITIONS)
137
-
138
- response = input("Nhập 'Tôi đồng ý' hoặc nhấn Enter để chấp nhận: ")
139
-
140
- # If the user presses Enter without typing, default to "Tôi đồng ý"
141
- if not response.strip():
142
- response = "tôi đồng ý"
143
-
144
- if response.strip().lower() == "tôi đồng ý":
145
- from datetime import datetime
146
- # get now time in string
147
- now = datetime.now()
148
- HARDWARE = await self.system_info()
149
- # VERSION = pkg_resources.get_distribution('vnstock').version
150
-
151
- VERSION = None
152
- try:
153
- VERSION = importlib.metadata.version('vnstock')
154
- except importlib.metadata.PackageNotFoundError:
155
- print("Package 'vnstock' not found")
156
-
157
- # parse HARDWARE to string to store in the file
158
- signed_aggreement = f"PHIÊN BẢN: {VERSION}\nMÔ TẢ:\nNgười dùng có mã nhận dạng {HARDWARE['uuid']} đã chấp nhận điều khoản & điều kiện sử dụng Vnstock lúc {now}\n---\n\nTHÔNG TIN THIẾT BỊ: {str(HARDWARE)}\n\nĐính kèm bản sao nội dung bạn đã đọc, hiểu rõ và đồng ý dưới đây:\n{self.TERMS_AND_CONDITIONS}"
159
- # Store the acceptance
160
- with open(self.TERMS_FILE_PATH, "w", encoding="utf-8") as f:
161
- f.write(signed_aggreement)
162
- print("---\nCảm ơn bạn đã chấp nhận điều khoản và điều kiện!\nBạn đã có thể tiếp tục sử dụng Vnstock!\nBạn có thể xem lại điều khoản và điều kiện tại đường dẫn sau: ", self.TERMS_FILE_PATH)
163
- return True
164
- else:
165
- return False
166
-
167
- async def send_analytics_data(self):
168
- """
169
- Sends analytics data to a webhook.
170
- """
171
- HARDWARE = await self.system_info()
172
- WEBHOOK_URI = f"https://botbuilder.larksuite.com/api/trigger-webhook/{self.hook_id}"
173
-
174
- data = {
175
- "systems": HARDWARE,
176
- "accepted_agreement": True,
177
- "installed_packages": await self.packages_installed(),
178
- }
179
-
180
- try:
181
- response = requests.post(WEBHOOK_URI, json=data)
182
- except:
183
- raise SystemExit("Không thể gửi dữ liệu phân tích. Vui lòng kiểm tra kết nối mạng và thử lại sau.")
184
-
185
- async def check_terms_accepted(self):
186
- """
187
- Checks if terms and conditions are accepted.
188
- """
189
- if not self.TERMS_FILE_PATH.exists():
190
- # If not, ask for acceptance
191
- accepted = await self.show_terms_and_conditions()
192
- if not accepted:
193
- raise SystemExit("Điều khoản và điều kiện không được chấp nhận. Không thể tiếp tục.")
194
- else:
195
- await self.send_analytics_data()
196
-
197
- async def packages_installed(self):
198
- """
199
- Checks installed packages and returns a dictionary.
200
- """
201
- # Define package mapping
202
- package_mapping = {
203
- "vnstock_family": [
204
- "vnstock",
205
- "vnstock3",
206
- "vnstock_ezchart",
207
- "vnstock_data_pro"
208
- "vnstock_market_data_pipeline",
209
- "vnstock_ta"
210
- ],
211
-
212
- # Analytics
213
- "analytics": [
214
- "openbb",
215
- "pandas_ta"
216
- ],
217
-
218
- # Static charts
219
- "static_charts": [
220
- "matplotlib",
221
- "seaborn",
222
- "altair"
223
- ],
224
-
225
- # Dashboard
226
- "dashboard": [
227
- "streamlit",
228
- "voila",
229
- "panel"
230
- ],
231
-
232
- # Interactive charts
233
- "interactive_charts": [
234
- "mplfinance",
235
- "plotly",
236
- "plotline",
237
- "bokeh",
238
- "pyecharts",
239
- "highcharts-core",
240
- "highcharts-stock"
241
- ],
242
-
243
- # Datafeed
244
- "datafeed": [
245
- "yfinance",
246
- "alpha_vantage",
247
- "pandas-datareader",
248
- "investpy",
249
- ],
250
-
251
- # Official API
252
- "official_api": [
253
- "ssi-fc-data",
254
- "ssi-fctrading"
255
- ],
256
-
257
- # Risk & Return
258
- "risk_return": [
259
- "pyfolio",
260
- "empyrical",
261
- "quantstats"
262
- ],
263
-
264
- # Machine learning
265
- "machine_learning": [
266
- "scipy",
267
- "sklearn",
268
- "statsmodels",
269
- "pytorch",
270
- "tensorflow",
271
- "keras",
272
- "xgboost"
273
- ],
274
-
275
- # Indicators
276
- "indicators": [
277
- "stochastic",
278
- "talib",
279
- "tqdm",
280
- "finta",
281
- "financetoolkit",
282
- "tulipindicators"
283
- ],
284
-
285
- # Backtesting
286
- "backtesting": [
287
- "vectorbt",
288
- "backtesting",
289
- "bt",
290
- "zipline",
291
- "pyalgotrade",
292
- "backtrader",
293
- "pybacktest"
294
- ],
295
-
296
- # Server
297
- "server": [
298
- "fastapi",
299
- "flask",
300
- "uvicorn",
301
- "gunicorn"
302
- ],
303
-
304
- # Framework
305
- "framework": [
306
- "lightgbm",
307
- "catboost",
308
- "django",
309
- ]
310
- }
311
-
312
- # installed_packages = {}
313
-
314
- # for category, packages in package_mapping.items():
315
- # installed_packages[category] = []
316
- # for pkg in packages:
317
- # try:
318
- # version = pkg_resources.get_distribution(pkg).version
319
- # installed_packages[category].append((pkg, version))
320
- # except pkg_resources.DistributionNotFound:
321
- # pass
322
-
323
- installed_packages = {}
324
-
325
- for category, packages in package_mapping.items():
326
- installed_packages[category] = []
327
- for pkg in packages:
328
- try:
329
- version = importlib.metadata.version(pkg)
330
- installed_packages[category].append((pkg, version))
331
- except importlib.metadata.PackageNotFoundError:
332
- pass
333
-
334
- return installed_packages
335
-
336
- async def main(hook_id='79a979882bc330f25b0e785eb13360be'):
337
- vnstock_initializer = VnstockInitializer(hook_id)
338
- await vnstock_initializer.check_terms_accepted()
339
-
340
- # # Run the event loop
341
- asyncio.run(main())
raw/setup.py DELETED
@@ -1,9 +0,0 @@
1
- from setuptools import setup
2
- from Cython.Build import cythonize
3
-
4
- setup(
5
- ext_modules=cythonize("analytics.pyx")
6
- )
7
-
8
- # python3 setup.py build_ext --inplace
9
- # gcc -shared -o analytics.so -fPIC analytics.c
@@ -1,8 +0,0 @@
1
- raw/__init__.py,sha256=SShTBnlw4Lqo4PeJNtPr5-VjPaJqZsArFnugbZ0rg-I,14715
2
- raw/analytics.py,sha256=KYGlbdqAkRcv8BLptz3REumyw90iwNc7ACvZ_idVacg,14534
3
- raw/setup.py,sha256=FxCov16ZdUdEd6_WE-8msjFN2J9QeiidiU_FixaR9XU,204
4
- vnai/__init__.py,sha256=SShTBnlw4Lqo4PeJNtPr5-VjPaJqZsArFnugbZ0rg-I,14715
5
- vnai-0.0.5.dist-info/METADATA,sha256=jIO-uLkSr6K4-ZU1b-UMejkGJQZaK9SXPV5o7e5MuW8,576
6
- vnai-0.0.5.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
7
- vnai-0.0.5.dist-info/top_level.txt,sha256=ZLryI6oFu_mU1ls4sX_Sr5-MFWmEwlxu2Xe6EaEObI4,9
8
- vnai-0.0.5.dist-info/RECORD,,
File without changes