sysnet-pyutils 1.2.5__py3-none-any.whl → 1.3.0__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/data_utils.py +51 -0
- sysnet_pyutils/models/general.py +15 -1
- sysnet_pyutils/utils.py +50 -0
- {sysnet_pyutils-1.2.5.dist-info → sysnet_pyutils-1.3.0.dist-info}/METADATA +11 -6
- {sysnet_pyutils-1.2.5.dist-info → sysnet_pyutils-1.3.0.dist-info}/RECORD +8 -8
- {sysnet_pyutils-1.2.5.dist-info → sysnet_pyutils-1.3.0.dist-info}/WHEEL +1 -1
- {sysnet_pyutils-1.2.5.dist-info → sysnet_pyutils-1.3.0.dist-info}/licenses/LICENSE +0 -0
- {sysnet_pyutils-1.2.5.dist-info → sysnet_pyutils-1.3.0.dist-info}/top_level.txt +0 -0
sysnet_pyutils/data_utils.py
CHANGED
@@ -5,6 +5,8 @@ import pytz
|
|
5
5
|
|
6
6
|
from sysnet_pyutils.utils import is_valid_email, TZ
|
7
7
|
|
8
|
+
PAGE_SIZE = 10
|
9
|
+
|
8
10
|
def get_dict_value(data: dict, item_name: str) -> Union[Any, None]:
|
9
11
|
"""
|
10
12
|
Extrahuje hodnotu ze slovníku. Používá se pro load dat JSON do objektů
|
@@ -320,3 +322,52 @@ def dict_convert_date_to_str(data: dict):
|
|
320
322
|
dict_convert_date_to_str(item)
|
321
323
|
else:
|
322
324
|
pass
|
325
|
+
|
326
|
+
|
327
|
+
def paging_to_mongo(start=0, page_size=PAGE_SIZE, page=0):
|
328
|
+
if start is None:
|
329
|
+
start = 0
|
330
|
+
if page_size is None:
|
331
|
+
page_size = PAGE_SIZE
|
332
|
+
if page is None:
|
333
|
+
page = 0
|
334
|
+
page += start // page_size
|
335
|
+
start = start % page_size
|
336
|
+
# pokud pocatecni dokument nesouhlasí se začátkem stránky, zkrátí se stránka
|
337
|
+
skip = start + page * page_size
|
338
|
+
limit = page_size
|
339
|
+
if start != 0:
|
340
|
+
limit = page_size - start
|
341
|
+
out = {
|
342
|
+
'start': start,
|
343
|
+
'page_size': page_size,
|
344
|
+
'page': page,
|
345
|
+
'skip': skip,
|
346
|
+
'limit': limit}
|
347
|
+
return out
|
348
|
+
|
349
|
+
|
350
|
+
def recursive_update(out_object, original, updated):
|
351
|
+
"""
|
352
|
+
Rekurzivní aktualizace slovníků
|
353
|
+
|
354
|
+
:param out_object: Datový objekt k aktualizaci
|
355
|
+
:param original: Uložený slovník
|
356
|
+
:param updated: Aktualizace (dodaná metodou PUT)
|
357
|
+
:return: Aktualizovaný původní slovník
|
358
|
+
"""
|
359
|
+
out = original
|
360
|
+
for k, v in updated.items():
|
361
|
+
if k not in out:
|
362
|
+
# Ignoruj položky, které nejsou v originále
|
363
|
+
continue
|
364
|
+
if (v is None) and (isinstance(out.get(k), dict) or isinstance(out.get(k), list)):
|
365
|
+
# Pokud je místo slovníku nebo seznamu None, přeskočit
|
366
|
+
continue
|
367
|
+
if isinstance(v, dict) and isinstance(out.get(k), dict):
|
368
|
+
# Pokud je aktualizován slovník, rekurze
|
369
|
+
recursive_update(getattr(out_object, k), out[k], v)
|
370
|
+
else:
|
371
|
+
out[k] = v
|
372
|
+
setattr(out_object, k, v)
|
373
|
+
return out
|
sysnet_pyutils/models/general.py
CHANGED
@@ -6,7 +6,7 @@ from datetime import datetime
|
|
6
6
|
from enum import Enum
|
7
7
|
from typing import Optional, List, Tuple, Any, ClassVar, Dict
|
8
8
|
|
9
|
-
from pydantic import BaseModel, Field, EmailStr, StrictStr
|
9
|
+
from pydantic import BaseModel, Field, EmailStr, StrictStr, StrictBool
|
10
10
|
from typing_extensions import Self
|
11
11
|
|
12
12
|
from sysnet_pyutils.utils import local_now, is_valid_unid, is_valid_pid, is_valid_uuid
|
@@ -150,6 +150,20 @@ class AclType(BaseModel):
|
|
150
150
|
)
|
151
151
|
|
152
152
|
|
153
|
+
class MetadataEssentialType(BaseModel):
|
154
|
+
"""
|
155
|
+
Hlavní metadata
|
156
|
+
""" # noqa: E501
|
157
|
+
identifier: Optional[StrictStr] = Field(default=None, description="identifikátor uuid")
|
158
|
+
date_created: Optional[datetime] = Field(default=None, description="Datum a čas")
|
159
|
+
date_modified: Optional[datetime] = Field(default=None, description="Datum a čas")
|
160
|
+
date_deleted: Optional[datetime] = Field(default=None, description="Datum a čas")
|
161
|
+
deleted: Optional[StrictBool] = Field(default=False, description="Dokument byl odstraněn")
|
162
|
+
valid: Optional[StrictBool] = Field(default=True, description="Dokument je platný/neplatný")
|
163
|
+
duplicates: Optional[StrictStr] = Field(default=None, description="Dokument je duplicitní k jinému dokumentu s daným identifikátorem")
|
164
|
+
|
165
|
+
|
166
|
+
|
153
167
|
class MetadataTypeEntry(BaseModel):
|
154
168
|
title: Optional[str] = Field(default=None, description='Název dokumentu')
|
155
169
|
id_no: Optional[str] = Field(default=None, description='Číslo dokumentu', examples=['23CZ123456'])
|
sysnet_pyutils/utils.py
CHANGED
@@ -918,3 +918,53 @@ def parse_ldap_name(ldap_name: str) -> Tuple[Union[str, None], Union[str, None]]
|
|
918
918
|
cn = item.split('=')[-1]
|
919
919
|
break
|
920
920
|
return cn, ldap_name
|
921
|
+
|
922
|
+
|
923
|
+
class Context(LoggedObject, metaclass=Singleton):
|
924
|
+
def __init__(
|
925
|
+
self,
|
926
|
+
config=None,
|
927
|
+
api_key=None,
|
928
|
+
user_name=None,
|
929
|
+
agenda=None,
|
930
|
+
cert_file=None,
|
931
|
+
cert_pass=None):
|
932
|
+
super().__init__(object_name='CONTEXT')
|
933
|
+
self.config = config
|
934
|
+
if self.config is None:
|
935
|
+
self.log.error(f"{self.name} FAILED - Missing config")
|
936
|
+
self.api_key = api_key
|
937
|
+
self.user_name = user_name
|
938
|
+
self.agenda = agenda
|
939
|
+
self.authenticated = False
|
940
|
+
self.cert_file = cert_file
|
941
|
+
self.cert_pass = cert_pass
|
942
|
+
self.log.info(f"{self.name} Created")
|
943
|
+
|
944
|
+
def clear(self):
|
945
|
+
self.api_key = None
|
946
|
+
self.user_name = None
|
947
|
+
self.agenda = None
|
948
|
+
self.authenticated = False
|
949
|
+
self.cert_file = None
|
950
|
+
self.cert_pass = None
|
951
|
+
self.log.info(f"{self.name} Cleared")
|
952
|
+
|
953
|
+
def check_api_key(self, api_key):
|
954
|
+
self.clear()
|
955
|
+
if api_key in [None, '']:
|
956
|
+
return False
|
957
|
+
for agenda in self.config.keys():
|
958
|
+
if 'api_keys' not in self.config[agenda]:
|
959
|
+
continue
|
960
|
+
for ak in self.config[agenda]['api_keys']:
|
961
|
+
if api_key in ak.keys():
|
962
|
+
self.api_key = api_key
|
963
|
+
self.agenda = agenda
|
964
|
+
self.user_name = ak[api_key]
|
965
|
+
self.authenticated = True
|
966
|
+
self.log.info(f"{self.name} - User '{self.user_name}' logged in")
|
967
|
+
break
|
968
|
+
if self.authenticated:
|
969
|
+
break
|
970
|
+
return self.authenticated
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: sysnet-pyutils
|
3
|
-
Version: 1.
|
3
|
+
Version: 1.3.0
|
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
|
@@ -81,12 +81,12 @@ Konvertuje hex string na int
|
|
81
81
|
#### cron_to_dict(cron):
|
82
82
|
Konvertuje cron text do slovníku
|
83
83
|
* param cron: cron text (například '35 21 * * *')
|
84
|
-
* return:
|
84
|
+
* return: dict of cron
|
85
85
|
--------------------------------------------------------
|
86
86
|
#### cs_bool(value=None):
|
87
87
|
Vrátí českou textovou hodnotu 'ano'/'ne' pokud je bool(value) True/False
|
88
88
|
* param value: Obecný objekt
|
89
|
-
* return:
|
89
|
+
* return: 'ano' or 'ne'
|
90
90
|
--------------------------------------------------------
|
91
91
|
#### date_to_datetime(date_value):
|
92
92
|
Konvertuje date na datetime v lokální časové zóně
|
@@ -186,7 +186,7 @@ Opraví PID
|
|
186
186
|
----------------------------------------------------------------
|
187
187
|
#### pid_next():
|
188
188
|
Vygeneruje korektní PID
|
189
|
-
* return:
|
189
|
+
* return: PID
|
190
190
|
----------------------------------------------------------------
|
191
191
|
#### remove_empty(source_list):
|
192
192
|
Odstraní prázdné položky ze seznamu
|
@@ -256,7 +256,7 @@ Rekurzivně převede klíče ve slovníku z VelbloudíNotace do hadí_notace
|
|
256
256
|
Parsuje XML string do XML dictionary
|
257
257
|
podle pravidel viz https://github.com/martinblech/xmltodict
|
258
258
|
* param xml_text: XML text
|
259
|
-
* return:
|
259
|
+
* return: XML dictionary
|
260
260
|
--------------------------------------------------------------------------------------------------------------------------------
|
261
261
|
#### dict_to_xml(xml_dict):
|
262
262
|
Parsuje XML dict do XML textu podle
|
@@ -279,7 +279,7 @@ Konvertuje písmennou hodnotu na celočíselnou
|
|
279
279
|
|
280
280
|
#### local_now():
|
281
281
|
Vrací aktuální časovou značku v lokální časové zóně.
|
282
|
-
* return:
|
282
|
+
* return: datetime.datetime
|
283
283
|
|
284
284
|
#### is_valid_unid(unid):
|
285
285
|
Kontrola validity HCL Notes UNIID
|
@@ -365,3 +365,8 @@ Typ osoby (zdroj CRŽP):
|
|
365
365
|
- businessNaturalPerson: tuzemská fyzická osoba podnikající
|
366
366
|
- naturalPerson: tuzemská fyzická osoba nepodnikající
|
367
367
|
- foreignNaturalPerson: zahraniční fyzická osoba podnikající
|
368
|
+
|
369
|
+
|
370
|
+
### Verze 1.3.0
|
371
|
+
|
372
|
+
Přidána třida **Context**, která se používá při ověřování API-KEY
|
@@ -1,17 +1,17 @@
|
|
1
1
|
sysnet_pyutils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
2
2
|
sysnet_pyutils/barcode.py,sha256=5dM1ISvVVP966JQxGiZBUYJoPx_jgzWEpEQ2uIOxTd4,2622
|
3
|
-
sysnet_pyutils/data_utils.py,sha256=
|
3
|
+
sysnet_pyutils/data_utils.py,sha256=1OV89carnQCQgB7wahTEsfg-jR6bQcsz0-NKiiSlk00,11283
|
4
4
|
sysnet_pyutils/domino.py,sha256=dGmg9d1PMPOyA_ysXBHVu_zabKGCJEuno3Yw3DexExQ,2671
|
5
5
|
sysnet_pyutils/geo.py,sha256=smAkRfobvKqjr3_UIjU5huDbnkb3_edD_xmv4R0r5Q0,2938
|
6
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=koG5SY0DQWTJ9qBv1C1sXq9pN6G2KeN9POGzerZJQX4,25160
|
11
11
|
sysnet_pyutils/models/__init__.py,sha256=oozOr_DKhenkM9BDaPOmtbLXhP5vtMUCjBPEjZDW4GQ,167
|
12
|
-
sysnet_pyutils/models/general.py,sha256=
|
13
|
-
sysnet_pyutils-1.
|
14
|
-
sysnet_pyutils-1.
|
15
|
-
sysnet_pyutils-1.
|
16
|
-
sysnet_pyutils-1.
|
17
|
-
sysnet_pyutils-1.
|
12
|
+
sysnet_pyutils/models/general.py,sha256=6AE5RfLmvW4oq7V6Iqpbq7l-Lsqt2Kkh7yLaXu58fRc,23386
|
13
|
+
sysnet_pyutils-1.3.0.dist-info/licenses/LICENSE,sha256=bx5iLIKjgAdYQ7sISn7DsfHRKkoCUm1154sJJKhgqnU,35184
|
14
|
+
sysnet_pyutils-1.3.0.dist-info/METADATA,sha256=0k0neOAOpHp4zbpbo_LY7kHD7b2YEwI38jGL-LSmMMk,15835
|
15
|
+
sysnet_pyutils-1.3.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
16
|
+
sysnet_pyutils-1.3.0.dist-info/top_level.txt,sha256=ZKTltQWbLlWBXw4oovo1w7ui-JQ1WoyECqMSWdBj6XE,15
|
17
|
+
sysnet_pyutils-1.3.0.dist-info/RECORD,,
|
File without changes
|
File without changes
|