Skip to content

Commit 21c097f

Browse files
Set config values from environment variables (#4)
1 parent c514b70 commit 21c097f

File tree

8 files changed

+41
-39
lines changed

8 files changed

+41
-39
lines changed

README.md

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -31,17 +31,14 @@ database:
3131

3232
contracts:
3333
HEN_objkts:
34-
network: mainnet
35-
address: KT1Hkg5qeNhfwpKW4fXvq7HGZB9z2EnmCCA9
34+
address: ${HEN_OBJKTS:-KT1Hkg5qeNhfwpKW4fXvq7HGZB9z2EnmCCA9}
3635
HEN_minter:
37-
network: mainnet
38-
address: KT1RJ6PbjHpwc3M5rw5s2Nbmefwbuwbdxton
36+
address: ${HEN_MINTER:-KT1RJ6PbjHpwc3M5rw5s2Nbmefwbuwbdxton}
3937

4038
datasources:
4139
tzkt_mainnet:
4240
kind: tzkt
43-
network: mainnet
44-
url: https://staging.api.tzkt.io
41+
url: ${TZKT_URL:-https://staging.api.tzkt.io}
4542

4643
indexes:
4744
operations_mainnet:
@@ -168,6 +165,12 @@ Now everything is ready to run your indexer:
168165
$ dipdup -c config.yml run
169166
```
170167

168+
Parameters wrapped with `${VARIABLE:-default_value}` in config could be set from corresponding environment variables. For example if you want to use another TzKT instance:
169+
170+
```shell
171+
$ TZKT_URL=https://api.tzkt.io dipdup -c config.yml run
172+
```
173+
171174
You can interrupt indexing at any moment, it will start from last processed block next time you run your app again.
172175

173176
Use `docker-compose.yml` included in this repo if you prefer to run dipdup in Docker:
@@ -179,8 +182,6 @@ $ # edit `secrets.env` file, change credentials
179182
$ docker-compose up dipdup
180183
```
181184

182-
Note that can use `DIPDUP_DATABASE_PASSWORD` environment variable to avoid storing database password in `dipdup.yml`.
183-
184185
### Optional: configure Hasura GraphQL Engine
185186

186187
`init` command generates Hasura metadata JSON in the package root. You can use `configure-graphql` command to apply it to the running GraphQL Engine instance:

secrets.env.example

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
DIPDUP_DATABASE_PASSWORD=changeme
1+
HEN_OBJKTS=KT1Hkg5qeNhfwpKW4fXvq7HGZB9z2EnmCCA9
2+
HEN_MINTER=KT1RJ6PbjHpwc3M5rw5s2Nbmefwbuwbdxton
3+
TZKT_URL=https://staging.api.tzkt.io
24

35
POSTGRES_USER=dipdup
46
POSTGRES_DB=dipdup

src/dipdup/config.py

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import json
44
import logging.config
55
import os
6+
import re
67
import sys
78
from os import environ as env
89
from os.path import dirname
@@ -17,6 +18,7 @@
1718
from dipdup.models import IndexType, State
1819

1920
ROLLBACK_HANDLER = 'on_rollback'
21+
ENV_VARIABLE_REGEX = r'\${([\w]*):-(.*)}'
2022

2123

2224
@dataclass
@@ -53,10 +55,6 @@ class DatabaseConfig:
5355
database: str
5456
password: str = ''
5557

56-
def __post_init_post_parse__(self):
57-
if not self.password:
58-
self.password = env.get('DIPDUP_DATABASE_PASSWORD', '')
59-
6058
@property
6159
def connection_string(self):
6260
return f'{self.driver}://{self.user}:{self.password}@{self.host}:{self.port}/{self.database}'
@@ -72,7 +70,6 @@ class TzktDatasourceConfig:
7270

7371
kind: Literal['tzkt']
7472
url: str
75-
network: Optional[str] = None
7673

7774

7875
@dataclass
@@ -219,7 +216,6 @@ class ContractConfig:
219216
"""
220217

221218
address: str
222-
network: Optional[str] = None
223219

224220

225221
@dataclass
@@ -267,8 +263,16 @@ def load(
267263
filename = os.path.join(current_workdir, filename)
268264

269265
with open(filename) as file:
270-
raw_config = YAML(typ='base').load(file.read())
271-
config = cls(**raw_config)
266+
raw_config = file.read()
267+
268+
for match in re.finditer(ENV_VARIABLE_REGEX, raw_config):
269+
variable, default_value = match.group(1), match.group(2)
270+
value = env.get(variable)
271+
placeholder = '${' + variable + ':-' + default_value + '}'
272+
raw_config = raw_config.replace(placeholder, value or default_value)
273+
274+
json_config = YAML(typ='base').load(raw_config)
275+
config = cls(**json_config)
272276
return config
273277

274278
async def initialize(self) -> None:

src/dipdup_hic_et_nunc/dipdup-docker.yml

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,20 +7,18 @@ database:
77
port: 5432
88
user: dipdup
99
database: dipdup
10+
password: ${POSTGRES_PASSWORD:-changeme}
1011

1112
contracts:
1213
HEN_objkts:
13-
network: mainnet
14-
address: KT1Hkg5qeNhfwpKW4fXvq7HGZB9z2EnmCCA9
14+
address: ${HEN_OBJKTS:-KT1Hkg5qeNhfwpKW4fXvq7HGZB9z2EnmCCA9}
1515
HEN_minter:
16-
network: mainnet
17-
address: KT1RJ6PbjHpwc3M5rw5s2Nbmefwbuwbdxton
16+
address: ${HEN_MINTER:-KT1RJ6PbjHpwc3M5rw5s2Nbmefwbuwbdxton}
1817

1918
datasources:
2019
tzkt_mainnet:
2120
kind: tzkt
22-
network: mainnet
23-
url: https://staging.api.tzkt.io
21+
url: ${TZKT_URL:-https://staging.api.tzkt.io}
2422

2523
indexes:
2624
operations_mainnet:

src/dipdup_hic_et_nunc/dipdup.yml

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,14 @@ database:
66

77
contracts:
88
HEN_objkts:
9-
network: mainnet
10-
address: KT1Hkg5qeNhfwpKW4fXvq7HGZB9z2EnmCCA9
9+
address: ${HEN_OBJKTS:-KT1Hkg5qeNhfwpKW4fXvq7HGZB9z2EnmCCA9}
1110
HEN_minter:
12-
network: mainnet
13-
address: KT1RJ6PbjHpwc3M5rw5s2Nbmefwbuwbdxton
11+
address: ${HEN_MINTER:-KT1RJ6PbjHpwc3M5rw5s2Nbmefwbuwbdxton}
1412

1513
datasources:
1614
tzkt_mainnet:
1715
kind: tzkt
18-
network: mainnet
19-
url: https://staging.api.tzkt.io
16+
url: ${TZKT_URL:-https://staging.api.tzkt.io}
2017

2118
indexes:
2219
operations_mainnet:

src/dipdup_hic_et_nunc/hasura_metadata.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,8 @@
5353
"role": "user",
5454
"permission": {
5555
"columns": [
56-
"token_id",
5756
"token_info",
57+
"token_id",
5858
"id"
5959
],
6060
"filter": {},

tests/test_dipdup/dipdup.yml

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,14 @@ database:
66

77
contracts:
88
HEN_objkts:
9-
network: mainnet
10-
address: KT1Hkg5qeNhfwpKW4fXvq7HGZB9z2EnmCCA9
9+
address: ${HEN_OBJKTS:-KT1Hkg5qeNhfwpKW4fXvq7HGZB9z2EnmCCA9}
1110
HEN_minter:
12-
network: mainnet
13-
address: KT1RJ6PbjHpwc3M5rw5s2Nbmefwbuwbdxton
11+
address: ${HEN_MINTER:-KT1RJ6PbjHpwc3M5rw5s2Nbmefwbuwbdxton}
1412

1513
datasources:
1614
tzkt_mainnet:
1715
kind: tzkt
18-
network: mainnet
19-
url: https://staging.api.tzkt.io
16+
url: ${TZKT_URL:-https://staging.api.tzkt.io}
2017

2118
indexes:
2219
operations_mainnet:

tests/test_dipdup/test_datasources/test_tzkt/test_cache.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,11 +50,14 @@ async def test_process(self):
5050

5151
await self.cache.process(callback_mock)
5252

53-
callback_mock.assert_awaited_with(
53+
self.assertEqual(
54+
callback_mock.await_args[0][0],
5455
OperationHandlerConfig(
5556
callback='',
5657
pattern=[OperationHandlerPatternConfig(destination='KT1AFA2mwNUMNd4SsujE1YYp29vd8BZejyKW', entrypoint='hDAO_batch')],
5758
),
58-
[ANY],
59-
ANY,
6059
)
60+
self.assertIsInstance(callback_mock.await_args[0][1], list)
61+
self.assertIsInstance(callback_mock.await_args[0][1][0], OperationData)
62+
self.assertIsInstance(callback_mock.await_args[0][2], list)
63+
self.assertIsInstance(callback_mock.await_args[0][2][0], OperationData)

0 commit comments

Comments
 (0)