Skip to content

Commit 336229c

Browse files
committed
added numbers to revision name, reg exp: ^[0-9]{14}[a-z0-9_]+.py$
1 parent f6fb529 commit 336229c

File tree

6 files changed

+67
-60
lines changed

6 files changed

+67
-60
lines changed

pyproject.toml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ dependencies = [
1111
"rich>=13.9, < 14",
1212
"typer>=0.15, < 0.16",
1313
"clickhouse-driver>=0.2.9, < 0.3",
14-
"ripley==0.2.0a0"
14+
"ripley==0.1.0b0"
1515
]
1616

1717
classifiers = [
@@ -41,8 +41,8 @@ build-backend = "setuptools.build_meta"
4141

4242
[dependency-groups]
4343
dev = [
44-
"ruff>=0.9.1, <1",
45-
"parameterized==0.9.0",
44+
"ruff>=0.11.4, <1",
45+
"parameterized==0.9.0, < 1",
4646
"pytest>=8.3.4, <9",
4747
]
4848

tests/migrations/.gitignore

Whitespace-only changes.

tests/test_cli.py

Lines changed: 39 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ def setUp(self):
8484
'',
8585
),
8686
):
87-
file_path = os.path.join(self.thedus_dir, f'2025010100000{file_name}.py')
87+
file_path = os.path.join(self.thedus_dir, f'20250101000000_{file_name}.py')
8888
get_env_to_skip = f"""
8989
@classmethod
9090
def get_env_to_skip(cls) -> list:
@@ -150,32 +150,32 @@ def down(self):
150150
[
151151
'dev',
152152
[
153-
'upgrade to 20250101000000_create_tbl_metrics',
154-
'SKIP 20250101000001_insert_into_metrics',
155-
'upgrade to 20250101000002_create_tbl_events',
156-
'upgrade to 20250101000003_create_tbl_logs',
153+
'upgrade to 20250101000000_0_create_tbl_metrics',
154+
'SKIP 20250101000000_1_insert_into_metrics',
155+
'upgrade to 20250101000000_2_create_tbl_events',
156+
'upgrade to 20250101000000_3_create_tbl_logs',
157157
'done',
158158
],
159159
[[(0,)], [(0,)], [(0,)]],
160-
[('upgrade', '20250101000000_create_tbl_metrics', 'dev', 0),
161-
('upgrade', '20250101000001_insert_into_metrics', 'dev', 1),
162-
('upgrade', '20250101000002_create_tbl_events', 'dev', 0),
163-
('upgrade', '20250101000003_create_tbl_logs', 'dev', 0)],
160+
[('upgrade', '20250101000000_0_create_tbl_metrics', 'dev', 0),
161+
('upgrade', '20250101000000_1_insert_into_metrics', 'dev', 1),
162+
('upgrade', '20250101000000_2_create_tbl_events', 'dev', 0),
163+
('upgrade', '20250101000000_3_create_tbl_logs', 'dev', 0)],
164164
],
165165
[
166166
'prod',
167167
[
168-
'upgrade to 20250101000000_create_tbl_metrics',
169-
'upgrade to 20250101000001_insert_into_metrics',
170-
'upgrade to 20250101000002_create_tbl_events',
171-
'upgrade to 20250101000003_create_tbl_logs',
168+
'upgrade to 20250101000000_0_create_tbl_metrics',
169+
'upgrade to 20250101000000_1_insert_into_metrics',
170+
'upgrade to 20250101000000_2_create_tbl_events',
171+
'upgrade to 20250101000000_3_create_tbl_logs',
172172
'done',
173173
],
174174
[[(1,)], [(0,)], [(0,)]],
175-
[('upgrade', '20250101000000_create_tbl_metrics', 'prod', 0),
176-
('upgrade', '20250101000001_insert_into_metrics', 'prod', 0),
177-
('upgrade', '20250101000002_create_tbl_events', 'prod', 0),
178-
('upgrade', '20250101000003_create_tbl_logs', 'prod', 0)],
175+
[('upgrade', '20250101000000_0_create_tbl_metrics', 'prod', 0),
176+
('upgrade', '20250101000000_1_insert_into_metrics', 'prod', 0),
177+
('upgrade', '20250101000000_2_create_tbl_events', 'prod', 0),
178+
('upgrade', '20250101000000_3_create_tbl_logs', 'prod', 0)],
179179
],
180180
])
181181
def test_upgrade_downgrade(
@@ -198,48 +198,48 @@ def test_upgrade_downgrade(
198198

199199
# 1 downgrade
200200
result = subprocess.getoutput('thedus downgrade')
201-
self.check_thedus_output(result, ['rollback 20250101000003_create_tbl_logs', 'done'])
201+
self.check_thedus_output(result, ['rollback 20250101000000_3_create_tbl_logs', 'done'])
202202
self.assertEqual(
203203
[],
204204
self.clickhouse.execute(
205205
f"SELECT * FROM system.tables WHERE table = 'logs' AND database = '{self.db_name}'"
206206
))
207207

208208
def test_upgrade_to_revision(self):
209-
result = subprocess.getoutput('thedus upgrade 20250101000000_create_tbl_metrics')
210-
self.check_thedus_output(result, ['upgrade to 20250101000000_create_tbl_metrics', 'done'])
209+
result = subprocess.getoutput('thedus upgrade 20250101000000_0_create_tbl_metrics')
210+
self.check_thedus_output(result, ['upgrade to 20250101000000_0_create_tbl_metrics', 'done'])
211211
self.check_thedus_migration_log([
212-
('upgrade 20250101000000_create_tbl_metrics', '20250101000000_create_tbl_metrics', 'dev', 0),
212+
('upgrade 20250101000000_0_create_tbl_metrics', '20250101000000_0_create_tbl_metrics', 'dev', 0),
213213
])
214214

215215
self.assertEqual([(0,)], self.clickhouse.execute('SELECT count() FROM metrics'))
216-
result = subprocess.getoutput('thedus upgrade 20250101000002_create_tbl_events')
216+
result = subprocess.getoutput('thedus upgrade 20250101000000_2_create_tbl_events')
217217
self.check_thedus_output(
218218
result,
219219
[
220-
'SKIP 20250101000001_insert_into_metrics',
221-
'upgrade to 20250101000002_create_tbl_events',
220+
'SKIP 20250101000000_1_insert_into_metrics',
221+
'upgrade to 20250101000000_2_create_tbl_events',
222222
'done',
223223
])
224224

225225
self.check_thedus_migration_log([
226-
('upgrade 20250101000000_create_tbl_metrics', '20250101000000_create_tbl_metrics', 'dev', 0),
227-
('upgrade 20250101000002_create_tbl_events', '20250101000001_insert_into_metrics', 'dev', 1),
228-
('upgrade 20250101000002_create_tbl_events', '20250101000002_create_tbl_events', 'dev', 0),
226+
('upgrade 20250101000000_0_create_tbl_metrics', '20250101000000_0_create_tbl_metrics', 'dev', 0),
227+
('upgrade 20250101000000_2_create_tbl_events', '20250101000000_1_insert_into_metrics', 'dev', 1),
228+
('upgrade 20250101000000_2_create_tbl_events', '20250101000000_2_create_tbl_events', 'dev', 0),
229229
])
230230

231231
self.assertEqual([(0,)], self.clickhouse.execute('SELECT count() FROM events'))
232232

233233
def test_downgrade_to_revision(self):
234234
subprocess.getoutput('thedus upgrade')
235-
result = subprocess.getoutput('thedus downgrade 20250101000001_insert_into_metrics')
235+
result = subprocess.getoutput('thedus downgrade 20250101000000_1_insert_into_metrics')
236236

237237
self.check_thedus_output(
238238
result,
239239
[
240-
'rollback 20250101000003_create_tbl_logs',
241-
'rollback 20250101000002_create_tbl_events',
242-
'SKIP 20250101000001_insert_into_metrics',
240+
'rollback 20250101000000_3_create_tbl_logs',
241+
'rollback 20250101000000_2_create_tbl_events',
242+
'SKIP 20250101000000_1_insert_into_metrics',
243243
'done',
244244
]
245245
)
@@ -253,15 +253,15 @@ def test_downgrade_to_revision(self):
253253
)
254254

255255
self.check_thedus_migration_log([
256-
('upgrade', '20250101000000_create_tbl_metrics', 'dev', 0),
257-
('upgrade', '20250101000001_insert_into_metrics', 'dev', 1),
258-
('upgrade', '20250101000002_create_tbl_events', 'dev', 0),
259-
('upgrade', '20250101000003_create_tbl_logs', 'dev', 0),
260-
('downgrade 20250101000001_insert_into_metrics', '20250101000002_create_tbl_events', 'dev', 0),
261-
('downgrade 20250101000001_insert_into_metrics', '20250101000001_insert_into_metrics', 'dev', 0),
262-
('downgrade 20250101000001_insert_into_metrics', '20250101000000_create_tbl_metrics', 'dev', 1)])
256+
('upgrade', '20250101000000_0_create_tbl_metrics', 'dev', 0),
257+
('upgrade', '20250101000000_1_insert_into_metrics', 'dev', 1),
258+
('upgrade', '20250101000000_2_create_tbl_events', 'dev', 0),
259+
('upgrade', '20250101000000_3_create_tbl_logs', 'dev', 0),
260+
('downgrade 20250101000000_1_insert_into_metrics', '20250101000000_2_create_tbl_events', 'dev', 0),
261+
('downgrade 20250101000000_1_insert_into_metrics', '20250101000000_1_insert_into_metrics', 'dev', 0),
262+
('downgrade 20250101000000_1_insert_into_metrics', '20250101000000_0_create_tbl_metrics', 'dev', 1)])
263263

264264
result = subprocess.getoutput('thedus downgrade')
265-
self.check_thedus_output(result, ['rollback 20250101000000_create_tbl_metrics', 'done'])
265+
self.check_thedus_output(result, ['rollback 20250101000000_0_create_tbl_metrics', 'done'])
266266
result = subprocess.getoutput('thedus downgrade')
267267
self.check_thedus_output(result, ['done'])

thedus/migration_file_manager.py

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,17 @@
11
import codecs
22
import os
33
import re
4-
from datetime import datetime, timezone
54
from typing import List
65

76
from .env_manager import EnvManager as Env
87

98

109
class MigrationFileManager:
11-
@staticmethod
12-
def create_migration(name: str) -> str:
13-
name = '_'.join([datetime.now(timezone.utc).strftime('%Y%m%d%H%M%S'), name])
14-
migration_path = os.path.join(Env.get_thedus_dir(), name) + '.py'
10+
MIGRATION_FILENAME_PATTERN = '^[0-9]{14}[a-z0-9_]+.py$'
1511

16-
with codecs.open(migration_path, 'w', encoding='utf-8') as file:
12+
@staticmethod
13+
def create_migration(file_path: str) -> str:
14+
with codecs.open(file_path, 'w', encoding='utf-8') as file:
1715
file.write("""from thedus.base_migration import BaseMigration
1816
1917
@@ -24,23 +22,26 @@ def up(self):
2422
def down(self):
2523
self._clickhouse.exec('SELECT 1')
2624
""")
27-
return migration_path
25+
return file_path
2826

29-
@staticmethod
30-
def get_migrations(asc: bool = True) -> List[str]:
27+
@classmethod
28+
def get_migrations(cls, asc: bool = True) -> List[str]:
3129
"""
3230
Returns a list of all migrations in the thedus directory
3331
"""
3432
files = []
3533
for filename in os.listdir(Env.get_thedus_dir()):
36-
if not re.fullmatch('^[0-9]{14}[a-z_]+.py$', filename):
37-
continue
38-
39-
files.append(os.path.join(Env.get_thedus_dir(), filename))
34+
if cls.is_valid_migration_file(filename):
35+
files.append(os.path.join(Env.get_thedus_dir(), filename))
4036

4137
files = sorted(files)
4238
if asc:
4339
return files
4440

4541
files.reverse()
4642
return files
43+
44+
@classmethod
45+
def is_valid_migration_file(cls, filename: str) -> bool:
46+
if re.fullmatch(cls.MIGRATION_FILENAME_PATTERN, filename):
47+
return True

thedus/run.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1+
import os
12
import re
23
import logging
4+
from datetime import timezone, datetime
35
from logging.config import dictConfig
46

57
import typer
@@ -93,13 +95,17 @@ def state(
9395

9496
@app.command(help='Generates a new migration file. example: thedus create-migration create_metrics')
9597
def create_migration(name: str):
96-
pattern = '[a-z_]{6,30}'
97-
if re.fullmatch(pattern, name):
98-
migration_path = Migrations.create_migration(name)
98+
now = datetime.now(timezone.utc).strftime('%Y%m%d%H%M%S')
99+
file_name = f'{now}_{name}.py'
100+
migration_path = os.path.join(Env.get_thedus_dir(), file_name)
101+
102+
if Migrations.is_valid_migration_file(file_name):
103+
migration_path = Migrations.create_migration(migration_path)
99104
logging.info(f'{migration_path} created')
100105
return
101106

102-
logging.info(f'Invalid migration name "{name}". The name must match reg exp {pattern}')
107+
logging.error(f'Invalid migration name "{name}". The name must match reg exp '
108+
f'{Migrations.MIGRATION_FILENAME_PATTERN}')
103109
exit(1)
104110

105111

uv.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)