1
1
import datetime
2
2
import os
3
- import subprocess
4
3
from shlex import quote
4
+ import subprocess
5
5
6
6
from invoke import run as local
7
7
from invoke .tasks import task
8
8
9
+
9
10
# Process .env file
10
11
if os .path .exists (".env" ):
11
12
with open (".env" ) as f :
@@ -137,15 +138,11 @@ def psql(c, command=None):
137
138
@task
138
139
def delete_docker_database (c , local_database_name = LOCAL_DATABASE_NAME ):
139
140
dexec (
140
- "dropdb --if-exists --host db --username={project_name} {database_name}" .format (
141
- project_name = PROJECT_NAME , database_name = LOCAL_DATABASE_NAME
142
- ),
141
+ f"dropdb --if-exists --host db --username={ PROJECT_NAME } { LOCAL_DATABASE_NAME } " ,
143
142
"db" ,
144
143
)
145
144
dexec (
146
- "createdb --host db --username={project_name} {database_name}" .format (
147
- project_name = PROJECT_NAME , database_name = LOCAL_DATABASE_NAME
148
- ),
145
+ f"createdb --host db --username={ PROJECT_NAME } { LOCAL_DATABASE_NAME } " ,
149
146
"db" ,
150
147
)
151
148
psql (c , "CREATE SCHEMA heroku_ext;" )
@@ -160,12 +157,8 @@ def import_data(c, database_filename):
160
157
delete_docker_database (c )
161
158
# Import the database file to the db container
162
159
dexec (
163
- "pg_restore --clean --no-acl --if-exists --no-owner --host db \
164
- --username={project_name} -d {database_name} {database_filename}" .format (
165
- project_name = PROJECT_NAME ,
166
- database_name = LOCAL_DATABASE_NAME ,
167
- database_filename = database_filename ,
168
- ),
160
+ f"pg_restore --clean --no-acl --if-exists --no-owner --host db \
161
+ --username={ PROJECT_NAME } -d { LOCAL_DATABASE_NAME } { database_filename } " ,
169
162
service = "db" ,
170
163
)
171
164
print (
@@ -275,12 +268,8 @@ def delete_local_database(c, local_database_name=LOCAL_DATABASE_NAME):
275
268
276
269
def aws (c , command , aws_access_key_id , aws_secret_access_key ):
277
270
return local (
278
- "AWS_ACCESS_KEY_ID={access_key_id} AWS_SECRET_ACCESS_KEY={secret_key} "
279
- "aws {command}" .format (
280
- access_key_id = aws_access_key_id ,
281
- secret_key = aws_secret_access_key ,
282
- command = command ,
283
- )
271
+ f"AWS_ACCESS_KEY_ID={ aws_access_key_id } AWS_SECRET_ACCESS_KEY={ aws_secret_access_key } "
272
+ f"aws { command } "
284
273
)
285
274
286
275
@@ -291,10 +280,7 @@ def pull_media_from_s3(
291
280
aws_storage_bucket_name ,
292
281
local_media_dir = LOCAL_MEDIA_DIR ,
293
282
):
294
- aws_cmd = "s3 sync --delete s3://{bucket_name} {local_media}" .format (
295
- bucket_name = aws_storage_bucket_name ,
296
- local_media = local_media_dir ,
297
- )
283
+ aws_cmd = f"s3 sync --delete s3://{ aws_storage_bucket_name } { local_media_dir } "
298
284
aws (c , aws_cmd , aws_access_key_id , aws_secret_access_key )
299
285
300
286
@@ -318,11 +304,7 @@ def pull_images_from_s3(
318
304
aws_storage_bucket_name ,
319
305
local_images_dir = LOCAL_IMAGES_DIR ,
320
306
):
321
- aws_cmd = (
322
- "s3 sync --delete s3://{bucket_name}/original_images {local_media}" .format (
323
- bucket_name = aws_storage_bucket_name , local_media = local_images_dir
324
- )
325
- )
307
+ aws_cmd = f"s3 sync --delete s3://{ aws_storage_bucket_name } /original_images { local_images_dir } "
326
308
aws (c , aws_cmd , aws_access_key_id , aws_secret_access_key )
327
309
# The above command just syncs the original images, so we need to drop the wagtailimages_renditions
328
310
# table so that the renditions will be re-created when requested on the local build.
@@ -351,18 +333,13 @@ def pull_database_from_heroku(c, app_instance, anonymise=False):
351
333
datestamp = datetime .datetime .now ().strftime ("%Y%m%d-%H%M%S" )
352
334
353
335
local (
354
- "heroku pg:backups:download --output={dump_folder}/{datestamp}.dump --app {app}" .format (
355
- app = app_instance , dump_folder = LOCAL_DUMP_DIR , datestamp = datestamp
356
- ),
336
+ f"heroku pg:backups:download --output={ LOCAL_DUMP_DIR } /{ datestamp } .dump --app { app_instance } " ,
357
337
)
358
338
359
339
import_data (c , f"/app/{ LOCAL_DUMP_DIR } /{ datestamp } .dump" )
360
340
361
341
local (
362
- "rm {dump_folder}/{datestamp}.dump" .format (
363
- dump_folder = LOCAL_DUMP_DIR ,
364
- datestamp = datestamp ,
365
- ),
342
+ f"rm { LOCAL_DUMP_DIR } /{ datestamp } .dump" ,
366
343
)
367
344
368
345
if anonymise :
@@ -394,13 +371,9 @@ def make_bold(msg):
394
371
def dellar_snapshot (c , filename ):
395
372
"""Snapshot the database, files will be stored in the db container"""
396
373
dexec (
397
- "pg_dump -d {database_name} -U {database_username} > {filename}.psql" .format (
398
- database_name = LOCAL_DATABASE_NAME ,
399
- database_username = LOCAL_DATABASE_USERNAME ,
400
- filename = filename ,
401
- ),
374
+ f"pg_dump -d { LOCAL_DATABASE_NAME } -U { LOCAL_DATABASE_USERNAME } > { filename } .psql" ,
402
375
service = "db" ,
403
- ),
376
+ )
404
377
print ("Database snapshot created" )
405
378
406
379
@@ -409,14 +382,12 @@ def dellar_restore(c, filename):
409
382
"""Restore the database from a snapshot in the db container"""
410
383
delete_docker_database (c )
411
384
412
- dexec (
413
- "psql -U {database_username} -d {database_name} < {filename}.psql" .format (
414
- database_name = LOCAL_DATABASE_NAME ,
415
- database_username = LOCAL_DATABASE_USERNAME ,
416
- filename = filename ,
385
+ (
386
+ dexec (
387
+ f"psql -U { LOCAL_DATABASE_USERNAME } -d { LOCAL_DATABASE_NAME } < { filename } .psql" ,
388
+ service = "db" ,
417
389
),
418
- service = "db" ,
419
- ),
390
+ )
420
391
print ("Database restored." )
421
392
422
393
@@ -426,10 +397,10 @@ def dellar_list(c):
426
397
print ("Database snapshots:" )
427
398
dexec (
428
399
"""for f in *.psql; do
429
- printf ' - %s\n ' "${f%.psql}"
430
- done""" ,
400
+ printf ' - %s\n ' "${f%.psql}"
401
+ done""" ,
431
402
service = "db" ,
432
- ),
403
+ )
433
404
print ("Restore with `dellar-restore <snapshot>`" )
434
405
435
406
@@ -439,7 +410,7 @@ def dellar_remove(c, filename):
439
410
dexec (
440
411
f"rm { filename } .psql" ,
441
412
service = "db" ,
442
- ),
413
+ )
443
414
print (f"Snapshot { filename } removed" )
444
415
445
416
0 commit comments