Use poetry for dependency management

This commit is contained in:
Sonny 2020-04-13 17:05:46 +02:00
parent cda2654573
commit e495d7c188
21 changed files with 1252 additions and 75 deletions

View file

@ -34,13 +34,13 @@ python tests:
key: "$CI_JOB_NAME-$CI_COMMIT_REF_SLUG"
paths:
- .cache/pip
- env/
- .venv/
before_script:
- python3 -m venv env
- source env/bin/activate
- pip install -r requirements/gitlab.txt
- pip install poetry
- poetry config virtualenvs.in-project true
- poetry install --no-interaction
script:
- python src/manage.py test newsreader
- poetry run src/manage.py test newsreader
javascript tests:
image: node:12
@ -76,15 +76,15 @@ python linting:
key: "$CI_JOB_NAME-$CI_COMMIT_REF_SLUG"
paths:
- .cache/pip
- env/
- .venv/
before_script:
- python3 -m venv env
- source env/bin/activate
- pip install -r requirements/gitlab.txt
- pip install poetry
- poetry config virtualenvs.in-project true
- poetry install --no-interaction
script:
- isort src/ --check-only --recursive
- black src/ --line-length 88 --check
- autoflake src/ --check --recursive --remove-all-unused-imports --ignore-init-module-imports
- poetry run isort src/ --check-only --recursive
- poetry run black src/ --line-length 88 --check
- poetry run autoflake src/ --check --recursive --remove-all-unused-imports --ignore-init-module-imports
deploy:
stage: deploy

View file

@ -1,18 +1,11 @@
FROM python:3.7-buster
# Run project binaries from the user's local bin folder
ENV PATH=/home/newsreader/.local/bin:$PATH
RUN pip install poetry
# Set the default shell
RUN useradd -ms /bin/bash newsreader
RUN mkdir /app
WORKDIR /app
RUN chown newsreader:newsreader /app
USER newsreader
COPY poetry.lock pyproject.toml /app/
# Use a seperate layer for the project requirements
COPY requirements /app/requirements
RUN pip install --user -r requirements/dev.txt
RUN poetry config virtualenvs.create false
RUN poetry install --no-interaction
COPY . /app/

View file

@ -15,7 +15,7 @@ services:
celery:
build: .
container_name: celery
command: celery -A newsreader worker -l INFO --beat --scheduler django --workdir=/app/src/
command: poetry run celery -A newsreader worker -l INFO --beat --scheduler django --workdir=/app/src/
environment:
- POSTGRES_HOST=$POSTGRES_HOST
- POSTGRES_NAME=$POSTGRES_NAME

1115
poetry.lock generated Normal file

File diff suppressed because it is too large Load diff

39
pyproject.toml Normal file
View file

@ -0,0 +1,39 @@
[tool.poetry]
name = "newsreader"
version = "0.2"
description = "Webapplication for reading RSS feeds"
authors = ["Sonny <sonnyba871@gmail.com>"]
license = "GPL-3.0"
[tool.poetry.dependencies]
python = "^3.7"
bleach = "^3.1.4"
Django = "^3.0.5"
celery = "^4.4.2"
beautifulsoup4 = "^4.9.0"
django-axes = "^5.3.1"
django-celery-beat = "^2.0.0"
djangorestframework = "^3.11.0"
drf-yasg = "^1.17.1"
django-registration-redux = "^2.7"
lxml = "^4.5.0"
feedparser = "^5.2.1"
python-memcached = "^1.59"
requests = "^2.23.0"
psycopg2-binary = "^2.8.5"
gunicorn = "^20.0.4"
python-dotenv = "^0.12.0"
[tool.poetry.dev-dependencies]
factory-boy = "^2.12.0"
freezegun = "^0.3.15"
django-debug-toolbar = "^2.2"
django-extensions = "^2.2.9"
black = "19.3b0"
isort = "4.3.21"
autoflake = "1.3.1"
tblib = "1.6.0"
[build-system]
requires = ["poetry>=0.12"]
build-backend = "poetry.masonry.api"

View file

@ -1,21 +0,0 @@
bleach==3.1.0
beautifulsoup4==4.7.1
celery==4.3.0
certifi==2019.3.9
chardet==3.0.4
django-axes==5.2.2
Django==2.2
django-celery-beat==1.5.0
djangorestframework==3.9.4
drf-yasg==1.17.1
django-registration-redux==2.6
lxml==4.4.2
feedparser==5.2.1
idna==2.8
python-memcached==1.59
pytz==2018.9
requests==2.21.0
sqlparse==0.3.0
urllib3==1.24.1
psycopg2-binary==2.8.1
Pillow==6.0.0

