Skip to content

Improve application configuration #171

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 18 commits into from
Jan 1, 2021
Merged
Show file tree
Hide file tree
Changes from 7 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
*.swp
*.swo
settings.py
# ---> Python
# Byte-compiled / optimized / DLL files
__pycache__/
Expand Down
25 changes: 25 additions & 0 deletions .run/makemigrations.run.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="makemigrations" type="Python.DjangoServer" factoryName="Django server">
<module name="imagetagger" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
<env name="DJANGO_SETTINGS_MODULE" value="imagetagger.settings" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<option name="launchJavascriptDebuger" value="false" />
<option name="host" value="" />
<option name="additionalOptions" value="" />
<option name="browserUrl" value="" />
<option name="runTestServer" value="false" />
<option name="runNoReload" value="false" />
<option name="useCustomRunCommand" value="true" />
<option name="customRunCommand" value="makemigrations" />
<method v="2" />
</configuration>
</component>
25 changes: 25 additions & 0 deletions .run/migrate.run.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="migrate" type="Python.DjangoServer" factoryName="Django server">
<module name="imagetagger" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
<env name="DJANGO_SETTINGS_MODULE" value="imagetagger.settings" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<option name="launchJavascriptDebuger" value="false" />
<option name="host" value="" />
<option name="additionalOptions" value="" />
<option name="browserUrl" value="" />
<option name="runTestServer" value="false" />
<option name="runNoReload" value="false" />
<option name="useCustomRunCommand" value="true" />
<option name="customRunCommand" value="migrate" />
<method v="2" />
</configuration>
</component>
25 changes: 25 additions & 0 deletions .run/runzipdaemon.run.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="runzipdaemon" type="Python.DjangoServer" factoryName="Django server">
<module name="imagetagger" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
<env name="DJANGO_SETTINGS_MODULE" value="imagetagger.settings" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<option name="launchJavascriptDebuger" value="false" />
<option name="host" value="" />
<option name="additionalOptions" value="" />
<option name="browserUrl" value="" />
<option name="runTestServer" value="false" />
<option name="runNoReload" value="false" />
<option name="useCustomRunCommand" value="true" />
<option name="customRunCommand" value="runzipdaemon" />
<method v="2" />
</configuration>
</component>
26 changes: 26 additions & 0 deletions .run/serve.run.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="serve" type="Python.DjangoServer" factoryName="Django server">
<module name="imagetagger" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
<env name="DJANGO_SETTINGS_MODULE" value="imagetagger.settings" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<option name="launchJavascriptDebuger" value="false" />
<option name="port" value="8000" />
<option name="host" value="" />
<option name="additionalOptions" value="" />
<option name="browserUrl" value="" />
<option name="runTestServer" value="false" />
<option name="runNoReload" value="false" />
<option name="useCustomRunCommand" value="false" />
<option name="customRunCommand" value="" />
<method v="2" />
</configuration>
</component>
13 changes: 8 additions & 5 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ RUN apt-get update && \

# add requirements file
WORKDIR /app/src
COPY requirements.txt /app/src/requirements.txt
COPY imagetagger/requirements.txt /app/src/requirements.txt

# install python dependencies
RUN pip3 install -r /app/src/requirements.txt
Expand All @@ -22,10 +22,12 @@ RUN apt-get clean
# add remaining sources
COPY imagetagger /app/src/imagetagger

# confiure runtime environment
RUN mkdir /app/data /app/static /app/config
RUN cp /app/src/imagetagger/imagetagger/settings.py.example /app/config/settings.py
RUN ln -sf /app/config/settings.py /app/src/imagetagger/imagetagger/settings.py
# configure /app/config/imagetagger_settings to be python importable so that one can use their own settings file
RUN mkdir -p /app/data /app/static /app/config/imagetagger_settings
RUN touch /app/config/imagetagger_settings/__init__.py
ENV PYTHONPATH=$PYTHONPATH:/app/config:/app/src/imagetagger

# configure runtime environment
RUN sed -i 's/env python/env python3/g' /app/src/imagetagger/manage.py

ARG UID_WWW_DATA=5008
Expand All @@ -41,6 +43,7 @@ COPY docker/update_points docker/zip_daemon docker/run /app/bin/
RUN ln -sf /app/bin/* /usr/local/bin
ENTRYPOINT ["/usr/local/bin/run"]
ENV IN_DOCKER=true
ENV DJANGO_CONFIGURATION=Prod

# add image metadata
EXPOSE 3008
Expand Down
1 change: 1 addition & 0 deletions imagetagger/imagetagger/base/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from imagetagger.base.checks import *
40 changes: 40 additions & 0 deletions imagetagger/imagetagger/base/checks.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
from typing import List
from os.path import join, dirname
from django.core.checks import register, CheckMessage, Error
from django.conf import settings
from fs.base import FS
from . import filesystem


def _create_check_file(fs: FS, path: str):
fs.makedirs(dirname(path), recreate=True)
fs.create(path, wipe=True)
fs.writebytes(path, bytes('This is a demo file content', encoding='ASCII'))
fs.remove(path)


@register
def check_fs_root_config(app_configs, **kwargs) -> List[CheckMessage]:
try:
_create_check_file(filesystem.root(), join(settings.IMAGE_PATH, 'check.tmp.jpeg'))
_create_check_file(filesystem.root(), join(settings.TOOLS_PATH, 'check.tmp.py'))
return []
except Exception as e:
return [Error(
'Persistent filesystem is incorrectly configured. Could not create and delete a temporary check file',
hint=f'Check your FS_URL settings (currently {settings.FS_URL})',
obj=e,
)]


@register
def check_tmp_fs_config(app_configs, **kwargs) -> List[CheckMessage]:
try:
_create_check_file(filesystem.tmp(), join(settings.TMP_IMAGE_PATH, 'check.tmp.jpeg'))
return []
except Exception as e:
return [Error(
'Persistent filesystem is incorrectly configured. Could not create and delete a temporary check file',
hint=f'Check your TMP_FS_URL settings (currently {settings.TMP_FS_URL})',
obj=e,
)]
4 changes: 2 additions & 2 deletions imagetagger/imagetagger/base/filesystem.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
def root() -> fs.base.FS:
"""Get the root filesystem object or create one by opening `settings.FS_URL`."""
if root._instance is None:
root._instance = fs.open_fs(settings.FS_URL)
root._instance = fs.open_fs(settings.FS_URL, writeable=True)
return root._instance

root._instance = None
Expand All @@ -15,7 +15,7 @@ def root() -> fs.base.FS:
def tmp() -> fs.base.FS:
"""Get the tmp filesystem object or create one by opening `settings.TMP_FS_URL`."""
if tmp._instance is None:
tmp._instance = fs.open_fs(settings.TMP_FS_URL)
tmp._instance = fs.open_fs(settings.TMP_FS_URL, writeable=True)
return tmp._instance

tmp._instance = None
Loading