arpakitlib 1.8.32__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/ar_sqlalchemy_util.py +54 -20
- arpakitlib/ar_ssh_runner_util.py +5 -1
- {arpakitlib-1.8.32.dist-info → arpakitlib-1.8.35.dist-info}/METADATA +1 -1
- {arpakitlib-1.8.32.dist-info → arpakitlib-1.8.35.dist-info}/RECORD +15 -15
- {arpakitlib-1.8.32.dist-info → arpakitlib-1.8.35.dist-info}/LICENSE +0 -0
- {arpakitlib-1.8.32.dist-info → arpakitlib-1.8.35.dist-info}/WHEEL +0 -0
- {arpakitlib-1.8.32.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]
|
arpakitlib/ar_sqlalchemy_util.py
CHANGED
@@ -68,45 +68,79 @@ class BaseDBM(DeclarativeBase):
|
|
68
68
|
self._bus_data = {}
|
69
69
|
return self._bus_data
|
70
70
|
|
71
|
-
def simple_dict(
|
71
|
+
def simple_dict(
|
72
|
+
self,
|
73
|
+
*,
|
74
|
+
include_sd_properties: bool = True,
|
75
|
+
exclude_columns: set[str] | None = None,
|
76
|
+
exclude_sd_properties: set[str] | None = None
|
77
|
+
) -> dict[str, Any]:
|
78
|
+
if exclude_columns is None:
|
79
|
+
exclude_columns = set()
|
80
|
+
if exclude_sd_properties is None:
|
81
|
+
exclude_sd_properties = set()
|
82
|
+
|
72
83
|
res = {}
|
73
84
|
|
85
|
+
# Обрабатываем только колонки текущей модели
|
74
86
|
for c in inspect(self).mapper.column_attrs:
|
87
|
+
if c.key in exclude_columns:
|
88
|
+
continue # Пропускаем колонку, если она в exclude_columns
|
89
|
+
|
75
90
|
value = getattr(self, c.key)
|
76
|
-
|
77
|
-
res[c.key] = value.simple_dict(include_sd_properties=include_sd_properties)
|
78
|
-
elif isinstance(value, list):
|
79
|
-
res[c.key] = [
|
80
|
-
item.simple_dict(include_sd_properties=include_sd_properties)
|
81
|
-
if isinstance(item, BaseDBM) else item
|
82
|
-
for item in value
|
83
|
-
]
|
84
|
-
else:
|
85
|
-
res[c.key] = value
|
91
|
+
res[c.key] = value # Просто сохраняем значение
|
86
92
|
|
93
|
+
# Обработка свойств с префиксом "sdp_"
|
87
94
|
if include_sd_properties:
|
88
95
|
for attr_name in dir(self):
|
89
96
|
if attr_name.startswith("sdp_") and isinstance(getattr(type(self), attr_name, None), property):
|
90
|
-
|
97
|
+
|
98
|
+
sdp_property_name = attr_name.removeprefix("sdp_")
|
99
|
+
if sdp_property_name in exclude_sd_properties:
|
100
|
+
continue # Пропускаем свойство, если оно в exclude_sdp_properties
|
101
|
+
|
91
102
|
value = getattr(self, attr_name)
|
92
103
|
if isinstance(value, BaseDBM):
|
93
|
-
res[
|
104
|
+
res[sdp_property_name] = value.simple_dict(include_sd_properties=include_sd_properties)
|
94
105
|
elif isinstance(value, list):
|
95
|
-
res[
|
106
|
+
res[sdp_property_name] = [
|
96
107
|
item.simple_dict(include_sd_properties=include_sd_properties)
|
97
108
|
if isinstance(item, BaseDBM) else item
|
98
109
|
for item in value
|
99
110
|
]
|
100
111
|
else:
|
101
|
-
res[
|
112
|
+
res[sdp_property_name] = value
|
102
113
|
|
103
114
|
return res
|
104
115
|
|
105
|
-
def simple_dict_with_sd_properties(
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
116
|
+
def simple_dict_with_sd_properties(
|
117
|
+
self,
|
118
|
+
*,
|
119
|
+
exclude_columns: set[str] | None = None,
|
120
|
+
exclude_sdp_properties: set[str] | None = None
|
121
|
+
) -> dict[str, Any]:
|
122
|
+
return self.simple_dict(
|
123
|
+
include_sd_properties=True,
|
124
|
+
exclude_columns=exclude_columns,
|
125
|
+
exclude_sd_properties=exclude_sdp_properties
|
126
|
+
)
|
127
|
+
|
128
|
+
def simple_dict_json(
|
129
|
+
self,
|
130
|
+
*,
|
131
|
+
include_sd_properties: bool = True,
|
132
|
+
exclude_columns: set[str] | None = None,
|
133
|
+
exclude_sdp_properties: set[str] | None = None
|
134
|
+
) -> str:
|
135
|
+
return transfer_data_to_json_str(
|
136
|
+
data=self.simple_dict(
|
137
|
+
include_sd_properties=include_sd_properties,
|
138
|
+
exclude_columns=exclude_columns,
|
139
|
+
exclude_sd_properties=exclude_sdp_properties
|
140
|
+
),
|
141
|
+
beautify=True,
|
142
|
+
fast=False
|
143
|
+
)
|
110
144
|
|
111
145
|
|
112
146
|
class SQLAlchemyDb:
|
arpakitlib/ar_ssh_runner_util.py
CHANGED
@@ -61,7 +61,11 @@ class SSHRunRes(BaseModel):
|
|
61
61
|
}
|
62
62
|
|
63
63
|
def simple_json(self) -> str:
|
64
|
-
return transfer_data_to_json_str(
|
64
|
+
return transfer_data_to_json_str(
|
65
|
+
self.simple_dict(),
|
66
|
+
beautify=True,
|
67
|
+
fast=False
|
68
|
+
)
|
65
69
|
|
66
70
|
def __repr__(self) -> str:
|
67
71
|
return self.simple_json()
|
@@ -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
|
@@ -350,16 +350,16 @@ arpakitlib/ar_schedule_uust_api_client_util.py,sha256=rXI2_3OTaIBgR-GixM1Ti-Ue1f
|
|
350
350
|
arpakitlib/ar_settings_util.py,sha256=Y5wi_cmsjDjfJpM0VJHjbo0NoVPKfypKaD1USowwDtQ,1327
|
351
351
|
arpakitlib/ar_sleep_util.py,sha256=OaLtRaJQWMkGjfj_mW1RB2P4RaSWsAIH8LUoXqsH0zM,1061
|
352
352
|
arpakitlib/ar_sqladmin_util.py,sha256=Jd33EX_fAso4bvrcDhNEYOUlUHkudbadNGOJDg7rqhQ,301
|
353
|
-
arpakitlib/ar_sqlalchemy_util.py,sha256
|
354
|
-
arpakitlib/ar_ssh_runner_util.py,sha256=
|
353
|
+
arpakitlib/ar_sqlalchemy_util.py,sha256=-nttk279GV5HjtJ3mDI0HlDb2sEBhyF7IgdvzA0j4ss,11422
|
354
|
+
arpakitlib/ar_ssh_runner_util.py,sha256=yvAwza480MkHKvLkDEsR7JNh2bYNs6P9rCVo4NA85NE,6865
|
355
355
|
arpakitlib/ar_steam_payment_api_client_util.py,sha256=onvb3jt9bWfsCLbVLaApbN_-cqCu1CduVhM9GhG5yTA,250
|
356
356
|
arpakitlib/ar_str_util.py,sha256=RIaSNA4nBDhJjQqg3KzULo6OnGUfE2uIqBAHCv3ahLE,3842
|
357
357
|
arpakitlib/ar_type_util.py,sha256=Cs_tef-Fc5xeyAF54KgISCsP11NHyzIsglm4S3Xx7iM,4049
|
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
|