View file

@ -1,10 +0,0 @@
-r base.txt
factory-boy==2.12.0
freezegun==0.3.12
django-debug-toolbar==2.0
django-extensions==2.1.9
black==19.3b0
isort==4.3.21
autoflake==1.3.1

View file

@ -1 +0,0 @@
-r dev.txt

View file

@ -1,4 +0,0 @@
-r base.txt
python-dotenv==0.12.0
gunicorn==20.0.4

View file

@ -1,4 +0,0 @@
-r base.txt
factory-boy==2.12.0
freezegun==0.3.12

View file

@ -1,5 +1,5 @@
#!/bin/bash
# This file should only be used in conjuction with docker-compose
python /app/src/manage.py migrate
python /app/src/manage.py runserver 0.0.0.0:8000
poetry run /app/src/manage.py migrate
poetry run /app/src/manage.py runserver 0.0.0.0:8000

View file

@ -116,7 +116,7 @@ class Migration(migrations.Migration):
blank=True,
editable=False,
null=True,
on_delete="collection task",
on_delete=models.SET_NULL,
to="django_celery_beat.PeriodicTask",
),
),
@ -125,7 +125,7 @@ class Migration(migrations.Migration):
models.ForeignKey(
blank=True,
null=True,
on_delete="collection schedule",
on_delete=models.SET_NULL,
to="django_celery_beat.IntervalSchedule",
),
),

View file

@ -15,7 +15,7 @@ class Migration(migrations.Migration):
blank=True,
editable=False,
null=True,
on_delete="collection task",
on_delete=models.SET_NULL,
to="django_celery_beat.PeriodicTask",
),
)

View file

@ -32,6 +32,8 @@ class Migration(migrations.Migration):
migrations.AddField(
model_name="collectionrule",
name="user",
field=models.ForeignKey(on_delete="Owner", to=settings.AUTH_USER_MODEL),
field=models.ForeignKey(
on_delete=models.CASCADE, to=settings.AUTH_USER_MODEL
),
),
]

View file

@ -13,7 +13,9 @@ class Migration(migrations.Migration):
model_name="collectionrule",
name="user",
field=models.ForeignKey(
on_delete="Owner", related_name="rules", to=settings.AUTH_USER_MODEL
on_delete=models.CASCADE,
related_name="rules",
to=settings.AUTH_USER_MODEL,
),
)
]

View file

@ -0,0 +1,27 @@
# Generated by Django 3.0.5 on 2020-04-12 19:55
import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
("collection", "0005_auto_20200303_1932"),
]
operations = [
migrations.AlterField(
model_name="collectionrule",
name="user",
field=models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="rules",
to=settings.AUTH_USER_MODEL,
verbose_name="Owner",
),
)
]

View file

@ -35,7 +35,12 @@ class CollectionRule(TimeStampedModel):
succeeded = models.BooleanField(default=False)
error = models.CharField(max_length=1024, blank=True, null=True)
user = models.ForeignKey("accounts.User", _("Owner"), related_name="rules")
user = models.ForeignKey(
"accounts.User",
verbose_name=_("Owner"),
related_name="rules",
on_delete=models.CASCADE,
)
def __str__(self):
return self.name

View file

@ -70,7 +70,9 @@ class Migration(migrations.Migration):
("name", models.CharField(max_length=50, unique=True)),
(
"user",
models.ForeignKey(on_delete="Owner", to=settings.AUTH_USER_MODEL),
models.ForeignKey(
on_delete=models.CASCADE, to=settings.AUTH_USER_MODEL
),
),
],
options={"verbose_name": "Category", "verbose_name_plural": "Categories"},

View file

@ -15,7 +15,7 @@ class Migration(migrations.Migration):
model_name="category",
name="user",
field=models.ForeignKey(
on_delete="Owner",
on_delete=models.CASCADE,
related_name="categories",
to=settings.AUTH_USER_MODEL,
),

View file

@ -0,0 +1,27 @@
# Generated by Django 3.0.5 on 2020-04-12 19:55
import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
("core", "0004_auto_20191116_1315"),
]
operations = [
migrations.AlterField(
model_name="category",
name="user",
field=models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="categories",
to=settings.AUTH_USER_MODEL,
verbose_name="Owner",
),
)
]

View file

@ -27,7 +27,12 @@ class Post(TimeStampedModel):
class Category(TimeStampedModel):
name = models.CharField(max_length=50)
user = models.ForeignKey("accounts.User", _("Owner"), related_name="categories")
user = models.ForeignKey(
"accounts.User",
verbose_name=_("Owner"),
related_name="categories",
on_delete=models.CASCADE,
)
@property
def rule_ids(self):