Add precommit to run ruff

This commit is contained in:
2025-12-12 11:16:58 +05:30
parent 5c0289e715
commit 219acb3513
14 changed files with 165 additions and 27 deletions

View File

@@ -1,7 +1,5 @@
from django.utils import timezone
from rest_framework import generics
from notes.models import Note
from notes.serializers import NoteSerializer

View File

@@ -2,6 +2,7 @@ from django import forms
from notes.models import Note
class PostNoteForm(forms.ModelForm):
class Meta:
model = Note

View File

@@ -9,7 +9,6 @@ from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [

View File

@@ -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)

View File

@@ -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),
)

View File

@@ -1,3 +0,0 @@
from django.test import TestCase
# Create your tests here.

View File

@@ -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")),
]

View File

@@ -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):