Skip to content

Commit 3007015

Browse files
Fix creation of missing project package (#140)
1 parent 507a10e commit 3007015

File tree

6 files changed

+31
-17
lines changed

6 files changed

+31
-17
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
* Removed unnecessary calls to TzKT API during the partial sync.
1616
* Fixed removal of PostgreSQL extensions (`timescaledb`, `pgcrypto`) by function `truncate_database` triggered on reindex.
1717
* Fixed updating relation between index and head in DB.
18+
* Fixed creation of missing project package
1819

1920
## 3.0.1 - 2021-09-24
2021

src/dipdup/cli.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ def init_sentry(config: DipDupConfig) -> None:
9292
@click.pass_context
9393
@cli_wrapper
9494
async def cli(ctx, config: List[str], env_file: List[str], logging_config: str):
95+
# NOTE: Config from cwd, fallback to builtin
9596
try:
9697
path = join(os.getcwd(), logging_config)
9798
_logging_config = LoggingConfig.load(path)
@@ -111,6 +112,8 @@ async def cli(ctx, config: List[str], env_file: List[str], logging_config: str):
111112
_config = DipDupConfig.load(config)
112113
init_sentry(_config)
113114

115+
await DipDupCodeGenerator(_config, {}).create_package()
116+
114117
if _config.spec_version not in spec_version_mapping:
115118
raise ConfigurationError(f'Unknown `spec_version`, correct ones: {", ".join(spec_version_mapping)}')
116119
if _config.spec_version != __spec_version__ and ctx.invoked_subcommand != 'migrate':
@@ -148,7 +151,7 @@ async def run(ctx, reindex: bool, oneshot: bool) -> None:
148151
@cli_wrapper
149152
async def init(ctx, overwrite_types: bool):
150153
config: DipDupConfig = ctx.obj.config
151-
config.pre_initialize()
154+
config.initialize(skip_imports=True)
152155
dipdup = DipDup(config)
153156
await dipdup.init(overwrite_types)
154157

@@ -158,7 +161,7 @@ async def init(ctx, overwrite_types: bool):
158161
@cli_wrapper
159162
async def migrate(ctx):
160163
config: DipDupConfig = ctx.obj.config
161-
config.pre_initialize()
164+
config.initialize(skip_imports=True)
162165
migrations = DipDupMigrationManager(config, ctx.obj.config_paths)
163166
await migrations.migrate()
164167

src/dipdup/config.py

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -888,6 +888,7 @@ def __post_init_post_parse__(self):
888888
self._default_hooks: bool = False
889889
self._links_resolved: Set[str] = set()
890890
self._imports_resolved: Set[str] = set()
891+
self._package_path: Optional[str] = None
891892

892893
@property
893894
def environment(self) -> Dict[str, str]:
@@ -899,8 +900,17 @@ def filenames(self) -> List[str]:
899900

900901
@property
901902
def package_path(self) -> str:
902-
package = importlib.import_module(self.package)
903-
return dirname(package.__file__)
903+
if not self._package_path:
904+
package = importlib.import_module(self.package)
905+
self._package_path = dirname(package.__file__)
906+
907+
return self._package_path
908+
909+
@package_path.setter
910+
def package_path(self, value: str):
911+
if self._package_path:
912+
raise ConfigInitializationException
913+
self._package_path = value
904914

905915
@classmethod
906916
def load(
@@ -972,14 +982,14 @@ def get_tzkt_datasource(self, name: str) -> TzktDatasourceConfig:
972982
raise ConfigurationError('`datasource` field must refer to TzKT datasource')
973983
return datasource
974984

975-
def pre_initialize(self) -> None:
985+
def initialize(self, skip_imports: bool = False) -> None:
976986
self._set_names()
977987
self._resolve_templates()
978988
self._resolve_links()
979989
self._validate()
980990

981-
def initialize(self) -> None:
982-
self.pre_initialize()
991+
if skip_imports:
992+
return
983993

984994
for index_config in self.indexes.values():
985995
if index_config.name in self._imports_resolved:
@@ -991,12 +1001,12 @@ def initialize(self) -> None:
9911001
raise ConfigInitializationException
9921002

9931003
elif isinstance(index_config, OperationIndexConfig):
994-
self._load_operation_index_types(index_config)
995-
self._load_index_callbacks(index_config)
1004+
self._import_operation_index_types(index_config)
1005+
self._import_index_callbacks(index_config)
9961006

9971007
elif isinstance(index_config, BigMapIndexConfig):
998-
self._load_big_map_index_types(index_config)
999-
self._load_index_callbacks(index_config)
1008+
self._import_big_map_index_types(index_config)
1009+
self._import_index_callbacks(index_config)
10001010

10011011
else:
10021012
raise NotImplementedError(f'Index kind `{index_config.kind}` is not supported')
@@ -1151,7 +1161,7 @@ def _set_names(self) -> None:
11511161
for name, config in named_configs.items():
11521162
config.name = name
11531163

1154-
def _load_operation_index_types(self, index_config: OperationIndexConfig) -> None:
1164+
def _import_operation_index_types(self, index_config: OperationIndexConfig) -> None:
11551165
for handler_config in index_config.handlers:
11561166
for pattern_config in handler_config.pattern:
11571167
if isinstance(pattern_config, OperationHandlerTransactionPatternConfig):
@@ -1165,11 +1175,11 @@ def _load_operation_index_types(self, index_config: OperationIndexConfig) -> Non
11651175
else:
11661176
raise NotImplementedError
11671177

1168-
def _load_index_callbacks(self, index_config: ResolvedIndexConfigT) -> None:
1178+
def _import_index_callbacks(self, index_config: ResolvedIndexConfigT) -> None:
11691179
for handler_config in index_config.handlers:
11701180
handler_config.initialize_callback_fn(self.package)
11711181

1172-
def _load_big_map_index_types(self, index_config: BigMapIndexConfig) -> None:
1182+
def _import_big_map_index_types(self, index_config: BigMapIndexConfig) -> None:
11731183
for big_map_handler_config in index_config.handlers:
11741184
big_map_handler_config.initialize_big_map_type(self.package)
11751185

src/dipdup/dipdup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ async def _fetch_contracts(self) -> None:
9797
if contract.name not in self._ctx.config.contracts:
9898
contract_config = ContractConfig(address=contract.address, typename=contract.typename)
9999
self._ctx.config.contracts[contract.name] = contract_config
100-
self._ctx.config.pre_initialize()
100+
self._ctx.config.initialize(skip_imports=True)
101101

102102
async def _subscribe_to_datasource_events(self) -> None:
103103
for datasource in self._ctx.datasources.values():

tests/integration_tests/test_codegen.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ async def test_codegen(self):
2121
with self.subTest(name):
2222
config_path = join(dirname(__file__), name)
2323
config = DipDupConfig.load([config_path])
24-
config.pre_initialize()
24+
config.initialize(skip_imports=True)
2525
config.package = 'tmp_test_dipdup'
2626

2727
if config.package in sys.modules:

tests/integration_tests/test_hasura.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ class HasuraTest(IsolatedAsyncioTestCase):
1818
async def test_configure_hasura(self):
1919
config_path = join(dirname(__file__), 'hic_et_nunc.yml')
2020
config = DipDupConfig.load([config_path])
21-
config.pre_initialize()
21+
config.initialize(skip_imports=True)
2222

2323
async with AsyncExitStack() as stack:
2424
postgres_container = PostgresContainer()

0 commit comments

Comments
 (0)