sysnet-pyutils 1.1.5__py3-none-any.whl → 1.2.1__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.
- sysnet_pyutils/ident.py +3 -2
- sysnet_pyutils/models/general.py +20 -11
- sysnet_pyutils/utils.py +14 -3
- {sysnet_pyutils-1.1.5.dist-info → sysnet_pyutils-1.2.1.dist-info}/METADATA +20 -14
- {sysnet_pyutils-1.1.5.dist-info → sysnet_pyutils-1.2.1.dist-info}/RECORD +8 -8
- {sysnet_pyutils-1.1.5.dist-info → sysnet_pyutils-1.2.1.dist-info}/WHEEL +1 -1
- {sysnet_pyutils-1.1.5.dist-info → sysnet_pyutils-1.2.1.dist-info/licenses}/LICENSE +0 -0
- {sysnet_pyutils-1.1.5.dist-info → sysnet_pyutils-1.2.1.dist-info}/top_level.txt +0 -0
sysnet_pyutils/ident.py
CHANGED
@@ -9,6 +9,7 @@
|
|
9
9
|
# -------------------------------------------------------------------------------
|
10
10
|
import os
|
11
11
|
import uuid
|
12
|
+
from typing import Optional
|
12
13
|
|
13
14
|
import sysnet_pyutils.barcode as barcode
|
14
15
|
|
@@ -53,7 +54,7 @@ def generate_tiny_uuid():
|
|
53
54
|
return out[-ID_LENGTH:]
|
54
55
|
|
55
56
|
|
56
|
-
def generate_id12(three_char_prefix: str) -> str:
|
57
|
+
def generate_id12(three_char_prefix: Optional[str]) -> str:
|
57
58
|
"""
|
58
59
|
Vygeneruje 12místný alfanumerický identifikátor s pevným prefixem
|
59
60
|
|
@@ -105,7 +106,7 @@ def correct_pid(pid: str) -> str:
|
|
105
106
|
|
106
107
|
def generate_pid() -> str:
|
107
108
|
"""
|
108
|
-
|
109
|
+
Vygeneruje nový PID
|
109
110
|
|
110
111
|
:return: PID
|
111
112
|
"""
|
sysnet_pyutils/models/general.py
CHANGED
@@ -3,7 +3,6 @@ from __future__ import annotations
|
|
3
3
|
from datetime import datetime
|
4
4
|
from enum import Enum
|
5
5
|
from typing import Optional, List, Tuple, Any
|
6
|
-
from uuid import UUID
|
7
6
|
|
8
7
|
from pydantic import BaseModel, Field, EmailStr
|
9
8
|
|
@@ -42,16 +41,20 @@ class UserType(BaseModel):
|
|
42
41
|
name_full: Optional[str] = Field(default=None, description='Úplné jméno uživatele', examples=['MUDr. Jiří Novák, PhD.'])
|
43
42
|
|
44
43
|
|
45
|
-
class
|
46
|
-
|
47
|
-
WRITE = 'W'
|
48
|
-
MANAGE = 'M'
|
44
|
+
class BaseEnum(Enum):
|
45
|
+
pass
|
49
46
|
|
50
47
|
@classmethod
|
51
48
|
def has_value(cls, value):
|
52
49
|
return value in cls._value2member_map_
|
53
50
|
|
54
51
|
|
52
|
+
class AclLevelEnum(BaseEnum):
|
53
|
+
READ = 'R'
|
54
|
+
WRITE = 'W'
|
55
|
+
MANAGE = 'M'
|
56
|
+
|
57
|
+
|
55
58
|
class CodeValueType(BaseModel):
|
56
59
|
# kód/hodnota
|
57
60
|
code: Optional[str] = Field(default=None, description='Kód položky', examples=['CZ'])
|
@@ -90,7 +93,8 @@ class ContainerHistoryItemType(BaseModel):
|
|
90
93
|
# položka historie zařazení do kontejnerů
|
91
94
|
timestamp: datetime = Field(default=local_now(), description='Časová značka logu')
|
92
95
|
originator: Optional[str] = Field(default='SYSTEM', description='Zdroj logu', examples=['<NAME>'])
|
93
|
-
container: Optional[UUID] = Field(default=None, description='Identifikátor kontejneru')
|
96
|
+
# container: Optional[UUID] = Field(default=None, description='Identifikátor kontejneru')
|
97
|
+
container: Optional[str] = Field(default=None, description='Identifikátor kontejneru')
|
94
98
|
message: Optional[str] = Field(default=None, description='Zpráva logu', examples=['Autorizováno'])
|
95
99
|
|
96
100
|
|
@@ -113,7 +117,8 @@ class MetadataTypeEntry(BaseModel):
|
|
113
117
|
id_no: Optional[str] = Field(default=None, description='Číslo dokumentu', examples=['23CZ123456'])
|
114
118
|
unid: Optional[str] = Field(default=None, description='Domino universal ID', examples=['3005277CB984B7FFC12587890060E2BF'])
|
115
119
|
pid: Optional[str] = Field(default=None, description='Unique identifier', examples=['MBOA7HNBDJTR'])
|
116
|
-
uuid: Optional[UUID] = Field(default=None, description='Unique identifier')
|
120
|
+
# uuid: Optional[UUID] = Field(default=None, description='Unique identifier')
|
121
|
+
uuid: Optional[str] = Field(default=None, description='Unique identifier')
|
117
122
|
form: Optional[str] = Field(default=None, description='Formulář', examples=['certificate'])
|
118
123
|
authorized: Optional[bool] = Field(default=False, description='Dokument byl autorizován')
|
119
124
|
archived: Optional[bool] = Field(default=False, description='Dokument byl archivován')
|
@@ -163,13 +168,15 @@ class MetadataType(MetadataTypeBase):
|
|
163
168
|
)
|
164
169
|
unid: Optional[str] = Field(default=None, description='Domino universal ID', examples=['3005277CB984B7FFC12587890060E2BF'])
|
165
170
|
pid: Optional[str] = Field(default=None, description='Unique identifier', examples=['MBOA7HNBDJTR'])
|
166
|
-
uuid: Optional[UUID] = Field(default=None, description='Unique identifier')
|
171
|
+
# uuid: Optional[UUID] = Field(default=None, description='Unique identifier')
|
172
|
+
uuid: Optional[str] = Field(default=None, description='Unique identifier')
|
167
173
|
form: Optional[str] = Field(default=None, description='Formulář', examples=['certificate'])
|
168
174
|
authorized: Optional[bool] = Field(default=False, description='Dokument byl autorizován')
|
169
175
|
archived: Optional[bool] = Field(default=False, description='Dokument byl archivován')
|
170
176
|
deleted: Optional[bool] = Field(default=False, description='Dokument byl odstraněn')
|
171
177
|
has_attachments: Optional[bool] = Field(default=False, description='Dokument má/nemá přílohy')
|
172
|
-
container: Optional[UUID] = Field(default=None, description='Identifikátor kontejneru, do kterého je dokument zařazen.')
|
178
|
+
# container: Optional[UUID] = Field(default=None, description='Identifikátor kontejneru, do kterého je dokument zařazen.')
|
179
|
+
container: Optional[str] = Field(default=None, description='Identifikátor kontejneru, do kterého je dokument zařazen.')
|
173
180
|
container_history: Optional[List[Optional[ContainerHistoryItemType]]] = Field(default=None, description='Historie kontejnerů')
|
174
181
|
|
175
182
|
|
@@ -187,7 +194,8 @@ class LinkedType(BaseModel):
|
|
187
194
|
id: Optional[str] = Field(default=None, description='Hlavní identifikátor', examples=['0c282c62-1918-4fbe-ad2c-e49a021f4801'])
|
188
195
|
unid: Optional[str] = Field(default=None, description='Domino universal ID', examples=['3005277CB984B7FFC12587890060E2BF'])
|
189
196
|
pid: Optional[str] = Field(default=None, description='PID (dvanáctimístný identifikátor', examples=['MBOA7HNBDJTR'])
|
190
|
-
uuid: Optional[UUID] = Field(default=None, description='Jednoznačný identifikátor', examples=['0c282c62-1918-4fbe-ad2c-e49a021f4801'])
|
197
|
+
# uuid: Optional[UUID] = Field(default=None, description='Jednoznačný identifikátor', examples=['0c282c62-1918-4fbe-ad2c-e49a021f4801'])
|
198
|
+
uuid: Optional[str] = Field(default=None, description='Jednoznačný identifikátor', examples=['0c282c62-1918-4fbe-ad2c-e49a021f4801'])
|
191
199
|
|
192
200
|
|
193
201
|
class GeoPointJtskType(BaseModel):
|
@@ -250,7 +258,8 @@ class PersonBaseType(PersonCoreType):
|
|
250
258
|
identifier: Optional[str] = Field(default=None, description='Hlavní jednoznačný identifikátor')
|
251
259
|
unid: Optional[str] = Field(default=None, description='Domino universal ID', examples=['3005277CB984B7FFC12587890060E2BF'])
|
252
260
|
pid: Optional[str] = Field(default=None, description='Unique identifier', examples=['MBOA7HNBDJTR'])
|
253
|
-
uuid: Optional[UUID] = Field(default=None, description='Unique identifier (UUID)')
|
261
|
+
# uuid: Optional[UUID] = Field(default=None, description='Unique identifier (UUID)')
|
262
|
+
uuid: Optional[str] = Field(default=None, description='Unique identifier (UUID)')
|
254
263
|
main_person: Optional[LinkedType] = Field(default=None, description='Odkaz na hlavní osobu do registru')
|
255
264
|
linked_persons: Optional[List[Optional[LinkedType]]] = Field(default=None, description='Odkaz na další osoby do registru')
|
256
265
|
|
sysnet_pyutils/utils.py
CHANGED
@@ -7,7 +7,7 @@ import secrets
|
|
7
7
|
import sys
|
8
8
|
import traceback
|
9
9
|
from datetime import datetime, timedelta, date
|
10
|
-
from typing import Tuple, Union, List, Any
|
10
|
+
from typing import Tuple, Union, List, Any, Optional
|
11
11
|
from urllib.parse import quote
|
12
12
|
from uuid import UUID, uuid4, uuid1
|
13
13
|
|
@@ -16,7 +16,7 @@ import pytz
|
|
16
16
|
import xmltodict
|
17
17
|
import yaml
|
18
18
|
|
19
|
-
from sysnet_pyutils.ident import generate_pid, check_pid, correct_pid, generate_id12
|
19
|
+
from sysnet_pyutils.ident import generate_pid, check_pid, correct_pid, generate_id12, PID_PREFIX
|
20
20
|
|
21
21
|
TZ = os.getenv('TZ', 'Europe/Prague')
|
22
22
|
DEBUG = os.getenv("DEBUG", 'True').lower() in ('true', '1', 't')
|
@@ -177,6 +177,10 @@ def api_keys_init(agenda: str='main', amount: int =4) -> List[dict]:
|
|
177
177
|
return out
|
178
178
|
|
179
179
|
|
180
|
+
def uuid_factory():
|
181
|
+
return str(uuid4())
|
182
|
+
|
183
|
+
|
180
184
|
def uuid_next(uuid_type: int = 4) -> UUID:
|
181
185
|
"""
|
182
186
|
Vygeneruje UUID
|
@@ -191,6 +195,13 @@ def uuid_next(uuid_type: int = 4) -> UUID:
|
|
191
195
|
return out
|
192
196
|
|
193
197
|
|
198
|
+
def pid_factory(prefix=None) -> str:
|
199
|
+
p = PID_PREFIX
|
200
|
+
if prefix not in [None, ''] and len(prefix) > 2:
|
201
|
+
p = prefix[:3].upper()
|
202
|
+
return generate_id12(three_char_prefix=p)
|
203
|
+
|
204
|
+
|
194
205
|
def pid_next() -> str:
|
195
206
|
"""
|
196
207
|
Vygeneruje korektní PID
|
@@ -865,7 +876,7 @@ def timestamp(local=False) -> str:
|
|
865
876
|
return out.strftime('%Y%m%d%H%M%S')
|
866
877
|
|
867
878
|
|
868
|
-
def local_datetime(value=None) -> datetime:
|
879
|
+
def local_datetime(value=None) -> Optional[datetime]:
|
869
880
|
"""
|
870
881
|
Vrací datum a čas v lokální
|
871
882
|
|
@@ -1,6 +1,6 @@
|
|
1
|
-
Metadata-Version: 2.
|
1
|
+
Metadata-Version: 2.4
|
2
2
|
Name: sysnet-pyutils
|
3
|
-
Version: 1.1
|
3
|
+
Version: 1.2.1
|
4
4
|
Summary: Python Utilities
|
5
5
|
Author-email: Data Developer <info@sysnet.cz>
|
6
6
|
Project-URL: Homepage, https://github.com/SYSNET-CZ/pyutils
|
@@ -11,7 +11,7 @@ Classifier: License :: Free For Home Use
|
|
11
11
|
Classifier: Natural Language :: Czech
|
12
12
|
Classifier: Operating System :: OS Independent
|
13
13
|
Classifier: Topic :: Software Development :: Libraries
|
14
|
-
Requires-Python: >=3.
|
14
|
+
Requires-Python: >=3.10
|
15
15
|
Description-Content-Type: text/markdown
|
16
16
|
License-File: LICENSE
|
17
17
|
Requires-Dist: PyYAML>=6.0.1
|
@@ -21,7 +21,8 @@ Requires-Dist: xmltodict>=0.13.0
|
|
21
21
|
Requires-Dist: boto3>=1.34.34
|
22
22
|
Requires-Dist: botocore>=1.34.34
|
23
23
|
Requires-Dist: pymongo>=4.7.2
|
24
|
-
Requires-Dist: pydantic>=2.10.6
|
24
|
+
Requires-Dist: pydantic[email]>=2.10.6
|
25
|
+
Dynamic: license-file
|
25
26
|
|
26
27
|
# sysnet-pyutils
|
27
28
|
|
@@ -64,7 +65,7 @@ Vygeneruje API klíč
|
|
64
65
|
Vygeneruje slovník API key {API Key: name}
|
65
66
|
* param name: Název API klíče
|
66
67
|
* param length: Délka API klíče
|
67
|
-
* return:
|
68
|
+
* return: Slovník {API Key: name}
|
68
69
|
----------------------------------------------------------------
|
69
70
|
#### api_keys_init(agenda='main', amount=4):
|
70
71
|
Vygeneruje klíče pro API
|
@@ -78,19 +79,19 @@ Konvertuje hex string na int
|
|
78
79
|
* return: int
|
79
80
|
--------------------------------------------------------
|
80
81
|
#### cron_to_dict(cron):
|
81
|
-
Konvertuje cron text do
|
82
|
+
Konvertuje cron text do slovníku
|
82
83
|
* param cron: cron text (například '35 21 * * *')
|
83
84
|
* return: dict of cron
|
84
85
|
--------------------------------------------------------
|
85
86
|
#### cs_bool(value=None):
|
86
87
|
Vrátí českou textovou hodnotu 'ano'/'ne' pokud je bool(value) True/False
|
87
|
-
* param value:
|
88
|
+
* param value: Obecný objekt
|
88
89
|
* return: 'ano' or 'ne'
|
89
90
|
--------------------------------------------------------
|
90
91
|
#### date_to_datetime(date_value):
|
91
92
|
Konvertuje date na datetime v lokální časové zóně
|
92
93
|
* param date_value: hodnota
|
93
|
-
* return:
|
94
|
+
* return: hodnota date v lokální časové zóně
|
94
95
|
--------------------------------------------------------
|
95
96
|
#### decode_b64_string(b64_data: str, encoding='utf-8'):
|
96
97
|
Dekóduje base64 data na string
|
@@ -139,13 +140,13 @@ Vytvoří sha383 checksum ze zdrojového textu
|
|
139
140
|
----------------------------------------------------------------
|
140
141
|
#### id12_next(three_char_prefix=None):
|
141
142
|
Vygeneruje korektní 12místný alfanumerický identifikátor s pevným prefixem
|
142
|
-
* param three_char_prefix:
|
143
|
-
* return:
|
143
|
+
* param three_char_prefix: Tříznakový prefix identifikátoru
|
144
|
+
* return: 12místný alfanumerický identifikátor
|
144
145
|
----------------------------------------------------------------
|
145
146
|
#### increment_date(date_str=None, days=1):
|
146
147
|
Inkrementuje datum v textovém formátu ISO o daný počet dní
|
147
148
|
* param date_str: ISO datum v textovém formátu ISO
|
148
|
-
* param days:
|
149
|
+
* param days: počet dní
|
149
150
|
* return: ISO datum v textovém formátu ISO
|
150
151
|
----------------------------------------------------------------
|
151
152
|
#### is_base64(body):
|
@@ -267,12 +268,12 @@ pravidel viz https://github.com/martinblech/xmltodict
|
|
267
268
|
#### order_to_cites(order: int):
|
268
269
|
Konvertuje celočíselnou hodnotu na písmennou
|
269
270
|
* param order: celočíselná hodnota např. 1458
|
270
|
-
* return:
|
271
|
+
* return: znaková hodnota např. 'BDB'
|
271
272
|
--------------------------------------------------------------------------------------------------------------------------------
|
272
273
|
#### cites_to_order(cites: str):
|
273
274
|
Konvertuje písmennou hodnotu na celočíselnou
|
274
|
-
* param cites:
|
275
|
-
* return:
|
275
|
+
* param cites: znaková hodnota např. 'BDB'
|
276
|
+
* return: celočíselná hodnota např. 1458
|
276
277
|
--------------------------------------------------------------------------------------------------------------------------------
|
277
278
|
### verze 1.0.5
|
278
279
|
|
@@ -347,3 +348,8 @@ která naplní atribut **identifier** z unid, pid nebo uuid.
|
|
347
348
|
* **LOG_FORMAT**: Formát logování. Implicitně `'%(asctime)s - %(levelname)s in %(module)s: %(message)s'`
|
348
349
|
* **LOG_DATE_FORMAT**: Formát data pro logování. Implicitně `'%d.%m.%Y %H:%M:%S'`
|
349
350
|
* **PID_PREFIX**: PID prefix. Implicitně `'SNT'`
|
351
|
+
|
352
|
+
### verze 1.2.0
|
353
|
+
|
354
|
+
1. Místo typu `UUID` se v modelu používá pouze `str`. Je tomu tak kvůli ukládání do **MongoDb**.
|
355
|
+
2. Doplněn abstraktní typ `BaseEnum`, který obsahuje metodu `has_value`.
|
@@ -3,15 +3,15 @@ sysnet_pyutils/barcode.py,sha256=5dM1ISvVVP966JQxGiZBUYJoPx_jgzWEpEQ2uIOxTd4,262
|
|
3
3
|
sysnet_pyutils/data_utils.py,sha256=foePXYsPJyl7zdzb4RENO937uNV5G05GdW_En6ql4kw,9673
|
4
4
|
sysnet_pyutils/domino.py,sha256=dGmg9d1PMPOyA_ysXBHVu_zabKGCJEuno3Yw3DexExQ,2671
|
5
5
|
sysnet_pyutils/geo.py,sha256=smAkRfobvKqjr3_UIjU5huDbnkb3_edD_xmv4R0r5Q0,2938
|
6
|
-
sysnet_pyutils/ident.py,sha256=
|
6
|
+
sysnet_pyutils/ident.py,sha256=OkGne8xLEFd2zNdIm7HTPJ_K-fIN9rz7tOR-H0PWDRE,2845
|
7
7
|
sysnet_pyutils/log.py,sha256=SFuCPvFTg31LFvnyG24hCTe73FonfS0_FaAHRBhEvlw,2165
|
8
8
|
sysnet_pyutils/ses.py,sha256=WJzs0y2QnF4XGDGjls_W0p0v6DJ4fZ4_97m3XbzpaFw,2713
|
9
9
|
sysnet_pyutils/tools.py,sha256=ZioHvUIufrhuJyZLdPnuMUD8Li5LTljSMSCxqRnKIi4,377
|
10
|
-
sysnet_pyutils/utils.py,sha256=
|
10
|
+
sysnet_pyutils/utils.py,sha256=4dOqlP8JhKaIzWlbYw4PLckBf1SigBJK-MzK1EWTgYk,23523
|
11
11
|
sysnet_pyutils/models/__init__.py,sha256=oozOr_DKhenkM9BDaPOmtbLXhP5vtMUCjBPEjZDW4GQ,167
|
12
|
-
sysnet_pyutils/models/general.py,sha256=
|
13
|
-
sysnet_pyutils-1.1.
|
14
|
-
sysnet_pyutils-1.1.
|
15
|
-
sysnet_pyutils-1.1.
|
16
|
-
sysnet_pyutils-1.1.
|
17
|
-
sysnet_pyutils-1.1.
|
12
|
+
sysnet_pyutils/models/general.py,sha256=cvAO-_RxZVv_It2rLRFiFEJCYEwApggqIG9KMKDDKhc,15928
|
13
|
+
sysnet_pyutils-1.2.1.dist-info/licenses/LICENSE,sha256=bx5iLIKjgAdYQ7sISn7DsfHRKkoCUm1154sJJKhgqnU,35184
|
14
|
+
sysnet_pyutils-1.2.1.dist-info/METADATA,sha256=IQl54ywb0jyWSVeJ2yu4bHYMBwGeB2UtunTubtErSxM,15285
|
15
|
+
sysnet_pyutils-1.2.1.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
|
16
|
+
sysnet_pyutils-1.2.1.dist-info/top_level.txt,sha256=ZKTltQWbLlWBXw4oovo1w7ui-JQ1WoyECqMSWdBj6XE,15
|
17
|
+
sysnet_pyutils-1.2.1.dist-info/RECORD,,
|
File without changes
|
File without changes
|