Compare commits

...

5 Commits

Author SHA1 Message Date
michal a48df0f44d Filter out inactive users
continuous-integration/drone Build is passing
2023-05-18 22:28:51 +02:00
michal 9230c35be6 Make install quiet
continuous-integration/drone/push Build is passing
2023-02-17 15:44:04 +01:00
michal adada84e9a Add test step to CI
continuous-integration/drone/push Build is passing
2023-02-17 15:41:59 +01:00
michal 8cb0554696 Add pre-commit config
continuous-integration/drone/push Build is passing
2023-02-17 15:21:26 +01:00
michal 947d9f740c fix after changing null -> blank 2023-02-17 15:21:04 +01:00
6 changed files with 60 additions and 10 deletions
+11
View File
@@ -3,6 +3,17 @@ type: docker
name: default
steps:
- name: test
image: python:3.10
commands:
- pip3 install poetry --quiet
- poetry install --no-root --quiet
- export SECRET_KEY=$(openssl rand -hex 32)
- export DATABASE_URL=sqlite://$(mktemp)/db.sqlite3
- poetry run ./manage.py test
environment:
ALLOWED_HOSTS: localhost,127.0.0.1
DEBUG: True
- name: deploy
image: caprover/cli-caprover:2.2.3
commands:
+40
View File
@@ -0,0 +1,40 @@
repos:
- repo: local
hooks:
- id: poetry
name: poetry
language: system
entry: poetry check
files: '^(pyproject.toml|poetry.lock)$'
pass_filenames: false
# - id: black
# name: black
# language: system
# entry: poetry run black --target-version py39
# types_or: [python, pyi]
# require_serial: true
# - id: isort
# name: isort
# language: system
# entry: poetry run isort --profile black --python-version 39
# types_or: [cython, pyi, python]
# require_serial: true
# - id: flake8
# name: flake8
# language: system
# entry: poetry run flake8
# types_or: [python]
# files: "^.*\\.py$"
# - id: mypy
# name: mypy
# language: system
# entry: poetry run mypy --strict --python-version 3.9
# types_or: [python, pyi]
# files: "^.*\\.pyi?$"
- id: test
name: test
language: system
entry: poetry run ./manage.py test
types_or: [python]
files: "^.*\\.py$"
pass_filenames: false
+1 -1
View File
@@ -14,7 +14,7 @@
<p>Total score: {{ movie.score }}, seen by: {{ movie.seen_score }}.
<ul>
{% for vote in votes %}
<li>{{vote.user.username}} {% if vote.seen %}(seen){% endif %} &ndash; {% if vote.vote == 1 %}👍{% elif vote.vote == 0 %}No opinion{% elif vote.vote == -1 %}👎{%endif%}{% if vote.comment is not None %} &ndash; {{vote.comment}}{% endif %}</li>
<li>{{vote.user.username}} {% if vote.seen %}(seen){% endif %} &ndash; {% if vote.vote == 1 %}👍{% elif vote.vote == 0 %}No opinion{% elif vote.vote == -1 %}👎{%endif%}{% if vote.comment != "" %} &ndash; {{vote.comment}}{% endif %}</li>
{% endfor %}
</ul>
{% endif %}
+2 -2
View File
@@ -29,11 +29,11 @@ class Movie(models.Model):
@property
def score(self):
return reduce(lambda result,v: result+v.vote, self.movievote_set.all(), 0)
return reduce(lambda result,v: result+v.vote, self.movievote_set.filter(user__is_active=True).all(), 0)
@property
def seen_score(self):
return reduce(lambda result,v: result+int(v.seen), self.movievote_set.all(), 0)
return reduce(lambda result,v: result+int(v.seen), self.movievote_set.filter(user__is_active=True).all(), 0)
def __str__(self):
return self.name
+2 -2
View File
@@ -166,10 +166,10 @@ class VoteTests(TestCase):
with self.subTest(comment=comment):
response = self.client.post(reverse('watchlist:vote', args=(m.id,)), data={"vote": "0", "comment": comment})
mv = m.movievote_set.get(user=self.user)
self.assertEqual(mv.comment, None if comment == "" else comment)
self.assertEqual(mv.comment, comment)
with self.subTest(comment=None):
response = self.client.post(reverse('watchlist:vote', args=(m.id,)), data={"vote": "0"})
mv = m.movievote_set.get(user=self.user)
self.assertEqual(mv.comment, None)
self.assertEqual(mv.comment, "")
+4 -5
View File
@@ -1,3 +1,4 @@
from django.db.models import Q
from django.http import HttpResponseRedirect, HttpResponseBadRequest, HttpResponseForbidden
from django.views import generic
from django.views.decorators.http import require_http_methods, require_safe, require_POST
@@ -36,7 +37,7 @@ class DetailView(generic.DetailView):
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
votes = self.object.movievote_set.all()
votes = self.object.movievote_set.filter(user__is_active=True).all()
user_vote = None
if self.request.user.is_authenticated:
user_vote = votes.filter(user=self.request.user).first()
@@ -56,9 +57,7 @@ def vote(request, pk):
user_vote.vote = request.POST['vote']
user_vote.seen = request.POST.get('seen', False) == "on"
comment = request.POST.get('comment', '').strip()
if comment != '' or user_vote.comment is not None:
if comment == '':
comment = None
if comment != '' or user_vote.comment != "":
user_vote.comment = comment
user_vote.save()
return HttpResponseRedirect(reverse('watchlist:index'))
@@ -72,7 +71,7 @@ class EditView(generic.DetailView):
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["users"] = User.objects.all() if self.request.user.has_perm("watchlist.moderate_movies") else None
context["users"] = User.objects.filter(Q(is_active=True) | Q(id=self.object.suggested_by.id)).all() if self.request.user.has_perm("watchlist.moderate_movies") else None
context["error"] = self.request.GET.get("error", None)
return context