Initial project structure

This commit is contained in:
Roman Krček
2024-10-22 21:45:05 +02:00
commit c9a7535ef8
16 changed files with 268 additions and 0 deletions

1
.env.example Normal file
View File

@@ -0,0 +1 @@
PREVOID_REDIS_URL=http://localhost:6379

171
.gitignore vendored Normal file
View File

@@ -0,0 +1,171 @@
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# C extensions
*.so
# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.py,cover
.hypothesis/
.pytest_cache/
cover/
# Translations
*.mo
*.pot
# Django stuff:
*.log
local_settings.py
db.sqlite3
db.sqlite3-journal
# Flask stuff:
instance/
.webassets-cache
# Scrapy stuff:
.scrapy
# Sphinx documentation
docs/_build/
# PyBuilder
.pybuilder/
target/
# Jupyter Notebook
.ipynb_checkpoints
# IPython
profile_default/
ipython_config.py
# pyenv
# For a library or package, you might want to ignore these files since the code is
# intended to run in multiple environments; otherwise, check them in:
# .python-version
# pipenv
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
# However, in case of collaboration, if having platform-specific dependencies or dependencies
# having no cross-platform support, pipenv may install dependencies that don't work, or not
# install all needed dependencies.
#Pipfile.lock
# poetry
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
# This is especially recommended for binary packages to ensure reproducibility, and is more
# commonly ignored for libraries.
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
#poetry.lock
# pdm
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
#pdm.lock
# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
# in version control.
# https://pdm.fming.dev/latest/usage/project/#working-with-version-control
.pdm.toml
.pdm-python
.pdm-build/
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
__pypackages__/
# Celery stuff
celerybeat-schedule
celerybeat.pid
# SageMath parsed files
*.sage.py
# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/
# Spyder project settings
.spyderproject
.spyproject
# Rope project settings
.ropeproject
# mkdocs documentation
/site
# mypy
.mypy_cache/
.dmypy.json
dmypy.json
# Pyre type checker
.pyre/
# pytype static type analyzer
.pytype/
# Cython debug symbols
cython_debug/
# PyCharm
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
# and can be added to the global gitignore or merged into this file. For a more nuclear
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
#.idea/
# Orebolt Prevoid specific
.venv/
.vscode/
.tox/
.stestr/
data/

0
Makefile Normal file
View File

0
README.md Normal file
View File

0
celery.py Normal file
View File

19
docker/django/Dockerfile Normal file
View File

@@ -0,0 +1,19 @@
FROM python:3.11-slim AS base
WORKDIR /app
# Builder stage for downloading and installing packages
FROM base AS builder
COPY requirements.txt ./
RUN --mount=type=cache,target=/tmp/pip_cache \
python3 -m pip install --upgrade pip setuptools && \
python3 -m pip install \
-r requirements.txt \
--extra-index-url https://www.piwheels.org/simple \
--cache-dir /tmp/pip_cache
# Runtime stage for copying code and scripts
FROM base AS runtime
COPY --from=builder /usr/local/lib /usr/local/lib
COPY docker/entrypoint.sh ./
COPY orebolt_prevoid/ ./
ENTRYPOINT ["entrypoint.sh"]

View File

@@ -0,0 +1,20 @@
#!/bin/bash
# Based on env variable PREVOID_RUN_MODE decide which service to start
if [ "$PREVOID_RUN_MODE" == "DJANGO" ]
python3 /app/manage.py runserver 0.0.0.0:8000
elif ["$PREVOID_RUN_MODE" == "CELERY"]
celery -A /app/orebolt_prevoid worker --loglevel=info
elif [ -z "$PREVOID_RUN_MODE" ]; then
echo "PREVOID_RUN_MODE is not set"
echo "Please set the PREVOID_RUN_MODE environment variable to DJANGO or CELERY."
sleep 5
exit 1
else
echo "Invalid value for PREVOID_RUN_MODE: $PREVOID_RUN_MODE"
echo "PREVOID_RUN_MODE must be either DJANGO or CELERY."
sleep 5
exit 1

22
docker/docker-compose.yml Normal file
View File

@@ -0,0 +1,22 @@
---
services:
django-server:
image: git.orebolt.ct/erman/orebolt-prevoid
restart: unless-stopped
environment:
PREVOID_RUN_MODE: "DJANGO"
PREVOID_REDIS_URL: "http://redis:6379/0"
ports:
- 8000:8000
celery-worker:
image: git.orebolt.ct/erman/orebolt-prevoid
restart: unless-stopped
environment:
PREVOID_RUN_MODE: "CELERY"
PREVOID_REDIS_URL: "http://redis:6379/0"
redis:
image: redis
restart: unless-stopped

0
manage.py Normal file
View File

0
orebolt_prevoid/main.py Normal file
View File

View File

View File

5
requirements.txt Normal file
View File

@@ -0,0 +1,5 @@
# Django deps
# Celery deps

5
test-requirements.txt Normal file
View File

@@ -0,0 +1,5 @@
codespell==2.3.0
flake8==7.1.1
bandit==1.7.10
stestr==4.1.0
coverage==7.6.2

0
tests/__init__.py Normal file
View File

25
tox.ini Normal file
View File

@@ -0,0 +1,25 @@
[tox]
requires = tox>=4
envlist = flake8, bandit, codespell
[testenv]
basepython = python3.11
deps = -r {toxinidir}/requirements.txt
-r {toxinidir}/test-requirements.txt
[testenv:flake8]
commands = flake8 orebolt_prevoid/
[testenv:bandit]
commands = bandit -r orebolt_prevoid/
[testenv:codespell]
commands = codespell orebolt_prevoid/
[testenv:unit]
commands = stestr run --test-path tests/
[testenv:coverage]
commands =
coverage run -m unittest discover
coverage report -m