everysk-lib 1.9.9__tar.gz → 1.10.1__tar.gz
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.
- {everysk_lib-1.9.9/src/everysk_lib.egg-info → everysk_lib-1.10.1}/PKG-INFO +6 -6
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/pyproject.toml +5 -5
- everysk_lib-1.10.1/src/everysk/core/undefined.py +70 -0
- everysk_lib-1.10.1/src/everysk/sdk/brutils/cnpj.py +373 -0
- everysk_lib-1.10.1/src/everysk/sdk/brutils/cnpj_pd.py +42 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/sdk/entities/worker_execution/settings.py +2 -1
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/sql/connection.py +19 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/tests.py +1 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1/src/everysk_lib.egg-info}/PKG-INFO +6 -6
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk_lib.egg-info/SOURCES.txt +2 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk_lib.egg-info/requires.txt +5 -5
- everysk_lib-1.9.9/src/everysk/core/undefined.py +0 -74
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/LICENSE.txt +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/MANIFEST.in +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/README.md +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/setup.cfg +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/setup.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/__init__.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/_version.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/api/__init__.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/api/api_requestor.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/api/api_resources/__init__.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/api/api_resources/api_resource.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/api/api_resources/calculation.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/api/api_resources/custom_index.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/api/api_resources/datastore.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/api/api_resources/file.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/api/api_resources/market_data.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/api/api_resources/parser.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/api/api_resources/portfolio.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/api/api_resources/private_security.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/api/api_resources/report.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/api/api_resources/report_template.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/api/api_resources/tests.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/api/api_resources/worker_execution.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/api/api_resources/workflow.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/api/api_resources/workflow_execution.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/api/api_resources/workspace.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/api/http_client.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/api/tests.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/api/utils.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/config.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/core/_tests/serialize/test_json.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/core/_tests/serialize/test_orjson.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/core/_tests/serialize/test_pickle.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/core/cloud_function/main.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/core/cloud_function/tests.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/core/compress.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/core/datetime/__init__.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/core/datetime/calendar.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/core/datetime/date.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/core/datetime/date_expression.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/core/datetime/date_mixin.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/core/datetime/date_settings.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/core/datetime/datetime.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/core/exceptions.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/core/fields.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/core/firestore.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/core/fixtures/_settings.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/core/fixtures/other/_settings.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/core/fixtures/user_agents.json +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/core/http.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/core/lists.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/core/log.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/core/number.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/core/object.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/core/redis.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/core/retry.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/core/serialize.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/core/sftp.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/core/signing.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/core/slack.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/core/string.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/core/tests.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/core/threads.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/core/unittests.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/core/workers.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/sdk/__init__.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/sdk/base.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/sdk/engines/__init__.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/sdk/engines/cache.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/sdk/engines/compliance.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/sdk/engines/cryptography.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/sdk/engines/lock.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/sdk/engines/market_data.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/sdk/engines/settings.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/sdk/entities/__init__.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/sdk/entities/base.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/sdk/entities/base_list.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/sdk/entities/custom_index/base.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/sdk/entities/custom_index/settings.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/sdk/entities/datastore/base.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/sdk/entities/datastore/settings.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/sdk/entities/fields.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/sdk/entities/file/base.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/sdk/entities/file/settings.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/sdk/entities/portfolio/base.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/sdk/entities/portfolio/securities.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/sdk/entities/portfolio/security.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/sdk/entities/portfolio/settings.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/sdk/entities/private_security/base.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/sdk/entities/private_security/settings.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/sdk/entities/query.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/sdk/entities/report/base.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/sdk/entities/report/settings.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/sdk/entities/script.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/sdk/entities/secrets/base.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/sdk/entities/secrets/script.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/sdk/entities/secrets/settings.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/sdk/entities/settings.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/sdk/entities/tags.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/sdk/entities/worker_execution/base.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/sdk/entities/workflow_execution/base.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/sdk/entities/workflow_execution/settings.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/sdk/entities/workspace/base.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/sdk/entities/workspace/settings.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/sdk/settings.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/sdk/tests.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/sdk/worker_base.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/server/__init__.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/server/applications.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/server/endpoints.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/server/example_api.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/server/middlewares.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/server/requests.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/server/responses.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/server/routing.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/server/settings.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/server/tests.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/settings.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/sql/__init__.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/sql/model.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/sql/query.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/sql/row_factory.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/sql/settings.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/sql/utils.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/utils.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/version.py +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk_lib.egg-info/.gitignore +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk_lib.egg-info/dependency_links.txt +0 -0
- {everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk_lib.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: everysk-lib
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.10.1
|
|
4
4
|
Summary: Generic lib to share python code on Everysk.
|
|
5
5
|
License-Expression: LicenseRef-Proprietary
|
|
6
6
|
Project-URL: Homepage, https://everysk.com/
|
|
@@ -19,13 +19,13 @@ Provides-Extra: requests
|
|
|
19
19
|
Requires-Dist: certifi==2025.10.5; extra == "requests"
|
|
20
20
|
Requires-Dist: charset_normalizer==3.4.4; extra == "requests"
|
|
21
21
|
Requires-Dist: idna==3.11; extra == "requests"
|
|
22
|
-
Requires-Dist: urllib3==2.
|
|
22
|
+
Requires-Dist: urllib3==2.6.3; extra == "requests"
|
|
23
23
|
Requires-Dist: requests==2.32.5; extra == "requests"
|
|
24
24
|
Provides-Extra: firestore
|
|
25
25
|
Requires-Dist: certifi==2025.10.5; extra == "firestore"
|
|
26
26
|
Requires-Dist: charset-normalizer==3.3.2; extra == "firestore"
|
|
27
27
|
Requires-Dist: idna==3.6; extra == "firestore"
|
|
28
|
-
Requires-Dist: urllib3==2.
|
|
28
|
+
Requires-Dist: urllib3==2.6.3; extra == "firestore"
|
|
29
29
|
Requires-Dist: requests==2.32.4; extra == "firestore"
|
|
30
30
|
Requires-Dist: pyasn1==0.5.1; extra == "firestore"
|
|
31
31
|
Requires-Dist: pyasn1-modules==0.3.0; extra == "firestore"
|
|
@@ -47,7 +47,7 @@ Provides-Extra: tasks
|
|
|
47
47
|
Requires-Dist: certifi==2025.10.5; extra == "tasks"
|
|
48
48
|
Requires-Dist: charset-normalizer==3.3.2; extra == "tasks"
|
|
49
49
|
Requires-Dist: idna==3.6; extra == "tasks"
|
|
50
|
-
Requires-Dist: urllib3==2.
|
|
50
|
+
Requires-Dist: urllib3==2.6.3; extra == "tasks"
|
|
51
51
|
Requires-Dist: requests==2.32.4; extra == "tasks"
|
|
52
52
|
Requires-Dist: pyasn1==0.5.1; extra == "tasks"
|
|
53
53
|
Requires-Dist: pyasn1-modules==0.3.0; extra == "tasks"
|
|
@@ -104,9 +104,9 @@ Requires-Dist: httpx==0.28.1; extra == "httpx"
|
|
|
104
104
|
Provides-Extra: paramiko
|
|
105
105
|
Requires-Dist: bcrypt==4.2.0; extra == "paramiko"
|
|
106
106
|
Requires-Dist: pycparser==2.22; extra == "paramiko"
|
|
107
|
-
Requires-Dist: cffi==
|
|
107
|
+
Requires-Dist: cffi==2.0.0; extra == "paramiko"
|
|
108
108
|
Requires-Dist: cryptography==44.0.1; extra == "paramiko"
|
|
109
|
-
Requires-Dist: pynacl==1.
|
|
109
|
+
Requires-Dist: pynacl==1.6.2; extra == "paramiko"
|
|
110
110
|
Requires-Dist: paramiko==3.5.0; extra == "paramiko"
|
|
111
111
|
Provides-Extra: everysk-orjson
|
|
112
112
|
Requires-Dist: everysk-orjson==3.11.3; extra == "everysk-orjson"
|
|
@@ -56,7 +56,7 @@ requests = [
|
|
|
56
56
|
"certifi==2025.10.5",
|
|
57
57
|
"charset_normalizer==3.4.4",
|
|
58
58
|
"idna==3.11",
|
|
59
|
-
"urllib3==2.
|
|
59
|
+
"urllib3==2.6.3",
|
|
60
60
|
"requests==2.32.5"
|
|
61
61
|
]
|
|
62
62
|
|
|
@@ -64,7 +64,7 @@ firestore = [
|
|
|
64
64
|
"certifi==2025.10.5",
|
|
65
65
|
"charset-normalizer==3.3.2",
|
|
66
66
|
"idna==3.6",
|
|
67
|
-
"urllib3==2.
|
|
67
|
+
"urllib3==2.6.3",
|
|
68
68
|
"requests==2.32.4",
|
|
69
69
|
"pyasn1==0.5.1",
|
|
70
70
|
"pyasn1-modules==0.3.0",
|
|
@@ -90,7 +90,7 @@ tasks = [
|
|
|
90
90
|
"certifi==2025.10.5",
|
|
91
91
|
"charset-normalizer==3.3.2",
|
|
92
92
|
"idna==3.6",
|
|
93
|
-
"urllib3==2.
|
|
93
|
+
"urllib3==2.6.3",
|
|
94
94
|
"requests==2.32.4",
|
|
95
95
|
"pyasn1==0.5.1",
|
|
96
96
|
"pyasn1-modules==0.3.0",
|
|
@@ -161,9 +161,9 @@ httpx = [
|
|
|
161
161
|
paramiko = [
|
|
162
162
|
"bcrypt==4.2.0",
|
|
163
163
|
"pycparser==2.22",
|
|
164
|
-
"cffi==
|
|
164
|
+
"cffi==2.0.0",
|
|
165
165
|
"cryptography==44.0.1",
|
|
166
|
-
"pynacl==1.
|
|
166
|
+
"pynacl==1.6.2",
|
|
167
167
|
"paramiko==3.5.0"
|
|
168
168
|
]
|
|
169
169
|
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
###############################################################################
|
|
2
|
+
#
|
|
3
|
+
# (C) Copyright 2023 EVERYSK TECHNOLOGIES
|
|
4
|
+
#
|
|
5
|
+
# This is an unpublished work containing confidential and proprietary
|
|
6
|
+
# information of EVERYSK TECHNOLOGIES. Disclosure, use, or reproduction
|
|
7
|
+
# without authorization of EVERYSK TECHNOLOGIES is prohibited.
|
|
8
|
+
#
|
|
9
|
+
###############################################################################
|
|
10
|
+
from typing import Any, Self
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
## Do not use this class, use the constant Undefined that is already defined in the python builtins. ##
|
|
14
|
+
class UndefinedType:
|
|
15
|
+
"""
|
|
16
|
+
The UndefinedType class is used to represent an undefined value in the Everysk framework.
|
|
17
|
+
This class is designed to be immutable and to always represent the same undefined value.
|
|
18
|
+
We use it as default values for function parameters and class attributes to indicate that
|
|
19
|
+
the value is not set and to differentiate it from None or other possible values.
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
default_error_message = 'This object is immutable.'
|
|
23
|
+
default_parse_string = '__UNDEFINED_VALUE__'
|
|
24
|
+
default_repr_string = '<Undefined value>'
|
|
25
|
+
block = False
|
|
26
|
+
|
|
27
|
+
def __init__(self) -> None:
|
|
28
|
+
if self.block:
|
|
29
|
+
raise NotImplementedError('Do not use this class, use the constant Undefined.')
|
|
30
|
+
|
|
31
|
+
def __bool__(self) -> bool:
|
|
32
|
+
"""Undefined object is always False"""
|
|
33
|
+
return False
|
|
34
|
+
|
|
35
|
+
def __copy__(self) -> Self:
|
|
36
|
+
"""To keep consistence, this object will always be the same."""
|
|
37
|
+
return self
|
|
38
|
+
|
|
39
|
+
def __delattr__(self, name: str) -> None:
|
|
40
|
+
"""We could not delete attributes from this object."""
|
|
41
|
+
raise AttributeError(self.default_error_message)
|
|
42
|
+
|
|
43
|
+
def __deepcopy__(self, memo: dict | None = None) -> Self:
|
|
44
|
+
"""To keep consistence, this object will always be the same."""
|
|
45
|
+
return self
|
|
46
|
+
|
|
47
|
+
def __eq__(self, value: object) -> bool:
|
|
48
|
+
"""For an object created from the UndefinedType class to be equal to another, the classes must be equal."""
|
|
49
|
+
return isinstance(value, type(self))
|
|
50
|
+
|
|
51
|
+
def __getattr__(self, name: str) -> Any:
|
|
52
|
+
"""Undefined object don't have attributes."""
|
|
53
|
+
raise AttributeError(self.default_error_message)
|
|
54
|
+
|
|
55
|
+
def __hash__(self) -> int:
|
|
56
|
+
"""Must return an int that is used as hash for this object."""
|
|
57
|
+
return id(self)
|
|
58
|
+
|
|
59
|
+
def __repr__(self) -> str:
|
|
60
|
+
"""Fixed to be the same every time."""
|
|
61
|
+
return self.default_repr_string
|
|
62
|
+
|
|
63
|
+
def __setattr__(self, name: str, value: Any) -> None:
|
|
64
|
+
"""We can't set any attribute to this object."""
|
|
65
|
+
if self.block:
|
|
66
|
+
raise AttributeError(self.default_error_message)
|
|
67
|
+
|
|
68
|
+
def __str__(self) -> str:
|
|
69
|
+
"""Fixed to be the same every time."""
|
|
70
|
+
return self.default_repr_string
|
|
@@ -0,0 +1,373 @@
|
|
|
1
|
+
###############################################################################
|
|
2
|
+
#
|
|
3
|
+
# (C) Copyright 2026 EVERYSK TECHNOLOGIES
|
|
4
|
+
#
|
|
5
|
+
# This is an unpublished work containing confidential and proprietary
|
|
6
|
+
# information of EVERYSK TECHNOLOGIES. Disclosure, use, or reproduction
|
|
7
|
+
# without authorization of EVERYSK TECHNOLOGIES is prohibited.
|
|
8
|
+
#
|
|
9
|
+
###############################################################################
|
|
10
|
+
import random
|
|
11
|
+
import re
|
|
12
|
+
import string
|
|
13
|
+
|
|
14
|
+
from everysk.core.fields import IntField, TupleField
|
|
15
|
+
|
|
16
|
+
###############################################################################
|
|
17
|
+
# Globals
|
|
18
|
+
###############################################################################
|
|
19
|
+
|
|
20
|
+
CNPJ_LENGTH: IntField = IntField(default=14, readonly=True)
|
|
21
|
+
CNPJ_BASE_LENGTH: IntField = IntField(default=12, readonly=True)
|
|
22
|
+
|
|
23
|
+
WEIGHTS_DV1: TupleField = TupleField(default=(5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2), readonly=True)
|
|
24
|
+
WEIGHTS_DV2: TupleField = TupleField(default=(6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2), readonly=True)
|
|
25
|
+
|
|
26
|
+
BASE_VALUES = string.ascii_uppercase + string.digits
|
|
27
|
+
BASE_VALUES_REGEX = r'[A-Z0-9]'
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class CNPJError(ValueError):
|
|
31
|
+
"""
|
|
32
|
+
Exception raised for errors encountered during the parsing or validation of a CNPJ (Cadastro Nacional da Pessoa Jurídica).
|
|
33
|
+
|
|
34
|
+
Attributes:
|
|
35
|
+
message (str): Explanation of the error.
|
|
36
|
+
"""
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
class CNPJ:
|
|
40
|
+
"""
|
|
41
|
+
Base class for handling Brazilian CNPJ (Cadastro Nacional da Pessoa Jurídica) documents.
|
|
42
|
+
|
|
43
|
+
This class provides methods for sanitizing, normalizing, validating, formatting, and generating CNPJ numbers,
|
|
44
|
+
including support for the new alphanumeric base format and the updated verification digit (DV) calculation rules.
|
|
45
|
+
|
|
46
|
+
cnpj : str | int | float | None
|
|
47
|
+
The CNPJ value to be processed. Can be a string, integer, float, or None.
|
|
48
|
+
|
|
49
|
+
Attributes
|
|
50
|
+
----------
|
|
51
|
+
firm : str
|
|
52
|
+
The main firm identifier portion of the CNPJ (first 8 digits).
|
|
53
|
+
subsidiary : str
|
|
54
|
+
The branch/subsidiary identifier portion of the CNPJ (next 4 digits).
|
|
55
|
+
dv : str
|
|
56
|
+
The verification digits (last 2 digits) of the CNPJ.
|
|
57
|
+
"""
|
|
58
|
+
|
|
59
|
+
def __init__(self, cnpj: str | int | float | None):
|
|
60
|
+
"""
|
|
61
|
+
Initialize the instance with a CNPJ value.
|
|
62
|
+
|
|
63
|
+
Args:
|
|
64
|
+
cnpj (str | int | float | None): The CNPJ value, which can be a string, integer, float, or None.
|
|
65
|
+
"""
|
|
66
|
+
self._input_cnpj = cnpj
|
|
67
|
+
self.cnpj = cnpj
|
|
68
|
+
|
|
69
|
+
def __str__(self) -> str:
|
|
70
|
+
"""
|
|
71
|
+
Returns a string representation of the object by formatting it.
|
|
72
|
+
If formatting fails or returns None, an empty string is returned.
|
|
73
|
+
|
|
74
|
+
Returns:
|
|
75
|
+
str: The formatted string representation of the object, or an empty string if formatting fails.
|
|
76
|
+
"""
|
|
77
|
+
return self.cnpj
|
|
78
|
+
|
|
79
|
+
def __repr__(self) -> str:
|
|
80
|
+
"""
|
|
81
|
+
Return a string representation of the object, displaying the class name and the value of the 'cnpj' attribute.
|
|
82
|
+
|
|
83
|
+
Returns:
|
|
84
|
+
str: A string in the format "<ClassName>(cnpj='<cnpj_value>')".
|
|
85
|
+
"""
|
|
86
|
+
return f"{self.__class__.__name__}('{self.cnpj}')"
|
|
87
|
+
|
|
88
|
+
@property
|
|
89
|
+
def firm(self) -> str:
|
|
90
|
+
"""
|
|
91
|
+
Returns the base part of the firm's CNPJ (Cadastro Nacional da Pessoa Jurídica) as a string.
|
|
92
|
+
The CNPJ is sanitized and zero-filled if necessary, then truncated to exclude the last 4 digits.
|
|
93
|
+
|
|
94
|
+
Returns:
|
|
95
|
+
str: The base CNPJ string, excluding the branch identifier.
|
|
96
|
+
"""
|
|
97
|
+
if self.is_valid():
|
|
98
|
+
return self.cnpj[: CNPJ_BASE_LENGTH.default - 4]
|
|
99
|
+
return None
|
|
100
|
+
|
|
101
|
+
@property
|
|
102
|
+
def subsidiary(self) -> str:
|
|
103
|
+
"""
|
|
104
|
+
Returns the subsidiary portion of the CNPJ number as a string.
|
|
105
|
+
|
|
106
|
+
This property sanitizes the CNPJ value (optionally zero-filling it), then extracts and returns the last 4 digits, which represent the subsidiary code according to the CNPJ format.
|
|
107
|
+
|
|
108
|
+
Returns:
|
|
109
|
+
str: The 4-digit subsidiary code from the CNPJ.
|
|
110
|
+
"""
|
|
111
|
+
if self.is_valid():
|
|
112
|
+
return self.cnpj[CNPJ_BASE_LENGTH.default - 4 : CNPJ_BASE_LENGTH.default]
|
|
113
|
+
return None
|
|
114
|
+
|
|
115
|
+
@property
|
|
116
|
+
def dv(self) -> str:
|
|
117
|
+
"""
|
|
118
|
+
Returns the 'dv' (check digit) portion of the sanitized identifier string.
|
|
119
|
+
|
|
120
|
+
The method first sanitizes the identifier (optionally zero-filling it), then slices
|
|
121
|
+
the string from the position defined by `CNPJ_BASE_LENGTH.default` to extract the check digit(s).
|
|
122
|
+
|
|
123
|
+
Returns:
|
|
124
|
+
str: The check digit(s) of the sanitized identifier.
|
|
125
|
+
"""
|
|
126
|
+
if self.is_valid():
|
|
127
|
+
return self.cnpj[CNPJ_BASE_LENGTH.default :]
|
|
128
|
+
return None
|
|
129
|
+
|
|
130
|
+
def sanitize(self, zfill: bool = True) -> str | None:
|
|
131
|
+
"""
|
|
132
|
+
Sanitize a CNPJ string.
|
|
133
|
+
|
|
134
|
+
- Removes non-alphanumeric characters
|
|
135
|
+
- Uppercases letters
|
|
136
|
+
- If zfill=True, left-pads with zeros until length == 14
|
|
137
|
+
|
|
138
|
+
Parameters
|
|
139
|
+
----------
|
|
140
|
+
zfill : bool, default=True
|
|
141
|
+
Whether to left-pad the sanitized value to length 14.
|
|
142
|
+
|
|
143
|
+
Returns
|
|
144
|
+
-------
|
|
145
|
+
str | None
|
|
146
|
+
Sanitized CNPJ or None if input is None.
|
|
147
|
+
|
|
148
|
+
Raises
|
|
149
|
+
------
|
|
150
|
+
TypeError
|
|
151
|
+
If `cnpj` is not str|None.
|
|
152
|
+
"""
|
|
153
|
+
sanitized = self._input_cnpj
|
|
154
|
+
|
|
155
|
+
if sanitized in {None, True, False, ''}:
|
|
156
|
+
self.cnpj = None
|
|
157
|
+
|
|
158
|
+
else:
|
|
159
|
+
if isinstance(sanitized, float):
|
|
160
|
+
sanitized = int(sanitized)
|
|
161
|
+
|
|
162
|
+
if isinstance(sanitized, int):
|
|
163
|
+
sanitized = str(sanitized)
|
|
164
|
+
|
|
165
|
+
if not isinstance(sanitized, str):
|
|
166
|
+
raise TypeError('CNPJ must be a string, integer, float, or None')
|
|
167
|
+
|
|
168
|
+
sanitized = ''.join(ch for ch in sanitized.strip() if ch.isalnum()).upper()
|
|
169
|
+
|
|
170
|
+
if zfill:
|
|
171
|
+
sanitized = sanitized.zfill(CNPJ_LENGTH.default)
|
|
172
|
+
|
|
173
|
+
self.cnpj = sanitized
|
|
174
|
+
|
|
175
|
+
return self.cnpj
|
|
176
|
+
|
|
177
|
+
def normalize(self, zfill: bool = False, errors: str = 'raise') -> str | None:
|
|
178
|
+
"""
|
|
179
|
+
Normalize a CNPJ with structural validation only (no DV check).
|
|
180
|
+
|
|
181
|
+
Always:
|
|
182
|
+
- sanitizes input
|
|
183
|
+
- applies zfill to reach length 14
|
|
184
|
+
|
|
185
|
+
Structural rules:
|
|
186
|
+
- first 12 chars: alphanumeric
|
|
187
|
+
- last 2 chars: digits
|
|
188
|
+
|
|
189
|
+
Parameters
|
|
190
|
+
----------
|
|
191
|
+
zfill : bool, default=False
|
|
192
|
+
Whether to left-pad the sanitized value to length 14.
|
|
193
|
+
errors : {'raise', 'coerce', 'ignore'}, default='raise'
|
|
194
|
+
Behavior when parsing fails while normalizing ``self.cnpj``.
|
|
195
|
+
|
|
196
|
+
Returns
|
|
197
|
+
-------
|
|
198
|
+
str | None
|
|
199
|
+
Sanitized 14-character CNPJ, None, or original input.
|
|
200
|
+
"""
|
|
201
|
+
if errors not in {'raise', 'coerce', 'ignore'}:
|
|
202
|
+
raise ValueError("errors must be one of: 'raise', 'coerce', 'ignore'")
|
|
203
|
+
|
|
204
|
+
try:
|
|
205
|
+
self.sanitize(zfill=zfill)
|
|
206
|
+
|
|
207
|
+
if self.cnpj is None:
|
|
208
|
+
raise CNPJError('CNPJ is None.')
|
|
209
|
+
|
|
210
|
+
if not self.is_valid(check_dv=False):
|
|
211
|
+
raise CNPJError('CNPJ validation failed.')
|
|
212
|
+
|
|
213
|
+
except CNPJError as err:
|
|
214
|
+
if errors == 'coerce':
|
|
215
|
+
self.cnpj = None
|
|
216
|
+
if errors == 'raise':
|
|
217
|
+
raise err
|
|
218
|
+
|
|
219
|
+
return self.cnpj
|
|
220
|
+
|
|
221
|
+
def _ascii48_value(self, ch: str) -> int:
|
|
222
|
+
"""
|
|
223
|
+
Converts a single alphanumeric character to its ASCII code minus 48.
|
|
224
|
+
|
|
225
|
+
This method is used internally for mapping characters according to the new DV rule.
|
|
226
|
+
It validates that the input is a single alphanumeric character and raises a CNPJError
|
|
227
|
+
if the input is invalid.
|
|
228
|
+
|
|
229
|
+
Args:
|
|
230
|
+
ch (str): A single character string to be converted.
|
|
231
|
+
|
|
232
|
+
Returns:
|
|
233
|
+
int: The ASCII value of the uppercase version of `ch`, minus 48.
|
|
234
|
+
|
|
235
|
+
Raises:
|
|
236
|
+
CNPJError: If `ch` is not a single character or is not alphanumeric.
|
|
237
|
+
"""
|
|
238
|
+
if len(ch) != 1:
|
|
239
|
+
raise CNPJError(f'Invalid character {ch!r}: must be a single character')
|
|
240
|
+
if not ch.isalnum():
|
|
241
|
+
raise CNPJError(f'Invalid character {ch!r}: must be alphanumeric')
|
|
242
|
+
return ord(ch.upper()) - 48
|
|
243
|
+
|
|
244
|
+
def _calc_dv(self, payload: str, weights: tuple[int, ...]) -> str:
|
|
245
|
+
"""
|
|
246
|
+
Calculates a single check digit (DV) using the modulo 11 algorithm.
|
|
247
|
+
|
|
248
|
+
Args:
|
|
249
|
+
payload (str): The input string for which the check digit is to be calculated.
|
|
250
|
+
weights (tuple[int, ...]): A tuple of integer weights to be applied to each character in the payload.
|
|
251
|
+
|
|
252
|
+
Returns:
|
|
253
|
+
str: The calculated check digit as a string. Returns '0' if the result is less than 2, otherwise returns (11 - result) as a string.
|
|
254
|
+
|
|
255
|
+
Note:
|
|
256
|
+
This is an internal method used for check digit calculation in Brazilian document validation.
|
|
257
|
+
"""
|
|
258
|
+
total = sum(self._ascii48_value(ch) * w for ch, w in zip(payload, weights))
|
|
259
|
+
result = total % 11
|
|
260
|
+
return '0' if result < 2 else str(11 - result)
|
|
261
|
+
|
|
262
|
+
def _calc_dvs_from_base(self, base: str) -> str:
|
|
263
|
+
"""
|
|
264
|
+
Calculates and returns the two check digits (DVs) for a given 12-character CNPJ base string.
|
|
265
|
+
|
|
266
|
+
Args:
|
|
267
|
+
base (str): A 12-character alphanumeric string representing the CNPJ base.
|
|
268
|
+
|
|
269
|
+
Returns:
|
|
270
|
+
str: The two calculated check digits concatenated as a string.
|
|
271
|
+
|
|
272
|
+
Raises:
|
|
273
|
+
CNPJError: If the base is not exactly 12 alphanumeric characters.
|
|
274
|
+
"""
|
|
275
|
+
if len(base) != CNPJ_BASE_LENGTH.default or not all(ch.isalnum() for ch in base):
|
|
276
|
+
raise CNPJError('Base must be exactly 12 alphanumeric characters')
|
|
277
|
+
dv1 = self._calc_dv(base, WEIGHTS_DV1.default)
|
|
278
|
+
dv2 = self._calc_dv(f'{base}{dv1}', WEIGHTS_DV2.default)
|
|
279
|
+
return f'{dv1}{dv2}'
|
|
280
|
+
|
|
281
|
+
def is_valid(self, check_dv: bool = False) -> bool:
|
|
282
|
+
"""
|
|
283
|
+
Validate a *sanitized* CNPJ (14 chars).
|
|
284
|
+
If instantiated with an unsanitized CNPJ, call self.sanitize() first.
|
|
285
|
+
|
|
286
|
+
Parameters
|
|
287
|
+
----------
|
|
288
|
+
check_dv : bool, default=False
|
|
289
|
+
If False, only structural checks are performed.
|
|
290
|
+
If True, structural + DV check (módulo 11 with ASCII-48 mapping).
|
|
291
|
+
|
|
292
|
+
Returns
|
|
293
|
+
-------
|
|
294
|
+
bool
|
|
295
|
+
True if valid, else False.
|
|
296
|
+
"""
|
|
297
|
+
if not isinstance(self.cnpj, str) or len(self.cnpj) != CNPJ_LENGTH.default:
|
|
298
|
+
return False
|
|
299
|
+
|
|
300
|
+
base, dvs = self.cnpj[: CNPJ_BASE_LENGTH.default], self.cnpj[CNPJ_BASE_LENGTH.default :]
|
|
301
|
+
|
|
302
|
+
if not dvs.isdigit():
|
|
303
|
+
return False
|
|
304
|
+
|
|
305
|
+
if not re.fullmatch(rf'{BASE_VALUES_REGEX}{{{CNPJ_BASE_LENGTH.default}}}', base):
|
|
306
|
+
return False
|
|
307
|
+
|
|
308
|
+
if not check_dv:
|
|
309
|
+
return True
|
|
310
|
+
|
|
311
|
+
try:
|
|
312
|
+
return dvs == self._calc_dvs_from_base(base)
|
|
313
|
+
except CNPJError:
|
|
314
|
+
return False
|
|
315
|
+
|
|
316
|
+
def format(self, errors: str = 'raise') -> str | None:
|
|
317
|
+
"""
|
|
318
|
+
Format a CNPJ as 'AA.AAA.AAA/AAAA-DD'.
|
|
319
|
+
|
|
320
|
+
Delegates parsing to cls.normalize().
|
|
321
|
+
|
|
322
|
+
Parameters
|
|
323
|
+
----------
|
|
324
|
+
errors : {'raise', 'coerce', 'ignore'}, default='raise'
|
|
325
|
+
Normalization error behavior.
|
|
326
|
+
|
|
327
|
+
Returns
|
|
328
|
+
-------
|
|
329
|
+
str | None
|
|
330
|
+
Formatted CNPJ, None, or original input.
|
|
331
|
+
"""
|
|
332
|
+
self.normalize(zfill=True, errors=errors)
|
|
333
|
+
if self.cnpj is None or not isinstance(self.cnpj, str):
|
|
334
|
+
return self.cnpj
|
|
335
|
+
return f'{self.cnpj[0:2]}.{self.cnpj[2:5]}.{self.cnpj[5:8]}/{self.cnpj[8:12]}-{self.cnpj[12:]}'
|
|
336
|
+
|
|
337
|
+
@staticmethod
|
|
338
|
+
def generate_random(valid_dv: bool = True) -> str:
|
|
339
|
+
"""
|
|
340
|
+
Generate a random CNPJ using the new alphanumeric base format.
|
|
341
|
+
|
|
342
|
+
Parameters
|
|
343
|
+
----------
|
|
344
|
+
valid_dv : bool, default=True
|
|
345
|
+
If True, generate a DV-valid CNPJ.
|
|
346
|
+
If False, generate a structurally valid but DV-invalid CNPJ.
|
|
347
|
+
|
|
348
|
+
Returns
|
|
349
|
+
-------
|
|
350
|
+
str
|
|
351
|
+
Sanitized 14-character CNPJ.
|
|
352
|
+
"""
|
|
353
|
+
base = ''.join(random.choice(BASE_VALUES) for _ in range(CNPJ_BASE_LENGTH.default))
|
|
354
|
+
|
|
355
|
+
# To avoid calling cls from a staticmethod, compute using local helpers:
|
|
356
|
+
# We'll re-use the module-level logic through a lightweight inline calc.
|
|
357
|
+
def ascii48_value(ch: str) -> int:
|
|
358
|
+
return ord(ch.upper()) - 48
|
|
359
|
+
|
|
360
|
+
def calc_dv(payload: str, weights: tuple[int, ...]) -> str:
|
|
361
|
+
total = sum(ascii48_value(ch) * w for ch, w in zip(payload, weights))
|
|
362
|
+
rest = total % 11
|
|
363
|
+
return '0' if rest < 2 else str(11 - rest)
|
|
364
|
+
|
|
365
|
+
dv1 = calc_dv(base, WEIGHTS_DV1.default)
|
|
366
|
+
dv2 = calc_dv(f'{base}{dv1}', WEIGHTS_DV2.default)
|
|
367
|
+
dvs = f'{dv1}{dv2}'
|
|
368
|
+
|
|
369
|
+
if valid_dv:
|
|
370
|
+
return CNPJ(f'{base}{dvs}')
|
|
371
|
+
|
|
372
|
+
invalid_second_dv = str((int(dvs[1]) + random.randint(1, 9)) % 10)
|
|
373
|
+
return CNPJ(f'{base}{dvs[0]}{invalid_second_dv}')
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
###############################################################################
|
|
2
|
+
#
|
|
3
|
+
# (C) Copyright 2026 EVERYSK TECHNOLOGIES
|
|
4
|
+
#
|
|
5
|
+
# This is an unpublished work containing confidential and proprietary
|
|
6
|
+
# information of EVERYSK TECHNOLOGIES. Disclosure, use, or reproduction
|
|
7
|
+
# without authorization of EVERYSK TECHNOLOGIES is prohibited.
|
|
8
|
+
#
|
|
9
|
+
################################################################################
|
|
10
|
+
import pandas as pd
|
|
11
|
+
|
|
12
|
+
from everysk.sdk.brutils.cnpj import CNPJ
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
@pd.api.extensions.register_series_accessor('cnpj')
|
|
16
|
+
class CNPJAccessor:
|
|
17
|
+
"""
|
|
18
|
+
A pandas accessor class for handling CNPJ (Cadastro Nacional da Pessoa Jurídica) operations on pandas Series.
|
|
19
|
+
|
|
20
|
+
Parameters
|
|
21
|
+
----------
|
|
22
|
+
pandas_obj : pandas.Series
|
|
23
|
+
The pandas Series object containing CNPJ values.
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
def __init__(self, pandas_obj):
|
|
27
|
+
self._obj = pandas_obj
|
|
28
|
+
|
|
29
|
+
def sanitize(self, zfill: bool = True):
|
|
30
|
+
return self._obj.apply(lambda x: CNPJ(x).sanitize(zfill=zfill))
|
|
31
|
+
|
|
32
|
+
def normalize(self, zfill: bool = False, errors: str = 'raise'):
|
|
33
|
+
return self._obj.apply(lambda x: CNPJ(x).normalize(zfill=zfill, errors=errors))
|
|
34
|
+
|
|
35
|
+
def is_valid(self, check_dv: bool = False):
|
|
36
|
+
return self._obj.apply(lambda x: CNPJ(x).is_valid(check_dv=check_dv))
|
|
37
|
+
|
|
38
|
+
def format(self, errors: str = 'raise'):
|
|
39
|
+
return self._obj.apply(lambda x: CNPJ(x).format(errors=errors))
|
|
40
|
+
|
|
41
|
+
def generate(self, valid_dv: bool = True):
|
|
42
|
+
return self._obj.apply(lambda x: str(CNPJ.generate_random(valid_dv=valid_dv)))
|
{everysk_lib-1.9.9 → everysk_lib-1.10.1}/src/everysk/sdk/entities/worker_execution/settings.py
RENAMED
|
@@ -24,7 +24,8 @@ WORKER_EXECUTION_STATUS_COMPLETED = StrField(default='COMPLETED', readonly=True)
|
|
|
24
24
|
WORKER_EXECUTION_STATUS_FAILED = StrField(default='FAILED', readonly=True)
|
|
25
25
|
WORKER_EXECUTION_STATUS_PREPARING = StrField(default='PREPARING', readonly=True)
|
|
26
26
|
WORKER_EXECUTION_STATUS_RUNNING = StrField(default='RUNNING', readonly=True)
|
|
27
|
-
|
|
27
|
+
WORKER_EXECUTION_STATUS_TIMEOUT = StrField(default='TIMEOUT', readonly=True)
|
|
28
|
+
WORKER_EXECUTION_STATUS_LIST = ListField(default=['COMPLETED', 'FAILED', 'PREPARING', 'RUNNING', 'TIMEOUT'], readonly=True)
|
|
28
29
|
|
|
29
30
|
WORKER_EXECUTION_INTEGRATION_EVENT_TYPE = StrField(default='INTEGRATION_EVENT', readonly=True)
|
|
30
31
|
WORKER_EXECUTION_SCHEDULER_EVENT_TYPE = StrField(default='SCHEDULER_EVENT', readonly=True)
|
|
@@ -45,6 +45,18 @@ class ConnectionPool(_ConnectionPool):
|
|
|
45
45
|
|
|
46
46
|
|
|
47
47
|
class Transaction:
|
|
48
|
+
"""
|
|
49
|
+
Context manager for PostgreSQL transactions.
|
|
50
|
+
|
|
51
|
+
Usage:
|
|
52
|
+
|
|
53
|
+
>>> from everysk.sql.connection import Transaction, execute
|
|
54
|
+
>>> with Transaction():
|
|
55
|
+
... result = execute("SELECT * FROM my_table WHERE id = %s", params={"id": 1})
|
|
56
|
+
... # Perform other database operations within the transaction
|
|
57
|
+
|
|
58
|
+
"""
|
|
59
|
+
|
|
48
60
|
## Private attributes
|
|
49
61
|
_connection: Connection
|
|
50
62
|
_pool: ConnectionPool
|
|
@@ -88,6 +100,13 @@ def make_connection_dsn(
|
|
|
88
100
|
Create a PostgreSQL connection DSN from settings.
|
|
89
101
|
Supports both TCP and Unix socket connections.
|
|
90
102
|
If parameters are provided, they override the settings.
|
|
103
|
+
|
|
104
|
+
Args:
|
|
105
|
+
host (str | None): The database host. If None, uses the setting.
|
|
106
|
+
port (int | None): The database port. If None, uses the setting.
|
|
107
|
+
user (str | None): The database user. If None, uses the setting.
|
|
108
|
+
password (str | None): The database password. If None, uses the setting.
|
|
109
|
+
database (str | None): The database name. If None, uses the setting.
|
|
91
110
|
"""
|
|
92
111
|
options: dict[str, str | int] = {
|
|
93
112
|
'host': host or settings.POSTGRESQL_CONNECTION_HOST,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: everysk-lib
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.10.1
|
|
4
4
|
Summary: Generic lib to share python code on Everysk.
|
|
5
5
|
License-Expression: LicenseRef-Proprietary
|
|
6
6
|
Project-URL: Homepage, https://everysk.com/
|
|
@@ -19,13 +19,13 @@ Provides-Extra: requests
|
|
|
19
19
|
Requires-Dist: certifi==2025.10.5; extra == "requests"
|
|
20
20
|
Requires-Dist: charset_normalizer==3.4.4; extra == "requests"
|
|
21
21
|
Requires-Dist: idna==3.11; extra == "requests"
|
|
22
|
-
Requires-Dist: urllib3==2.
|
|
22
|
+
Requires-Dist: urllib3==2.6.3; extra == "requests"
|
|
23
23
|
Requires-Dist: requests==2.32.5; extra == "requests"
|
|
24
24
|
Provides-Extra: firestore
|
|
25
25
|
Requires-Dist: certifi==2025.10.5; extra == "firestore"
|
|
26
26
|
Requires-Dist: charset-normalizer==3.3.2; extra == "firestore"
|
|
27
27
|
Requires-Dist: idna==3.6; extra == "firestore"
|
|
28
|
-
Requires-Dist: urllib3==2.
|
|
28
|
+
Requires-Dist: urllib3==2.6.3; extra == "firestore"
|
|
29
29
|
Requires-Dist: requests==2.32.4; extra == "firestore"
|
|
30
30
|
Requires-Dist: pyasn1==0.5.1; extra == "firestore"
|
|
31
31
|
Requires-Dist: pyasn1-modules==0.3.0; extra == "firestore"
|
|
@@ -47,7 +47,7 @@ Provides-Extra: tasks
|
|
|
47
47
|
Requires-Dist: certifi==2025.10.5; extra == "tasks"
|
|
48
48
|
Requires-Dist: charset-normalizer==3.3.2; extra == "tasks"
|
|
49
49
|
Requires-Dist: idna==3.6; extra == "tasks"
|
|
50
|
-
Requires-Dist: urllib3==2.
|
|
50
|
+
Requires-Dist: urllib3==2.6.3; extra == "tasks"
|
|
51
51
|
Requires-Dist: requests==2.32.4; extra == "tasks"
|
|
52
52
|
Requires-Dist: pyasn1==0.5.1; extra == "tasks"
|
|
53
53
|
Requires-Dist: pyasn1-modules==0.3.0; extra == "tasks"
|
|
@@ -104,9 +104,9 @@ Requires-Dist: httpx==0.28.1; extra == "httpx"
|
|
|
104
104
|
Provides-Extra: paramiko
|
|
105
105
|
Requires-Dist: bcrypt==4.2.0; extra == "paramiko"
|
|
106
106
|
Requires-Dist: pycparser==2.22; extra == "paramiko"
|
|
107
|
-
Requires-Dist: cffi==
|
|
107
|
+
Requires-Dist: cffi==2.0.0; extra == "paramiko"
|
|
108
108
|
Requires-Dist: cryptography==44.0.1; extra == "paramiko"
|
|
109
|
-
Requires-Dist: pynacl==1.
|
|
109
|
+
Requires-Dist: pynacl==1.6.2; extra == "paramiko"
|
|
110
110
|
Requires-Dist: paramiko==3.5.0; extra == "paramiko"
|
|
111
111
|
Provides-Extra: everysk-orjson
|
|
112
112
|
Requires-Dist: everysk-orjson==3.11.3; extra == "everysk-orjson"
|
|
@@ -73,6 +73,8 @@ src/everysk/sdk/base.py
|
|
|
73
73
|
src/everysk/sdk/settings.py
|
|
74
74
|
src/everysk/sdk/tests.py
|
|
75
75
|
src/everysk/sdk/worker_base.py
|
|
76
|
+
src/everysk/sdk/brutils/cnpj.py
|
|
77
|
+
src/everysk/sdk/brutils/cnpj_pd.py
|
|
76
78
|
src/everysk/sdk/engines/__init__.py
|
|
77
79
|
src/everysk/sdk/engines/cache.py
|
|
78
80
|
src/everysk/sdk/engines/compliance.py
|