vnai 0.0.6__py3-none-any.whl → 0.0.8__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
@@ -23,52 +23,55 @@ TC_PATH = ID_DIR / "terms_agreement.txt"
23
23
  class VnstockInitializer:
24
24
  def __init__(self, target):
25
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.
26
+ Vui lòng nhập 'Tôi đồng ý' hoặc nhấn Enter để chấp nhận các điều khoản, điều kiện và tiếp tục sử dụng phần mềm.
30
27
 
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.
28
+ Bạn cũng thể tự động chấp nhận điều khoản và ẩn thông báo này với câu lệnh mẫu bên dưới:
29
+ ```
30
+ import os
31
+ if "ACCEPT_TC" not in os.environ:
32
+ os.environ["ACCEPT_TC"] = "tôi đồng ý"
33
+ ```
34
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.
35
+ THOẢ THUẬN & GIẤY PHÉP SỬ DỤNG PHẦN MỀM VNSTOCK3
36
+ ------------------------------------------------
36
37
 
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
+ (*) Gói thư viện Python Vnstock thế hệ thứ 3 được phát hành vào tháng 5 năm 2024, được đề cập đến trong giấy phép này với tên gọi tắt Vnstock3.
38
39
 
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
+ Khi bạn truy cập, sử dụng nội dung mã nguồn Vnstock3, hoặc cài đặt Vnstock3 trên thiết bị của mình, bạn xác nhận rằng mình đã đọc, hiểu rõ, chấp nhận điều khoản sử dụng phần mềm như mô tả dưới đây. Bạn cần xác nhận điều khoản & điều kiện trong lần đầu tiên chạy thư viện Vnstock để có thể sử dụng.
40
41
 
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
+ I. ĐIỀU KHOẢN CHUNG
43
+ -------------------
42
44
 
43
- II. LƯU TRỮ & XỬ 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:
45
+ Cấp Phép: 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.
46
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ị. dụ: "123e4567-e89b-12d3-a456-426614174000".
47
+ Hạn Chế Sử Dụng Thương Mại: Sử dụng Vnstock3 cho mục đích thương mại bởi bất kỳ tổ chức nào là không được phép. Điều này bao gồm, nhưng không giới hạn, các hoạt động Vnstock3 trực tiếp hoặc gián tiếp góp phần tạo ra doanh thu hoặc dòng tiền cho một tổ chức mà không có sự chấp thuận bằng văn bản từ tác giả. Tuy nhiên, việc sử dụng Vnstock3 cho mục đích cá nhân, nghiên cứu vẫn được duy trì miễn phí.
48
48
 
49
- - Environment (Môi trường): tả môi trường chạy chương trình, như "development", "testing", hoặc "production". dụ: "production".
49
+ Các Mục Đích Sử Dụng Bị Cấm: 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.
50
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. dụ: "3.9.1".
51
+ Từ Chối Trách Nhiệm: 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.
52
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. dụ: "Windows".
53
+ Tuân Thủ Luật Pháp: Bạn đồng ý tuân thủ mọi luật pháp, quy định, hướng dẫn liên quan khi sử dụng thư viện này.
54
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. dụ: "10.0.19041".
55
+ Bảo Mật Dữ Liệu: Vnstock 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.
56
56
 
57
- - Machine (Máy): tả loại máy tính hoặc kiến trúc phần cứng. Ví dụ: "AMD64".
57
+ II. BẢN QUYỀN SỞ HỮU
58
+ -----------------------
58
59
 
59
- - CPU Model (Mô hình CPU): Thông tin về loại bộ xử (CPU) trên máy tính. Ví dụ: "Intel Core i7-8700".
60
+ Bản quyền (c) 2024 Thinh Vu @ Vnstock. Tất cả các quyền được bảo lưu.
60
61
 
