Skip to content

Commit 0279fe5

Browse files
authored
Merge pull request #256 from django-daiquiri/daiquiri_admin
Add daiquiri-admin and scripts for npm, build, clean
2 parents 6887a78 + 4bd03fb commit 0279fe5

File tree

7 files changed

+177
-3
lines changed

7 files changed

+177
-3
lines changed

daiquiri/__main__.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
'''
2+
Runs daiquiri-admin when the daiquiri module is run as a script, much like django-admin
3+
(see: https://github.com/django/django/blob/main/django/__main__.py):
4+
5+
python -m daiquiri check
6+
7+
The main method is added as script in pyproject.toml so that
8+
9+
daiquiri-admin check
10+
11+
works as well. Unlike django-admin, a set of generic settings is used for the
12+
management scripts.
13+
'''
14+
15+
import os
16+
17+
from django.core import management
18+
19+
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "daiquiri.core.management.settings")
20+
21+
22+
def main():
23+
management.execute_from_command_line()
24+
25+
26+
if __name__ == "__main__":
27+
main()
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import subprocess
2+
import sys
3+
4+
from django.core.management import call_command
5+
from django.core.management.base import BaseCommand
6+
7+
8+
class Command(BaseCommand):
9+
10+
def handle(self, *args, **options):
11+
call_command('npm', 'ci')
12+
call_command('npm', 'run', 'build:prod')
13+
subprocess.call(['/bin/bash', '-c', f'{sys.executable} -m build'])
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
import os
2+
import shutil
3+
4+
from django.conf import settings
5+
from django.core.management.base import BaseCommand
6+
7+
8+
class Command(BaseCommand):
9+
10+
def add_arguments(self, parser):
11+
parser.add_argument('command', choices=[
12+
'all',
13+
'dist',
14+
'media',
15+
'npm',
16+
'python',
17+
'static',
18+
])
19+
20+
def handle(self, *args, **options):
21+
if options['command'] in ['all', 'dist']:
22+
self.clean_dir('dist')
23+
self.clean_dir('daiquiri.egg-info')
24+
if options['command'] in ['all', 'media']:
25+
self.clean_dir(settings.MEDIA_ROOT)
26+
if options['command'] in ['all', 'npm']:
27+
self.clean_dir('node_modules')
28+
if options['command'] in ['all', 'static']:
29+
self.clean_static()
30+
if options['command'] in ['all', 'python']:
31+
self.clean_python()
32+
33+
def clean_python(self):
34+
for root, dirs, files in os.walk('.'):
35+
for dir_name in dirs:
36+
if dir_name == '__pycache__':
37+
self.clean_dir(os.path.join(root, dir_name), quiet=True)
38+
39+
def clean_static(self):
40+
self.clean_dir(settings.STATIC_ROOT)
41+
42+
for path in [
43+
'daiquiri/auth/static/',
44+
'daiquiri/contact/static/',
45+
'daiquiri/core/static/',
46+
'daiquiri/metadata/static/',
47+
'daiquiri/query/static/',
48+
'daiquiri/serve/static/',
49+
]:
50+
self.clean_dir(path)
51+
52+
def clean_dir(self, path, quiet=False):
53+
if path and os.path.exists(path):
54+
shutil.rmtree(path)
55+
if not quiet:
56+
print(f'Directory "{path}" has been removed!')
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import os
2+
import subprocess
3+
4+
from django.core.management.base import BaseCommand, CommandError
5+
6+
7+
class Command(BaseCommand):
8+
9+
def add_arguments(self, parser):
10+
parser.add_argument('command', nargs="*")
11+
12+
def handle(self, *args, **options):
13+
nvm_dir = os.getenv('NVM_DIR')
14+
15+
if nvm_dir is None:
16+
raise CommandError('NVM_DIR is not set, is nvm.sh installed?')
17+
18+
if not os.path.exists(nvm_dir):
19+
raise CommandError('NVM_DIR does not exist, is nvm.sh installed?')
20+
21+
command = ' '.join(options['command'])
22+
subprocess.call(['/bin/bash', '-c', f'source {nvm_dir}/nvm.sh; npm {command}'])
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
# ruff: noqa: F403, F405, I001, RUF005
2+
'''
3+
Generic settings to be used with daiquiri-admin outside of an daiquiri-app.
4+
'''
5+
from pathlib import Path
6+
7+
from daiquiri.core.settings.django import *
8+
from daiquiri.core.settings.daiquiri import *
9+
from daiquiri.core.settings.logging import *
10+
11+
from daiquiri.auth.settings import *
12+
from daiquiri.conesearch.settings import *
13+
from daiquiri.contact.settings import *
14+
from daiquiri.cutout.settings import *
15+
from daiquiri.datalink.settings import *
16+
from daiquiri.files.settings import *
17+
from daiquiri.metadata.settings import *
18+
from daiquiri.oai.settings import *
19+
from daiquiri.query.settings import *
20+
from daiquiri.registry.settings import *
21+
from daiquiri.serve.settings import *
22+
from daiquiri.stats.settings import *
23+
from daiquiri.tap.settings import *
24+
25+
INSTALLED_APPS = DJANGO_APPS + [
26+
'daiquiri.auth',
27+
'daiquiri.conesearch',
28+
'daiquiri.contact',
29+
'daiquiri.core',
30+
'daiquiri.datalink',
31+
'daiquiri.files',
32+
'daiquiri.jobs',
33+
'daiquiri.metadata',
34+
'daiquiri.oai',
35+
'daiquiri.query',
36+
'daiquiri.registry',
37+
'daiquiri.serve',
38+
'daiquiri.stats',
39+
'daiquiri.tap',
40+
'daiquiri.uws',
41+
]
42+
43+
ROOT_URLCONF = ''
44+
45+
DATABASES = {}
46+
47+
STATIC_ROOT = 'static_root'
48+
49+
FILES_BASE_PATH = QUERY_DOWNLOAD_DIR = Path().cwd()

daiquiri/core/settings/django.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,13 @@
55

66
import daiquiri.core.env as env
77

8-
CONFIG_DIR = Path(find_spec('config').origin).parent
9-
BASE_DIR = CONFIG_DIR.parent
10-
DAIQUIRI_APP = BASE_DIR.name.replace('-', '_')
8+
try:
9+
CONFIG_DIR = Path(find_spec('config').origin).parent
10+
BASE_DIR = CONFIG_DIR.parent
11+
DAIQUIRI_APP = BASE_DIR.name.replace('-', '_')
12+
except AttributeError:
13+
BASE_DIR = Path().cwd()
14+
DAIQUIRI_APP = None
1115

1216
BASE_URL = env.get_url('BASE_URL', '/')
1317

pyproject.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,9 @@ homepage = "https://django-daiquiri.github.io"
100100
issues = "https://github.com/django-daiquiri/daiquiri/issues"
101101
repository = "https://github.com/django-daiquiri/daiquiri.git"
102102

103+
[project.scripts]
104+
daiquiri-admin = "daiquiri.__main__:main"
105+
103106
[tool.setuptools.packages.find]
104107
include = ["daiquiri*"]
105108
exclude = ["*assets*", "*tests*"]

0 commit comments

Comments
 (0)