Add precommit to run ruff
This commit is contained in:
@@ -1,7 +1,5 @@
|
||||
from django.utils import timezone
|
||||
from rest_framework import generics
|
||||
|
||||
from notes.models import Note
|
||||
from notes.serializers import NoteSerializer
|
||||
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@ from django import forms
|
||||
|
||||
from notes.models import Note
|
||||
|
||||
|
||||
class PostNoteForm(forms.ModelForm):
|
||||
class Meta:
|
||||
model = Note
|
||||
|
||||
@@ -9,7 +9,6 @@ from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
|
||||
@@ -4,13 +4,18 @@ from django.utils import timezone
|
||||
|
||||
# Create your models here.
|
||||
|
||||
|
||||
class User(AbstractUser):
|
||||
allow_notes_from = models.ManyToManyField('User', related_name='allowed_notes_to', blank=True)
|
||||
allow_notes_from = models.ManyToManyField(
|
||||
"User", related_name="allowed_notes_to", blank=True
|
||||
)
|
||||
expiry_seconds = models.PositiveIntegerField(default=86400)
|
||||
|
||||
@property
|
||||
def alive_received_notes(self) -> models.QuerySet["Note"]:
|
||||
return self.received_notes.filter(expiry__gt=timezone.now()).select_related("from_user", "to_user")
|
||||
return self.received_notes.filter(expiry__gt=timezone.now()).select_related(
|
||||
"from_user", "to_user"
|
||||
)
|
||||
|
||||
@property
|
||||
def visible_name(self) -> str:
|
||||
@@ -20,8 +25,12 @@ class User(AbstractUser):
|
||||
|
||||
|
||||
class Note(models.Model):
|
||||
from_user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='created_notes')
|
||||
to_user = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, related_name='received_notes')
|
||||
from_user = models.ForeignKey(
|
||||
User, on_delete=models.CASCADE, related_name="created_notes"
|
||||
)
|
||||
to_user = models.ForeignKey(
|
||||
User, on_delete=models.SET_NULL, null=True, related_name="received_notes"
|
||||
)
|
||||
note = models.TextField()
|
||||
expiry = models.DateTimeField()
|
||||
created_at = models.DateTimeField(auto_now_add=True)
|
||||
|
||||
@@ -7,6 +7,7 @@ from notes.models import Note, User
|
||||
|
||||
class UserSerializer(serializers.ModelSerializer):
|
||||
username = serializers.CharField(max_length=150)
|
||||
|
||||
class Meta:
|
||||
model = User
|
||||
fields = ["id", "username", "first_name", "last_name"]
|
||||
@@ -34,20 +35,22 @@ class NoteSerializer(serializers.ModelSerializer):
|
||||
|
||||
def validate_to_user(self, value):
|
||||
try:
|
||||
user = User.objects.get(username=value['username'])
|
||||
user = User.objects.get(username=value["username"])
|
||||
except User.DoesNotExist:
|
||||
raise serializers.ValidationError("User not found")
|
||||
|
||||
current_user = self.context['request'].user
|
||||
current_user = self.context["request"].user
|
||||
if not current_user.allowed_notes_to.filter(pk=user.pk).exists():
|
||||
raise serializers.ValidationError(f"User not allowed to post notes to {user!r}")
|
||||
raise serializers.ValidationError(
|
||||
f"User not allowed to post notes to {user!r}"
|
||||
)
|
||||
return user
|
||||
|
||||
def save(self, **kwargs):
|
||||
to_user = self.validated_data['to_user']
|
||||
to_user = self.validated_data["to_user"]
|
||||
return Note.objects.create(
|
||||
from_user=self.context['request'].user,
|
||||
from_user=self.context["request"].user,
|
||||
to_user=to_user,
|
||||
note=self.validated_data['note'],
|
||||
expiry=timezone.now() + timedelta(seconds=to_user.expiry_seconds)
|
||||
note=self.validated_data["note"],
|
||||
expiry=timezone.now() + timedelta(seconds=to_user.expiry_seconds),
|
||||
)
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
from django.test import TestCase
|
||||
|
||||
# Create your tests here.
|
||||
|
||||
@@ -8,8 +8,8 @@ urlpatterns = [
|
||||
path("", views.HomePage.as_view(), name="home"),
|
||||
path("post-a-note/", views.PostNoteView.as_view(), name="post-a-note"),
|
||||
path("profile/", views.ProfileView.as_view(), name="profile"),
|
||||
path("login/", LoginView.as_view(), name='login'),
|
||||
path("logout/", LogoutView.as_view(), name='logout'),
|
||||
path("login/", LoginView.as_view(), name="login"),
|
||||
path("logout/", LogoutView.as_view(), name="logout"),
|
||||
path("api/notes/", api_views.NoteListView.as_view(), name="api-notes-list"),
|
||||
path("api-auth/", include("rest_framework.urls", namespace="rest_framework")),
|
||||
]
|
||||
|
||||
@@ -7,13 +7,14 @@ from django.views.generic import CreateView, TemplateView, UpdateView
|
||||
from django.views.generic.edit import FormMixin
|
||||
from notes.models import Note, User
|
||||
|
||||
|
||||
# Create your views here.
|
||||
class HomePage(LoginRequiredMixin, TemplateView):
|
||||
template_name = "notes/home.html"
|
||||
|
||||
def get_context_data(self, **kwargs: Any) -> dict[str, Any]:
|
||||
ctx = super().get_context_data(**kwargs)
|
||||
ctx['notes'] = self.request.user.alive_received_notes
|
||||
ctx["notes"] = self.request.user.alive_received_notes
|
||||
return ctx
|
||||
|
||||
|
||||
@@ -24,7 +25,7 @@ class PostNoteView(LoginRequiredMixin, CreateView):
|
||||
|
||||
def get_form(self, form_class=None):
|
||||
form = super().get_form(form_class)
|
||||
form.fields['to_user'].queryset = self.request.user.allowed_notes_to.all()
|
||||
form.fields["to_user"].queryset = self.request.user.allowed_notes_to.all()
|
||||
return form
|
||||
|
||||
def form_valid(self, form):
|
||||
|
||||
Reference in New Issue
Block a user