61
- - CPU Cores (Số lõi CPU): Số lõi vật của CPU. dụ: 6.
62
+ Sử Dụng Phân Phối Không Được Phép: Việc sao chép, phân phối, hoặc khai thác thương mại Vnstock3, hoặc bất kỳ phần nào của nó là không được phép. Giới hạn này bao gồm bất kỳ hình thức tạo ra doanh thu hoặc sử dụng cho tổ chức mà không được sự cho phép rõ ràng của tác giả. Tuy nhiên, việc sử dụng cá nhân, chỉnh sửa, và nghiên cứu học thuật không liên quan đến lợi ích thương mại vẫn được duy trì. Người dùng tham gia vào các hoạt động được cho phép nên tôn trọng mục đích của phần mềm này như một công cụ cho việc thúc đẩy phát triển cá nhân và mục đích giáo dục, chứ không phải để lợi dụng tính chất mở của phần mềm cho mục đích sinh lợi trong khi tổ chức vốn có nguồn tiềm lực về tài chính và con người nhưng không chia sẻ với tác giả và đội ngũ phát triển. Vi phạm các điều khoản này tương đương với việc đánh cắp quyền sở hữu trí tuệ và phi đạo đức, có thể dẫn đến các rắc rối pháp lý kèm theo.
62
63
 
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. dụ: 12.
64
+ III. CHẤM DỨT
65
+ -------------
64
66
 
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). dụ: 16.0 GB.
67
+ Thỏa thuận này hiệu lực cho đến khi được chấm dứt. sẽ tự động chấm dứt ngay lập tức không cần thông báo từ tác giả nếu bạn không tuân thủ bất kỳ điều khoản nào của thỏa thuận này. Sau khi chấm dứt, bạn phải hủy bỏ tất cả các bản sao của Vnstock3 và tất cả các bộ phận thành phần của nó.
66
68
 
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). dụ: 8.5 GB.
69
+ IV. ĐIỀU KHOẢN THI HÀNH
70
+ -----------------------
68
71
 
69
- - Local IP (Địa chỉ IP cục bộ): Địa chỉ IP cục bộ của máy tính.
72
+ Thỏa thuận này sẽ được điều chỉnh giải thích theo luật pháp của quốc gia mà tác giả cư trú, không kể đến các quy định xung đột của pháp luật.
70
73
 
71
- - MAC Address (Địa chỉ MAC): Địa chỉ MAC (Media Access Control) của thiết bị mạng. dụ: "00:1A:A2:3B:4C:5D".
74
+ Bằng cách sử dụng Vnstock3, bạn đồng ý rằng mình sẽ bị ràng buộc bởi các điều khoản của Thỏa thuận này. Nếu bạn không đồng ý với các điều khoản của Thỏa thuận này, vui lòng không cài đặt hoặc sử dụng Vnstock3.
72
75
  """
73
76
 
74
77
  self.home_dir = HOME_DIR
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: vnai
3
- Version: 0.0.6
3
+ Version: 0.0.8
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=g2A3xU7vNbC-P6P_0nhtwda3k0YcqyfiTVj7Z2BL8KE,16992
2
+ vnai-0.0.8.dist-info/METADATA,sha256=ONJePzbpjDWiCs-O4s52NJnppS-srWczJl6_79dwztE,576
3
+ vnai-0.0.8.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
4
+ vnai-0.0.8.dist-info/top_level.txt,sha256=4zI0qZHePCwvgSqXl4420sBcd0VzZn4MEcRsAIFae3k,5
5
+ vnai-0.0.8.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=72F-l8UJ5Egaez41BTN58SeDOxv7h78-PyYKKZK1T_U,15323
5
- vnai-0.0.6.dist-info/METADATA,sha256=8C-WvG-xSnUAyEDEJHL2-r7z58G_g47jvnzlLmyhGao,576
6
- vnai-0.0.6.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
7
- vnai-0.0.6.dist-info/top_level.txt,sha256=ZLryI6oFu_mU1ls4sX_Sr5-MFWmEwlxu2Xe6EaEObI4,9
8
- vnai-0.0.6.dist-info/RECORD,,
File without changes