python-code-validator 0.1.3__py3-none-any.whl → 0.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.
- code_validator/__init__.py +1 -1
- code_validator/cli.py +45 -19
- code_validator/components/factories.py +31 -13
- code_validator/config.py +7 -4
- code_validator/core.py +115 -36
- code_validator/output.py +162 -14
- code_validator/rules_library/basic_rules.py +12 -7
- code_validator/rules_library/constraint_logic.py +301 -292
- code_validator/rules_library/selector_nodes.py +9 -0
- {python_code_validator-0.1.3.dist-info → python_code_validator-0.3.0.dist-info}/METADATA +2 -2
- python_code_validator-0.3.0.dist-info/RECORD +22 -0
- python_code_validator-0.1.3.dist-info/RECORD +0 -22
- {python_code_validator-0.1.3.dist-info → python_code_validator-0.3.0.dist-info}/WHEEL +0 -0
- {python_code_validator-0.1.3.dist-info → python_code_validator-0.3.0.dist-info}/entry_points.txt +0 -0
- {python_code_validator-0.1.3.dist-info → python_code_validator-0.3.0.dist-info}/licenses/LICENSE +0 -0
- {python_code_validator-0.1.3.dist-info → python_code_validator-0.3.0.dist-info}/top_level.txt +0 -0
@@ -13,6 +13,7 @@ from typing import Any
|
|
13
13
|
from ..components.ast_utils import get_full_name
|
14
14
|
from ..components.definitions import Selector
|
15
15
|
from ..components.scope_handler import find_scope_node
|
16
|
+
from ..output import LogLevel, log_initialization
|
16
17
|
|
17
18
|
|
18
19
|
class ScopedSelector(Selector):
|
@@ -67,6 +68,7 @@ class FunctionDefSelector(ScopedSelector):
|
|
67
68
|
name (str): The name of the function to find. Use "*" to find all.
|
68
69
|
"""
|
69
70
|
|
71
|
+
@log_initialization(level=LogLevel.TRACE)
|
70
72
|
def __init__(self, **kwargs: Any):
|
71
73
|
"""Initializes the FunctionDefSelector.
|
72
74
|
|
@@ -98,6 +100,7 @@ class ClassDefSelector(ScopedSelector):
|
|
98
100
|
name (str): The name of the class to find. Use "*" to find all.
|
99
101
|
"""
|
100
102
|
|
103
|
+
@log_initialization(level=LogLevel.TRACE)
|
101
104
|
def __init__(self, **kwargs: Any):
|
102
105
|
"""Initializes the selector."""
|
103
106
|
super().__init__(**kwargs)
|
@@ -124,6 +127,7 @@ class ImportStatementSelector(ScopedSelector):
|
|
124
127
|
name (str): The name of the module to find (e.g., "os", "requests").
|
125
128
|
"""
|
126
129
|
|
130
|
+
@log_initialization(level=LogLevel.TRACE)
|
127
131
|
def __init__(self, **kwargs: Any):
|
128
132
|
"""Initializes the ImportStatementSelector.
|
129
133
|
|
@@ -169,6 +173,7 @@ class FunctionCallSelector(ScopedSelector):
|
|
169
173
|
name (str): The full name of the function being called.
|
170
174
|
"""
|
171
175
|
|
176
|
+
@log_initialization(level=LogLevel.TRACE)
|
172
177
|
def __init__(self, **kwargs: Any):
|
173
178
|
"""Initializes the selector."""
|
174
179
|
super().__init__(**kwargs)
|
@@ -200,6 +205,7 @@ class AssignmentSelector(ScopedSelector):
|
|
200
205
|
name (str): The full name of the variable or attribute being assigned to.
|
201
206
|
"""
|
202
207
|
|
208
|
+
@log_initialization(level=LogLevel.TRACE)
|
203
209
|
def __init__(self, **kwargs: Any):
|
204
210
|
"""Initializes the AssignmentSelector.
|
205
211
|
|
@@ -239,6 +245,7 @@ class UsageSelector(ScopedSelector):
|
|
239
245
|
name (str): The name of the variable or attribute being used.
|
240
246
|
"""
|
241
247
|
|
248
|
+
@log_initialization(level=LogLevel.TRACE)
|
242
249
|
def __init__(self, **kwargs: Any):
|
243
250
|
"""Initializes the UsageSelector.
|
244
251
|
|
@@ -273,6 +280,7 @@ class LiteralSelector(ScopedSelector):
|
|
273
280
|
name (str): The type of literal to find. Supported: "number", "string".
|
274
281
|
"""
|
275
282
|
|
283
|
+
@log_initialization(level=LogLevel.TRACE)
|
276
284
|
def __init__(self, **kwargs: Any):
|
277
285
|
"""Initializes the LiteralSelector.
|
278
286
|
|
@@ -340,6 +348,7 @@ class AstNodeSelector(ScopedSelector):
|
|
340
348
|
as defined in the `ast` module (e.g., "For", "While", "Try").
|
341
349
|
"""
|
342
350
|
|
351
|
+
@log_initialization(level=LogLevel.TRACE)
|
343
352
|
def __init__(self, **kwargs: Any):
|
344
353
|
"""Initializes the AstNodeSelector.
|
345
354
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: python-code-validator
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.3.0
|
4
4
|
Summary: A flexible, AST-based framework for static validation of Python code using declarative JSON rules.
|
5
5
|
Author-email: Qu1nel <covach.qn@gmail.com>
|
6
6
|
License: MIT License
|
@@ -287,7 +287,7 @@ Validation failed.
|
|
287
287
|
**[Read the Docs](https://[your-project].readthedocs.io)**.
|
288
288
|
- **Developer's Guide**: For a deep dive into the architecture, see the
|
289
289
|
**[How It Works guide](./docs/how_it_works/index.md)**.
|
290
|
-
- **Interactive AI-Powered Docs**:
|
290
|
+
- **Interactive AI-Powered Docs**: **[DeepWiki](https://deepwiki.com/Qu1nel/PythonCodeValidator)**.
|
291
291
|
|
292
292
|
## 🤝 Contributing
|
293
293
|
|
@@ -0,0 +1,22 @@
|
|
1
|
+
code_validator/__init__.py,sha256=_C8AEkBsAbgA7PJ58v_K_2vuCXl_XtRrk_oMp6UEEvI,1721
|
2
|
+
code_validator/__main__.py,sha256=Z41EoJqX03AI11gnku_Iwt6rP8SPUkYuxwN7P51qgLc,600
|
3
|
+
code_validator/cli.py,sha256=f0B9Pmnj0oKuknhxo0seqbdgEedW8lA-WJuVujLZ9m0,5173
|
4
|
+
code_validator/config.py,sha256=h9bCeVc_gFMKDWWrexmIytuAivBednwBc7sO4c_Axrs,5196
|
5
|
+
code_validator/core.py,sha256=3w5Zi_2jyl4vl8IEN4Yekelqn8pi9Bv2VVego6SUGrw,12288
|
6
|
+
code_validator/exceptions.py,sha256=XkiRNQ25FWJkjS2wBaUaKQcEL5WF9tN_HSV3tqJwDcE,1627
|
7
|
+
code_validator/output.py,sha256=wpr24W8m-viS5--RB9Z8dCxFEYlYxGaiwJ7pRMW4BWw,9268
|
8
|
+
code_validator/components/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
9
|
+
code_validator/components/ast_utils.py,sha256=v0N3F58oxNMg7bUY6-8x0AeoLsxrzrp_bLTGNVr5EMU,1589
|
10
|
+
code_validator/components/definitions.py,sha256=9WEXQ_i-S4Vega6HqOdjreZE_1cgJPC7guZodTKtzhc,3208
|
11
|
+
code_validator/components/factories.py,sha256=XvsSXbTHHmPrOvAseSYc9Xl8z-Zu5K5Eb8aWAvIgkuQ,11327
|
12
|
+
code_validator/components/scope_handler.py,sha256=q4cFK_YzoYvAqPkw9wPPxgPe-aO0kgy6gk0ETWduj-U,2593
|
13
|
+
code_validator/rules_library/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
14
|
+
code_validator/rules_library/basic_rules.py,sha256=RGlHEDnd0Cn72ofbE8Y7wAl9h7iZR8reR80v2oiICTo,7118
|
15
|
+
code_validator/rules_library/constraint_logic.py,sha256=-gN6GaIZvPfHqiLCzH5Jwuz6DcPaQKlepbMo2r5V2Yc,11026
|
16
|
+
code_validator/rules_library/selector_nodes.py,sha256=wCAnQRSdEB8HM8avTy1wkJzyb6v2EQgHIPASXruiqbc,14733
|
17
|
+
python_code_validator-0.3.0.dist-info/licenses/LICENSE,sha256=Lq69RwIO4Dge7OsjgAamJfYSDq2DWI2yzVYI1VX1s6c,1089
|
18
|
+
python_code_validator-0.3.0.dist-info/METADATA,sha256=rysi7-B63cRuzDUgE_bltaF06CDHBcdYDddB3isxNs4,12089
|
19
|
+
python_code_validator-0.3.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
20
|
+
python_code_validator-0.3.0.dist-info/entry_points.txt,sha256=pw_HijiZyPxokVJHStTkGCwheTjukDomdk81JyHzv74,66
|
21
|
+
python_code_validator-0.3.0.dist-info/top_level.txt,sha256=yowMDfABI5oqgW3hhTdec_7UHGeprkvc2BnqRzNbI5w,15
|
22
|
+
python_code_validator-0.3.0.dist-info/RECORD,,
|
@@ -1,22 +0,0 @@
|
|
1
|
-
code_validator/__init__.py,sha256=3eCuRsidy-Tc4QASdz7mwRIiGYOumb9uPxY3ob85HBs,1721
|
2
|
-
code_validator/__main__.py,sha256=Z41EoJqX03AI11gnku_Iwt6rP8SPUkYuxwN7P51qgLc,600
|
3
|
-
code_validator/cli.py,sha256=PtPxlgKdbAAEKDpI1Xk7bZ5CKVYr9efIlOgh45Igjxk,4119
|
4
|
-
code_validator/config.py,sha256=qLuGsFPn61RS97clV8zHd43jb9EBIBwBzl1jrSKLD2w,5052
|
5
|
-
code_validator/core.py,sha256=n4aP_ohE_9qoX9lqbmPSvMZouxomWxauFiwgjzA1_ys,8003
|
6
|
-
code_validator/exceptions.py,sha256=XkiRNQ25FWJkjS2wBaUaKQcEL5WF9tN_HSV3tqJwDcE,1627
|
7
|
-
code_validator/output.py,sha256=VRJLGwm6X9i8SnovosNrHu96ueZXz9GIvUQXy4xDtHw,3304
|
8
|
-
code_validator/components/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
9
|
-
code_validator/components/ast_utils.py,sha256=v0N3F58oxNMg7bUY6-8x0AeoLsxrzrp_bLTGNVr5EMU,1589
|
10
|
-
code_validator/components/definitions.py,sha256=9WEXQ_i-S4Vega6HqOdjreZE_1cgJPC7guZodTKtzhc,3208
|
11
|
-
code_validator/components/factories.py,sha256=0-U--7pekt-fIvqb_WesWh_ehKCvJ7ROObx5GU-yjGc,10492
|
12
|
-
code_validator/components/scope_handler.py,sha256=q4cFK_YzoYvAqPkw9wPPxgPe-aO0kgy6gk0ETWduj-U,2593
|
13
|
-
code_validator/rules_library/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
14
|
-
code_validator/rules_library/basic_rules.py,sha256=VYm6t_En0t6D42vp6vtCr5XV6-M4xuPupX8Hz6-eveI,6858
|
15
|
-
code_validator/rules_library/constraint_logic.py,sha256=CRnzMgLR17Ja2d4M3jWBO-xLLPB6Vpk7iusGMoyJ17s,10932
|
16
|
-
code_validator/rules_library/selector_nodes.py,sha256=hWzvar1tvnkEFReCFLSw5oTK9HETNmdNVcDD3_57Iyg,14306
|
17
|
-
python_code_validator-0.1.3.dist-info/licenses/LICENSE,sha256=Lq69RwIO4Dge7OsjgAamJfYSDq2DWI2yzVYI1VX1s6c,1089
|
18
|
-
python_code_validator-0.1.3.dist-info/METADATA,sha256=NlDRdvgugKe3hWC-Z8q1h7_lrqZBJ4Jpd6YbjD3nuVU,12081
|
19
|
-
python_code_validator-0.1.3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
20
|
-
python_code_validator-0.1.3.dist-info/entry_points.txt,sha256=pw_HijiZyPxokVJHStTkGCwheTjukDomdk81JyHzv74,66
|
21
|
-
python_code_validator-0.1.3.dist-info/top_level.txt,sha256=yowMDfABI5oqgW3hhTdec_7UHGeprkvc2BnqRzNbI5w,15
|
22
|
-
python_code_validator-0.1.3.dist-info/RECORD,,
|
File without changes
|
{python_code_validator-0.1.3.dist-info → python_code_validator-0.3.0.dist-info}/entry_points.txt
RENAMED
File without changes
|
{python_code_validator-0.1.3.dist-info → python_code_validator-0.3.0.dist-info}/licenses/LICENSE
RENAMED
File without changes
|
{python_code_validator-0.1.3.dist-info → python_code_validator-0.3.0.dist-info}/top_level.txt
RENAMED
File without changes
|