@@ -9,6 +9,7 @@ dependencies = [
99 " httpx>=0.27.2" ,
1010 " asyncio>=3.4.3" ,
1111 " pydantic>=2.9.2" ,
12+ " cryptography>=43.0.0" ,
1213]
1314requires-python = " >=3.10"
1415readme = " README.md"
@@ -25,18 +26,119 @@ all = ["solders", "web3"]
2526requires = [" pdm-backend" ]
2627build-backend = " pdm.backend"
2728
29+ [dependency-groups ]
30+ test = [
31+ " pytest>=8.3.3" ,
32+ " pytest-asyncio>=0.24.0" ,
33+ " evidence-api>=0.5.0" ,
34+ ]
35+ lint = [
36+ " mypy>=1.8.0" ,
37+ " black>=24.0.0" ,
38+ " isort>=5.12.0" ,
39+ " flake8>=7.0.0" ,
40+ " flake8-docstrings>=1.7.0" ,
41+ " flake8-pyproject>=1.2.3" ,
42+ ]
43+ solana = [
44+ " solders" ,
45+ ]
46+ ethereum = [
47+ " web3" ,
48+ ]
49+
50+ [tool .mypy ]
51+ python_version = " 3.10"
52+ warn_return_any = true
53+ warn_unused_configs = true
54+ disallow_untyped_defs = true
55+ disallow_incomplete_defs = true
56+ check_untyped_defs = true
57+ disallow_untyped_decorators = true
58+ no_implicit_optional = true
59+ warn_redundant_casts = true
60+ warn_unused_ignores = true
61+ warn_no_return = true
62+ warn_unreachable = true
63+ strict_equality = true
64+ show_error_codes = true
65+
66+ # Black configuration
67+ [tool .black ]
68+ line-length = 88
69+ target-version = [' py310' ]
70+ include = ' \.pyi?$'
71+ exclude = '''
72+ /(
73+ \.git
74+ | \.hg
75+ | \.mypy_cache
76+ | \.tox
77+ | \.venv
78+ | _build
79+ | buck-out
80+ | build
81+ | dist
82+ )/
83+ '''
84+
85+ # isort configuration
86+ [tool .isort ]
87+ profile = " black"
88+ line_length = 88
89+ # Enforce one import per line without parentheses
90+ force_single_line = true
91+ use_parentheses = false
92+ include_trailing_comma = false
93+ multi_line_output = 3
94+ force_grid_wrap = 0
95+ ensure_newline_before_comments = true
96+
97+ # flake8 configuration
98+ [tool .flake8 ]
99+ max-line-length = 88
100+ extend-ignore = [
101+ " E203" , # whitespace before ':'
102+ " E501" , # line too long (handled by black)
103+ " W503" , # line break before binary operator
104+ ]
105+ exclude = [
106+ " .git" ,
107+ " __pycache__" ,
108+ " build" ,
109+ " dist" ,
110+ " .venv" ,
111+ " .mypy_cache" ,
112+ " .pytest_cache" ,
113+ ]
114+ per-file-ignores = [
115+ " __init__.py:F401" , # imported but unused
116+ " tests/*.py:D100,D101,D102,D103,D104" , # relax docstring rules for tests
117+ ]
28118[tool .pdm ]
29119distribution = true
30120
31121[tool .pdm .publish ]
32122repository = " pypi"
33123
124+ [tool .pdm .scripts ]
125+ # Formatting scripts
126+ fmt = {composite = [" isort src/ tests/" , " black src/ tests/" ]}
127+ format = {call = " pdm:fmt" }
128+
129+ # Linting scripts
130+ lint = {composite = [" flake8 src/ tests/" , " mypy src/" ]}
131+ check = {composite = [" black --check src/ tests/" , " isort --check-only src/ tests/" , " flake8 src/ tests/" , " mypy src/" ]}
132+
133+ # Testing scripts
134+ test = " pytest"
135+ test-cov = " pytest --cov=src/"
136+
137+ # Combined scripts
138+ check-all = {composite = [" pdm:fmt" , " pdm:lint" , " pdm:test" ]}
139+ verify = {composite = [" pdm:check" , " pdm:test" ]}
140+
34141[tool .pdm .dev-dependencies ]
35- test = [
36- " pytest>=8.3.3" ,
37- " pytest-asyncio>=0.24.0" ,
38- " evidence-api>=0.5.0" ,
39- ]
40142solana = [
41143 " solders" ,
42144]
0 commit comments