Skip to content

Commit 30db533

Browse files
Fix multiple codegen regressions (#776)
1 parent a0e2d6f commit 30db533

File tree

9 files changed

+54
-31
lines changed

9 files changed

+54
-31
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ The format is based on [Keep a Changelog], and this project adheres to [Semantic
1010

1111
- ci: Fixed dipdup package metadata.
1212
- cli: Generate base template from replay only when --base flag is set.
13+
- cli: Remove cached jsonschemas when calling init --force.
14+
- codegen: Filter jsonschemas by prefixes supported by code generator.
1315
- index: Remove Python limitation on large int<->str conversions.
1416
- index: Fixed crash when parsing typed transactions with empty parameter.
1517
- package: Don't create empty pyproject.toml during init.

pdm.lock

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

requirements.dev.txt

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,13 @@ babel==2.12.1
1818
bitarray==2.8.0
1919
black==23.7.0
2020
certifi==2023.7.22
21-
chardet==5.1.0
21+
chardet==5.2.0
2222
charset-normalizer==3.2.0
2323
click==8.1.6
2424
coverage==7.2.7
2525
cytoolz==0.12.2
26-
datamodel-code-generator==0.21.2
27-
dnspython==2.4.0
26+
datamodel-code-generator==0.21.3
27+
dnspython==2.4.1
2828
docker==6.1.3
2929
docutils==0.20.1
3030
email-validator==2.0.0.post2
@@ -39,9 +39,7 @@ eth-utils==2.2.0
3939
execnet==2.0.2
4040
frozenlist==1.4.0
4141
genson==1.2.2
42-
h11==0.14.0
4342
hexbytes==0.3.1
44-
httpcore==0.17.3
4543
idna==3.4
4644
imagesize==1.4.1
4745
inflect==5.6.2
@@ -58,15 +56,15 @@ msgpack==1.0.5
5856
multidict==6.0.4
5957
mypy==1.4.1
6058
mypy-extensions==1.0.0
61-
numpy==1.25.1
59+
numpy==1.25.2
6260
openapi-schema-validator==0.4.4
6361
openapi-spec-validator==0.5.2
6462
orjson==3.9.2
6563
packaging==23.1
6664
parsimonious==0.9.0
6765
pathable==0.4.3
68-
pathspec==0.11.1
69-
platformdirs==3.9.1
66+
pathspec==0.11.2
67+
platformdirs==3.10.0
7068
pluggy==1.2.0
7169
pprofile==2.1.0
7270
prance==23.6.21.0

requirements.txt

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,12 @@ attrs==23.1.0
1616
bitarray==2.8.0
1717
black==23.7.0
1818
certifi==2023.7.22
19-
chardet==5.1.0
19+
chardet==5.2.0
2020
charset-normalizer==3.2.0
2121
click==8.1.6
2222
cytoolz==0.12.2
23-
datamodel-code-generator==0.21.2
24-
dnspython==2.4.0
23+
datamodel-code-generator==0.21.3
24+
dnspython==2.4.1
2525
email-validator==2.0.0.post2
2626
eth-abi==4.1.0
2727
eth-account==0.9.0
@@ -33,9 +33,7 @@ eth-typing==3.4.0
3333
eth-utils==2.2.0
3434
frozenlist==1.4.0
3535
genson==1.2.2
36-
h11==0.14.0
3736
hexbytes==0.3.1
38-
httpcore==0.17.3
3937
idna==3.4
4038
inflect==5.6.2
4139
iso8601==1.1.0
@@ -49,15 +47,15 @@ MarkupSafe==2.1.3
4947
msgpack==1.0.5
5048
multidict==6.0.4
5149
mypy-extensions==1.0.0
52-
numpy==1.25.1
50+
numpy==1.25.2
5351
openapi-schema-validator==0.4.4
5452
openapi-spec-validator==0.5.2
5553
orjson==3.9.2
5654
packaging==23.1
5755
parsimonious==0.9.0
5856
pathable==0.4.3
59-
pathspec==0.11.1
60-
platformdirs==3.9.1
57+
pathspec==0.11.2
58+
platformdirs==3.10.0
6159
prance==23.6.21.0
6260
prometheus-client==0.17.1
6361
protobuf==4.23.4

src/dipdup/codegen/__init__.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from abc import ABC
44
from abc import abstractmethod
55
from pathlib import Path
6+
from shutil import rmtree
67
from shutil import which
78
from typing import Any
89
from typing import Awaitable
@@ -56,7 +57,7 @@ async def init(
5657
render_base(replay, force)
5758

5859
await self.generate_abi()
59-
await self.generate_schemas()
60+
await self.generate_schemas(force)
6061
await self._generate_types(force)
6162

6263
await self._generate_models()
@@ -71,7 +72,7 @@ async def generate_abi(self) -> None:
7172
...
7273

7374
@abstractmethod
74-
async def generate_schemas(self) -> None:
75+
async def generate_schemas(self, force: bool = False) -> None:
7576
...
7677

7778
@abstractmethod
@@ -206,6 +207,10 @@ async def _generate_models(self) -> None:
206207
content_path = Path(__file__).parent.parent / 'templates' / 'models.py'
207208
write(path, content_path.read_text())
208209

210+
def _cleanup_schemas(self) -> None:
211+
rmtree(self._package.schemas)
212+
self._package.schemas.mkdir()
213+
209214

210215
async def generate_environments(config: DipDupConfig, package: DipDupPackage) -> None:
211216
for default_env_path in package.deploy.glob(f'*{DEFAULT_ENV}'):

src/dipdup/codegen/evm_subsquid.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,10 @@ async def generate_abi(self) -> None:
111111
elif isinstance(index_config, SubsquidOperationsIndexConfig):
112112
raise NotImplementedError
113113

114-
async def generate_schemas(self) -> None:
114+
async def generate_schemas(self, force: bool = False) -> None:
115+
if force:
116+
self._cleanup_schemas()
117+
115118
events: set[str] = set()
116119
functions: set[str] = set()
117120

@@ -180,3 +183,8 @@ def get_typeclass_name(self, schema_path: Path) -> str:
180183
# else:
181184
# class_name = module_name
182185
return module_name
186+
187+
async def _generate_type(self, schema_path: Path, force: bool) -> None:
188+
if 'evm_events' not in schema_path.parts:
189+
return
190+
await super()._generate_type(schema_path, force)

src/dipdup/codegen/tezos_tzkt.py

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -101,9 +101,11 @@ def __init__(
101101
async def generate_abi(self) -> None:
102102
pass
103103

104-
async def generate_schemas(self) -> None:
104+
async def generate_schemas(self, force: bool = False) -> None:
105105
"""Fetch JSONSchemas for all contracts used in config"""
106106
self._logger.info('Fetching contract schemas')
107+
if force:
108+
self._cleanup_schemas()
107109

108110
unused_operation_templates = [
109111
t for t in self._config.templates.values() if isinstance(t, TzktOperationsIndexConfig)
@@ -171,15 +173,26 @@ async def generate_system_hooks(self) -> None:
171173

172174
def get_typeclass_name(self, schema_path: Path) -> str:
173175
module_name = schema_path.stem
174-
if schema_path.name == 'tezos_storage.json':
176+
if module_name == 'tezos_storage':
175177
class_name = f'{schema_path.parent.name}_storage'
176178
elif schema_path.parent.name == 'tezos_parameters':
177179
class_name = f'{module_name}_parameter'
178180
elif schema_path.parent.name == 'tezos_events':
179181
class_name = f'{module_name}_payload'
180182
else:
181183
class_name = module_name
182-
return class_name
184+
return snake_to_pascal(class_name)
185+
186+
async def _generate_type(self, schema_path: Path, force: bool) -> None:
187+
markers = {
188+
'tezos_storage.json',
189+
'tezos_parameters',
190+
'tezos_events',
191+
'tezos_big_maps',
192+
}
193+
if not set(schema_path.parts).intersection(markers):
194+
return
195+
await super()._generate_type(schema_path, force)
183196

184197
async def _get_schema(
185198
self,
@@ -378,7 +391,7 @@ def get_parameter_type(package: DipDupPackage, typename: str, entrypoint: str) -
378391

379392
def get_event_payload_type(package: DipDupPackage, typename: str, tag: str) -> TypeClass:
380393
tag = pascal_to_snake(tag.replace('.', '_'))
381-
module_name = f'tezos_event.{tag}'
394+
module_name = f'tezos_events.{tag}'
382395
cls_name = snake_to_pascal(f'{tag}_payload')
383396
return package.get_type(typename, module_name, cls_name)
384397

src/dipdup/indexes/tezos_tzkt_events/matcher.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,10 @@ def prepare_event_handler_args(
4646
typename=handler_config.contract.module_name,
4747
tag=handler_config.tag,
4848
)
49+
if not matched_event.payload:
50+
raise FrameworkException('Event is typed, but payload is empty')
51+
4952
with suppress(InvalidDataError):
50-
if not matched_event.payload:
51-
raise FrameworkException('Event payload is empty')
5253
typed_payload = parse_object(type_, matched_event.payload)
5354
return TzktEvent(
5455
data=matched_event,
@@ -97,6 +98,6 @@ def match_events(
9798
# NOTE: We don't care about `merge_subscriptions` here implying that all events will be processed
9899
# NOTE: Maybe "unfiltered" indexes will cover that case?
99100
for address in {event.contract_address for event in events}:
100-
_logger.warning('Some events were not matched; fallback handler is missing for `{}`', address)
101+
_logger.warning('Some events were not matched; fallback handler is missing for `%s`', address)
101102

102103
return matched_handlers

src/dipdup/package.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,6 @@ class DipDupPackage:
6161
def __init__(self, root: Path) -> None:
6262
self.root = root
6363
self.name = root.name
64-
self.loader = root / f'{self.name}.py'
6564

6665
# NOTE: Package sections with .keep markers
6766
self.abi = root / 'abi'
@@ -108,7 +107,6 @@ def skel(self) -> dict[Path, str | None]:
108107
self.models: '**/*.py',
109108
self.sql: '**/*.sql',
110109
self.types: '**/*.py',
111-
self.loader: '',
112110
# NOTE: Python metadata
113111
Path(PEP_561_MARKER): None,
114112
Path(PACKAGE_MARKER): None,

0 commit comments

Comments
 (0)