arpakitlib 1.8.33__py3-none-any.whl → 1.8.35__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.
- arpakitlib/_arpakit_project_template_v_5/arpakitlib_project_template_info.json +1 -1
- arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/sqlalchemy_model/api_key.py +7 -0
- arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/sqlalchemy_model/story_log.py +8 -0
- arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/sqlalchemy_model/user.py +87 -0
- arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/sqlalchemy_model/user_token.py +5 -0
- arpakitlib/ar_arpakitlib_cli_util.py +0 -1
- arpakitlib/ar_openai_api_client_util.py +75 -19
- arpakitlib/ar_parse_command.py +0 -11
- {arpakitlib-1.8.33.dist-info → arpakitlib-1.8.35.dist-info}/METADATA +1 -1
- {arpakitlib-1.8.33.dist-info → arpakitlib-1.8.35.dist-info}/RECORD +13 -13
- {arpakitlib-1.8.33.dist-info → arpakitlib-1.8.35.dist-info}/LICENSE +0 -0
- {arpakitlib-1.8.33.dist-info → arpakitlib-1.8.35.dist-info}/WHEEL +0 -0
- {arpakitlib-1.8.33.dist-info → arpakitlib-1.8.35.dist-info}/entry_points.txt +0 -0
@@ -43,3 +43,10 @@ class ApiKeyDBM(SimpleDBM):
|
|
43
43
|
server_default="true",
|
44
44
|
nullable=False
|
45
45
|
)
|
46
|
+
|
47
|
+
def __repr__(self) -> str:
|
48
|
+
res = f"{self.entity_name} (id={self.id}, is_active={self.is_active}"
|
49
|
+
if self.title:
|
50
|
+
res += f", title={self.title}"
|
51
|
+
res += ")"
|
52
|
+
return res
|
arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/sqlalchemy_model/story_log.py
CHANGED
@@ -49,3 +49,11 @@ class StoryLogDBM(SimpleDBM):
|
|
49
49
|
server_default="{}",
|
50
50
|
nullable=False
|
51
51
|
)
|
52
|
+
|
53
|
+
@property
|
54
|
+
def sdp_allowed_levels(self) -> list[str]:
|
55
|
+
return self.Levels.values_list()
|
56
|
+
|
57
|
+
@property
|
58
|
+
def sdp_allowed_types(self) -> list[str]:
|
59
|
+
return self.Types.values_list()
|
@@ -57,6 +57,7 @@ class UserDBM(SimpleDBM):
|
|
57
57
|
nullable=True
|
58
58
|
)
|
59
59
|
|
60
|
+
# many to one
|
60
61
|
user_tokens: Mapped[list[UserTokenDBM]] = relationship(
|
61
62
|
"UserTokenDBM",
|
62
63
|
uselist=True,
|
@@ -64,6 +65,17 @@ class UserDBM(SimpleDBM):
|
|
64
65
|
foreign_keys="UserTokenDBM.user_id"
|
65
66
|
)
|
66
67
|
|
68
|
+
def __repr__(self) -> str:
|
69
|
+
if self.email is not None:
|
70
|
+
res = f"{self.entity_name} (id={self.id}, email={self.email})"
|
71
|
+
else:
|
72
|
+
res = f"{self.entity_name} (id={self.id})"
|
73
|
+
return res
|
74
|
+
|
75
|
+
@property
|
76
|
+
def sdp_allowed_roles(self) -> list[str]:
|
77
|
+
return self.Roles.values_list()
|
78
|
+
|
67
79
|
@property
|
68
80
|
def roles_has_admin(self) -> bool:
|
69
81
|
return self.Roles.admin in self.roles
|
@@ -85,3 +97,78 @@ class UserDBM(SimpleDBM):
|
|
85
97
|
roles = [roles]
|
86
98
|
raise_for_type(roles, list)
|
87
99
|
return bool(set(roles) & set(self.roles))
|
100
|
+
|
101
|
+
@property
|
102
|
+
def tg_first_name(self) -> str | None:
|
103
|
+
if self.tg_data and "first_name" in self.tg_data:
|
104
|
+
return self.tg_data["first_name"]
|
105
|
+
return None
|
106
|
+
|
107
|
+
@property
|
108
|
+
def sdp_tg_first_name(self) -> str | None:
|
109
|
+
return self.tg_first_name
|
110
|
+
|
111
|
+
@property
|
112
|
+
def tg_last_name(self) -> str | None:
|
113
|
+
if self.tg_data and "last_name" in self.tg_data:
|
114
|
+
return self.tg_data["last_name"]
|
115
|
+
return None
|
116
|
+
|
117
|
+
@property
|
118
|
+
def sdp_tg_last_name(self) -> str | None:
|
119
|
+
return self.tg_last_name
|
120
|
+
|
121
|
+
@property
|
122
|
+
def tg_language_code(self) -> str | None:
|
123
|
+
if self.tg_data and "language_code" in self.tg_data:
|
124
|
+
return self.tg_data["language_code"]
|
125
|
+
return None
|
126
|
+
|
127
|
+
@property
|
128
|
+
def sdp_tg_language_code(self) -> str | None:
|
129
|
+
return self.tg_language_code
|
130
|
+
|
131
|
+
@property
|
132
|
+
def tg_username(self) -> str | None:
|
133
|
+
if self.tg_data and "username" in self.tg_data:
|
134
|
+
return self.tg_data["username"]
|
135
|
+
return None
|
136
|
+
|
137
|
+
@property
|
138
|
+
def sdp_tg_username(self) -> str | None:
|
139
|
+
return self.tg_username
|
140
|
+
|
141
|
+
@property
|
142
|
+
def tg_at_username(self) -> str | None:
|
143
|
+
if self.tg_username:
|
144
|
+
return f"@{self.tg_username}"
|
145
|
+
return None
|
146
|
+
|
147
|
+
@property
|
148
|
+
def sdp_tg_at_username(self) -> str | None:
|
149
|
+
return self.tg_at_username
|
150
|
+
|
151
|
+
@property
|
152
|
+
def tg_fullname(self) -> str | None:
|
153
|
+
if not self.tg_first_name and not self.tg_last_name:
|
154
|
+
return None
|
155
|
+
res = ""
|
156
|
+
if self.tg_first_name:
|
157
|
+
res += self.tg_first_name
|
158
|
+
if self.tg_last_name:
|
159
|
+
res += " " + self.tg_last_name
|
160
|
+
return res
|
161
|
+
|
162
|
+
@property
|
163
|
+
def sdp_tg_fullname(self) -> str | None:
|
164
|
+
return self.tg_fullname
|
165
|
+
|
166
|
+
@property
|
167
|
+
def tg_link_by_username(self) -> str | None:
|
168
|
+
if not self.tg_username:
|
169
|
+
return None
|
170
|
+
return f"https://t.me/{self.tg_username}"
|
171
|
+
|
172
|
+
@property
|
173
|
+
def sdp_tg_link_by_username(self) -> str | None:
|
174
|
+
return self.tg_link_by_username
|
arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/sqlalchemy_model/user_token.py
CHANGED
@@ -45,9 +45,14 @@ class UserTokenDBM(SimpleDBM):
|
|
45
45
|
nullable=False
|
46
46
|
)
|
47
47
|
|
48
|
+
# one to many
|
48
49
|
user: Mapped[UserDBM] = relationship(
|
49
50
|
"UserDBM",
|
50
51
|
uselist=False,
|
51
52
|
back_populates="user_tokens",
|
52
53
|
foreign_keys=[user_id]
|
53
54
|
)
|
55
|
+
|
56
|
+
def __repr__(self) -> str:
|
57
|
+
res = f"{self.entity_name} (id={self.id}, user_id={self.user_id})"
|
58
|
+
return res
|
@@ -14,7 +14,6 @@ def execute_arpakitlib_cli(*, full_command: str | None = None):
|
|
14
14
|
full_command = " ".join(sys.argv)
|
15
15
|
|
16
16
|
parsed_command = parse_command(text=full_command)
|
17
|
-
parsed_command.raise_for_command(needed_command="arpakitlib", lower_=True)
|
18
17
|
|
19
18
|
command = parsed_command.get_value_by_keys(keys=["command", "c"])
|
20
19
|
if command:
|
@@ -2,9 +2,12 @@
|
|
2
2
|
|
3
3
|
import asyncio
|
4
4
|
import logging
|
5
|
-
from typing import Optional
|
6
5
|
|
6
|
+
import httpx
|
7
7
|
from openai import OpenAI, AsyncOpenAI
|
8
|
+
from openai.types.chat import ChatCompletion
|
9
|
+
|
10
|
+
from arpakitlib.ar_logging_util import setup_normal_logging
|
8
11
|
|
9
12
|
_ARPAKIT_LIB_MODULE_VERSION = "3.0"
|
10
13
|
|
@@ -17,8 +20,8 @@ class OpenAIAPIClient:
|
|
17
20
|
def __init__(
|
18
21
|
self,
|
19
22
|
*,
|
20
|
-
open_ai:
|
21
|
-
async_open_ai:
|
23
|
+
open_ai: OpenAI,
|
24
|
+
async_open_ai: AsyncOpenAI
|
22
25
|
):
|
23
26
|
self._logger = logging.getLogger(self.__class__.__name__)
|
24
27
|
|
@@ -47,27 +50,80 @@ class OpenAIAPIClient:
|
|
47
50
|
self._logger.error(e)
|
48
51
|
return False
|
49
52
|
|
53
|
+
def simple_ask(self, *, prompt: str | None = None, string: str) -> ChatCompletion:
|
54
|
+
messages = []
|
55
|
+
if prompt is not None:
|
56
|
+
messages.append({
|
57
|
+
"role": "system",
|
58
|
+
"content": prompt
|
59
|
+
})
|
60
|
+
messages.append({
|
61
|
+
"role": "user",
|
62
|
+
"content": string
|
63
|
+
})
|
64
|
+
response: ChatCompletion = self.open_ai.chat.completions.create(
|
65
|
+
model="gpt-4o",
|
66
|
+
messages=messages,
|
67
|
+
n=1,
|
68
|
+
temperature=0.1,
|
69
|
+
top_p=0.9,
|
70
|
+
max_tokens=300
|
71
|
+
)
|
72
|
+
return response
|
73
|
+
|
74
|
+
async def async_simple_ask(self, *, prompt: str | None = None, string: str) -> ChatCompletion:
|
75
|
+
messages = []
|
76
|
+
if prompt is not None:
|
77
|
+
messages.append({
|
78
|
+
"role": "system",
|
79
|
+
"content": prompt
|
80
|
+
})
|
81
|
+
messages.append({
|
82
|
+
"role": "user",
|
83
|
+
"content": string
|
84
|
+
})
|
85
|
+
response: ChatCompletion = await self.async_open_ai.chat.completions.create(
|
86
|
+
model="gpt-4o",
|
87
|
+
messages=messages,
|
88
|
+
n=1,
|
89
|
+
temperature=0.1,
|
90
|
+
top_p=0.9,
|
91
|
+
max_tokens=300
|
92
|
+
)
|
93
|
+
return response
|
50
94
|
|
51
|
-
def __example():
|
52
|
-
open_ai = OpenAI(api_key="your-api-key")
|
53
|
-
client = OpenAIAPIClient(open_ai=open_ai)
|
54
95
|
|
55
|
-
|
56
|
-
|
57
|
-
print("Connection to OpenAI API is good")
|
58
|
-
else:
|
59
|
-
print("Failed to connect to OpenAI API")
|
96
|
+
def __example():
|
97
|
+
pass
|
60
98
|
|
61
99
|
|
62
100
|
async def __async_example():
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
101
|
+
setup_normal_logging()
|
102
|
+
api_key = ""
|
103
|
+
base_url = "https://api.proxyapi.ru/openai/v1"
|
104
|
+
client = OpenAIAPIClient(
|
105
|
+
open_ai=OpenAI(
|
106
|
+
api_key=api_key,
|
107
|
+
base_url=base_url,
|
108
|
+
timeout=httpx.Timeout(
|
109
|
+
timeout=60,
|
110
|
+
)
|
111
|
+
),
|
112
|
+
async_open_ai=AsyncOpenAI(
|
113
|
+
api_key=api_key,
|
114
|
+
base_url=base_url,
|
115
|
+
timeout=httpx.Timeout(
|
116
|
+
timeout=60,
|
117
|
+
)
|
118
|
+
)
|
119
|
+
)
|
120
|
+
|
121
|
+
print(await client.async_is_conn_good())
|
122
|
+
|
123
|
+
response = client.simple_ask(
|
124
|
+
string="Привет, проверяю тебя"
|
125
|
+
)
|
126
|
+
print(response.choices[0].message.content)
|
71
127
|
|
72
128
|
|
73
129
|
if __name__ == '__main__':
|
arpakitlib/ar_parse_command.py
CHANGED
@@ -4,8 +4,6 @@ import shlex
|
|
4
4
|
|
5
5
|
from pydantic import BaseModel
|
6
6
|
|
7
|
-
from arpakitlib.ar_enumeration_util import ValuesForParseType
|
8
|
-
|
9
7
|
_ARPAKIT_LIB_MODULE_VERSION = "3.0"
|
10
8
|
|
11
9
|
|
@@ -19,15 +17,6 @@ class ParsedCommand(BaseModel):
|
|
19
17
|
key_to_value: dict[str, str | None] = {}
|
20
18
|
values_without_key: list[str] = []
|
21
19
|
|
22
|
-
def raise_for_command(self, needed_command: str, lower_: bool = True):
|
23
|
-
needed_command = needed_command.strip()
|
24
|
-
|
25
|
-
if (
|
26
|
-
(self.command.lower() if lower_ else self.command)
|
27
|
-
!= (needed_command.lower() if lower_ else needed_command)
|
28
|
-
):
|
29
|
-
raise ValuesForParseType(f"needed_command != {self.command}, lower_={lower_}")
|
30
|
-
|
31
20
|
@property
|
32
21
|
def keys(self) -> list[str]:
|
33
22
|
return [k for k, v in self.key_to_value.items() if v is not None]
|
@@ -8,7 +8,7 @@ arpakitlib/_arpakit_project_template_v_5/alembic/env.py,sha256=Qesmnj5A2kB-Doeuf
|
|
8
8
|
arpakitlib/_arpakit_project_template_v_5/alembic/script.py.mako,sha256=MEqL-2qATlST9TAOeYgscMn1uy6HUS9NFvDgl93dMj8,635
|
9
9
|
arpakitlib/_arpakit_project_template_v_5/alembic/versions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
10
10
|
arpakitlib/_arpakit_project_template_v_5/alembic.ini,sha256=8fuyeEvGBiPGbxEFy8ISBV3xX_fgVmuhEGpB10_B5Uo,3733
|
11
|
-
arpakitlib/_arpakit_project_template_v_5/arpakitlib_project_template_info.json,sha256=
|
11
|
+
arpakitlib/_arpakit_project_template_v_5/arpakitlib_project_template_info.json,sha256=1yBXVYHqWXXFkBgsR8s0cnmOUp-UPhfz4_AboylAxGI,97
|
12
12
|
arpakitlib/_arpakit_project_template_v_5/command/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
13
13
|
arpakitlib/_arpakit_project_template_v_5/command/alembic_history.sh,sha256=OMnDNtHIksGh9iavWnzbtxcudZW4vjdcISsBXvzZSPw,22
|
14
14
|
arpakitlib/_arpakit_project_template_v_5/command/alembic_revision_autogenerate.sh,sha256=yW2i-SBOtBx15Ya0poVQqKkJM5t2JZp06r9AEW-DmGE,46
|
@@ -219,12 +219,12 @@ arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/__init__.py,sha2
|
|
219
219
|
arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/const.py,sha256=dcvj5C9E2F2KCsGZPBBncQf_EvVJAC1qQgnyD8P4ZEw,6
|
220
220
|
arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/sqlalchemy_db.py,sha256=1y3FaMFzm_5UM2poqtBve_UP_mh1vjs--krq6yO8PsA,742
|
221
221
|
arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/sqlalchemy_model/__init__.py,sha256=btSjCQ7RJqomeXzYs9HePCu1dZHs0z6-RuboYKG89_8,598
|
222
|
-
arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/sqlalchemy_model/api_key.py,sha256=
|
222
|
+
arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/sqlalchemy_model/api_key.py,sha256=XBw5qVM6Qc5i5Sgercec90y2RhqhMZWouVXd1vTKay4,1310
|
223
223
|
arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/sqlalchemy_model/common.py,sha256=xhMxNea8ndjmdsNwp_a9L_VUkkRb8jjVLhczxDasNss,2090
|
224
224
|
arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/sqlalchemy_model/operation.py,sha256=0uhlkE95_lX8Nmgl2n5oJ7lty558Y6ZOoQc6lfuSyCY,3496
|
225
|
-
arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/sqlalchemy_model/story_log.py,sha256=
|
226
|
-
arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/sqlalchemy_model/user.py,sha256=
|
227
|
-
arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/sqlalchemy_model/user_token.py,sha256=
|
225
|
+
arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/sqlalchemy_model/story_log.py,sha256=ScXzpiD0El5HE4hRxhIGbfnBRtAqye9-wTeRgo-KpnI,1510
|
226
|
+
arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/sqlalchemy_model/user.py,sha256=fojNxMRbfiv8RuhkUgOp-AZM4q2bdPZklTO_IjQscoo,4754
|
227
|
+
arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/sqlalchemy_model/user_token.py,sha256=CquJ6NHlBxUOP8NM8IjZSM1Vh8jaNC5fTO1yT38dR3w,1542
|
228
228
|
arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/util.py,sha256=QSA_nT6aWdtE412-Uj3VTd7yh3dzS4HugDK9FivjTPo,570
|
229
229
|
arpakitlib/_arpakit_project_template_v_5/project/test_data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
230
230
|
arpakitlib/_arpakit_project_template_v_5/project/test_data/make_test_api_keys.py,sha256=RXIEB5zOFHtQ_B0t_JlQ0ihjFbkVtW7six6CLdxft3w,901
|
@@ -313,7 +313,7 @@ arpakitlib/ar_arpakit_lib_module_util.py,sha256=g9uWwTK2eEzmErqwYeVgXDYVMREN8m5C
|
|
313
313
|
arpakitlib/ar_arpakit_project_template_util.py,sha256=5-o6eTmh-2DqsIqmo63SXw7ttExhmuAehMNc4s0GdtU,3278
|
314
314
|
arpakitlib/ar_arpakit_schedule_uust_api_client_util.py,sha256=MRPaF31CRhYA45ldPnoRpaTPMazCJq0jbwDxW5rvMww,12937
|
315
315
|
arpakitlib/ar_arpakit_schedule_uust_site_util.py,sha256=8wLct9Gd4MWkXzB6nSmETAwTPLw8lfpWgx0LoWSAOvg,1643
|
316
|
-
arpakitlib/ar_arpakitlib_cli_util.py,sha256
|
316
|
+
arpakitlib/ar_arpakitlib_cli_util.py,sha256=RJGcfEZ_q74FJ4tqdXvt7xQpShTszOvKu1mbp3D8qzw,2599
|
317
317
|
arpakitlib/ar_base64_util.py,sha256=aZkg2cZTuAaP2IWeG_LXJ6RO7qhyskVwec-Lks0iM-k,676
|
318
318
|
arpakitlib/ar_base_worker_util.py,sha256=eyaoDy4T_wKSNFu_npigVYZKHpxmt66Vdzb3gZ2BAis,5861
|
319
319
|
arpakitlib/ar_blank_util.py,sha256=oMVsRr54dQpsiVSasmqvNR5-d5vARvVPOrfPqIgq2eI,143
|
@@ -340,8 +340,8 @@ arpakitlib/ar_list_util.py,sha256=2woOAHAU8oTIiVjZ8GLnx15odEaoQUq3Q0JPxlufFF0,45
|
|
340
340
|
arpakitlib/ar_logging_util.py,sha256=GLw87L6qUASHS4-eAoBW0kN2hHXVdmWcmE9huw-J5aI,1681
|
341
341
|
arpakitlib/ar_mongodb_util.py,sha256=2ECkTnGAZ92qxioL-fmN6R4yZOSr3bXdXLWTzT1C3vk,4038
|
342
342
|
arpakitlib/ar_need_type_util.py,sha256=l4ky_15KKwqgYf2WTgEaKfBI15jZbnszOeQjwC0YUmk,2312
|
343
|
-
arpakitlib/ar_openai_api_client_util.py,sha256=
|
344
|
-
arpakitlib/ar_parse_command.py,sha256
|
343
|
+
arpakitlib/ar_openai_api_client_util.py,sha256=dQv0rWnONkmI9bD2eUWihvutwIfp1oxsBJuHRQu27BU,3185
|
344
|
+
arpakitlib/ar_parse_command.py,sha256=1WTdQoWVshoDZ1jDaKeTzajfqaYHP3FNO0-REyo1aMY,3003
|
345
345
|
arpakitlib/ar_postgresql_util.py,sha256=1AuLjEaa1Lg4pzn-ukCVnDi35Eg1k91APRTqZhIJAdo,945
|
346
346
|
arpakitlib/ar_rat_func_util.py,sha256=Ca10o3RJwyx_DJLxjTxgHDO6NU3M6CWgUR4bif67OE4,2006
|
347
347
|
arpakitlib/ar_retry_func_util.py,sha256=LB4FJRsu2cssnPw6X8bCEcaGpQsXhkLkgeU37w1t9fU,2250
|
@@ -358,8 +358,8 @@ arpakitlib/ar_type_util.py,sha256=Cs_tef-Fc5xeyAF54KgISCsP11NHyzIsglm4S3Xx7iM,40
|
|
358
358
|
arpakitlib/ar_wata_api_client.py,sha256=gdHOqDbuqxhTjVDtRW1DvkRJLdDofCrOq51GTctzLns,242
|
359
359
|
arpakitlib/ar_yookassa_api_client_util.py,sha256=VozuZeCJjmLd1zj2BdC9WfiAQ3XYOrIMsdpNK-AUlm0,5347
|
360
360
|
arpakitlib/ar_zabbix_api_client_util.py,sha256=Q-VR4MvoZ9aHwZeYZr9G3LwN-ANx1T5KFmF6pvPM-9M,6402
|
361
|
-
arpakitlib-1.8.
|
362
|
-
arpakitlib-1.8.
|
363
|
-
arpakitlib-1.8.
|
364
|
-
arpakitlib-1.8.
|
365
|
-
arpakitlib-1.8.
|
361
|
+
arpakitlib-1.8.35.dist-info/LICENSE,sha256=GPEDQMam2r7FSTYqM1mm7aKnxLaWcBotH7UvQtea-ec,11355
|
362
|
+
arpakitlib-1.8.35.dist-info/METADATA,sha256=Xr542pGeITbamcRcWnHqa0O79Vc86xtTi6KC0sIilWQ,3477
|
363
|
+
arpakitlib-1.8.35.dist-info/WHEEL,sha256=XbeZDeTWKc1w7CSIyre5aMDU_-PohRwTQceYnisIYYY,88
|
364
|
+
arpakitlib-1.8.35.dist-info/entry_points.txt,sha256=36xqR3PJFT2kuwjkM_EqoIy0qFUDPKSm_mJaI7emewE,87
|
365
|
+
arpakitlib-1.8.35.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|