From 6ea8e2c3c3e8a3db4da718180c64a22c0b26b418 Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Wed, 28 Jun 2023 16:19:40 +0000 Subject: [PATCH] Combined all fossdb models into 1 file --- .../0002_alter_user_profile_picture.py | 19 ++++ src/apps/fossdb/admin.py | 17 ++-- src/apps/fossdb/forms.py | 36 +++++++- src/apps/fossdb/hosting_platform/forms.py | 17 ---- src/apps/fossdb/hosting_platform/models.py | 17 ---- src/apps/fossdb/license/models.py | 11 --- .../migrations/0004_alter_tag_icon_star.py | 29 ++++++ src/apps/fossdb/models.py | 88 ++++++++++++++++++- src/apps/fossdb/operating_system/models.py | 30 ------- src/apps/fossdb/programming_language/forms.py | 23 ----- .../fossdb/programming_language/models.py | 17 ---- src/apps/fossdb/star/models.py | 7 -- src/apps/fossdb/tag/models.py | 10 --- src/apps/fossdb/urls.py | 2 +- src/apps/fossdb/views.py | 9 +- 15 files changed, 182 insertions(+), 150 deletions(-) create mode 100644 src/apps/account/migrations/0002_alter_user_profile_picture.py delete mode 100644 src/apps/fossdb/hosting_platform/forms.py delete mode 100644 src/apps/fossdb/hosting_platform/models.py delete mode 100644 src/apps/fossdb/license/models.py create mode 100644 src/apps/fossdb/migrations/0004_alter_tag_icon_star.py delete mode 100644 src/apps/fossdb/operating_system/models.py delete mode 100644 src/apps/fossdb/programming_language/forms.py delete mode 100644 src/apps/fossdb/programming_language/models.py delete mode 100644 src/apps/fossdb/star/models.py delete mode 100644 src/apps/fossdb/tag/models.py diff --git a/src/apps/account/migrations/0002_alter_user_profile_picture.py b/src/apps/account/migrations/0002_alter_user_profile_picture.py new file mode 100644 index 0000000..f1e877e --- /dev/null +++ b/src/apps/account/migrations/0002_alter_user_profile_picture.py @@ -0,0 +1,19 @@ +# Generated by Django 4.2.2 on 2023-06-28 16:17 + +import account.models +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('account', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='user', + name='profile_picture', + field=models.ImageField(default='profile-pics/default.jpg', upload_to=account.models.get_profile_pic_path), + ), + ] diff --git a/src/apps/fossdb/admin.py b/src/apps/fossdb/admin.py index 9fd82e2..89647d1 100644 --- a/src/apps/fossdb/admin.py +++ b/src/apps/fossdb/admin.py @@ -1,11 +1,16 @@ from django.contrib import admin -from .hosting_platform.models import HostingPlatform, ProjectHostingPlatform -from .license.models import License -from .models import Project -from .operating_system.models import OperatingSystem, OperatingSystemVersion -from .programming_language.models import ProgrammingLanguage, ProjectProgrammingLanguage -from .tag.models import Tag +from .models import ( + HostingPlatform, + License, + OperatingSystem, + OperatingSystemVersion, + ProgrammingLanguage, + Project, + ProjectHostingPlatform, + ProjectProgrammingLanguage, + Tag, +) class ProjectProgrammingLanguageInline(admin.TabularInline): diff --git a/src/apps/fossdb/forms.py b/src/apps/fossdb/forms.py index 8416109..ab183df 100644 --- a/src/apps/fossdb/forms.py +++ b/src/apps/fossdb/forms.py @@ -1,6 +1,40 @@ from django import forms -from .models import Project +from .models import HostingPlatform, ProgrammingLanguage, Project, ProjectHostingPlatform, ProjectProgrammingLanguage + + +class HostingPlatformForm(forms.ModelForm): + class Meta: + model = ProjectHostingPlatform + fields = ( + "url", + "hosting_platform", + ) + widgets = { + "hosting_platform": forms.Select( + choices=HostingPlatform.objects.all(), + ) + } + + +class ProgrammingLanguageForm(forms.ModelForm): + class Meta: + model = ProjectProgrammingLanguage + fields = ( + "programming_language", + "percentage", + ) + widgets = { + "programming_language": forms.Select( + choices=ProgrammingLanguage.objects.all(), + ), + "percentage": forms.NumberInput( + attrs={ + "min": "0", + "max": "100", + } + ), + } class ProjectForm(forms.ModelForm): diff --git a/src/apps/fossdb/hosting_platform/forms.py b/src/apps/fossdb/hosting_platform/forms.py deleted file mode 100644 index 2f69d24..0000000 --- a/src/apps/fossdb/hosting_platform/forms.py +++ /dev/null @@ -1,17 +0,0 @@ -from django import forms - -from .models import HostingPlatform, ProjectHostingPlatform - - -class HostingPlatformForm(forms.ModelForm): - class Meta: - model = ProjectHostingPlatform - fields = ( - "url", - "hosting_platform", - ) - widgets = { - "hosting_platform": forms.Select( - choices=HostingPlatform.objects.all(), - ) - } diff --git a/src/apps/fossdb/hosting_platform/models.py b/src/apps/fossdb/hosting_platform/models.py deleted file mode 100644 index 62874e5..0000000 --- a/src/apps/fossdb/hosting_platform/models.py +++ /dev/null @@ -1,17 +0,0 @@ -from django.db import models - - -class HostingPlatform(models.Model): - name = models.CharField(max_length=100, unique=True) - - def __str__(self): - return self.name - - -class ProjectHostingPlatform(models.Model): - hosting_platform = models.ForeignKey(HostingPlatform, on_delete=models.CASCADE) - project = models.OneToOneField("Project", on_delete=models.CASCADE) - url = models.URLField(unique=True) - - def __str__(self): - return self.url diff --git a/src/apps/fossdb/license/models.py b/src/apps/fossdb/license/models.py deleted file mode 100644 index c66a21b..0000000 --- a/src/apps/fossdb/license/models.py +++ /dev/null @@ -1,11 +0,0 @@ -from django.db import models - - -class License(models.Model): - short_name = models.CharField(max_length=50, unique=True) - full_name = models.CharField(max_length=100, unique=True) - url = models.URLField(blank=True, default="") - text = models.TextField(blank=True, default="") - - def __str__(self): - return self.short_name diff --git a/src/apps/fossdb/migrations/0004_alter_tag_icon_star.py b/src/apps/fossdb/migrations/0004_alter_tag_icon_star.py new file mode 100644 index 0000000..0ef0640 --- /dev/null +++ b/src/apps/fossdb/migrations/0004_alter_tag_icon_star.py @@ -0,0 +1,29 @@ +# Generated by Django 4.2.2 on 2023-06-28 16:17 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('fossdb', '0003_alter_projectprogramminglanguage_percentage'), + ] + + operations = [ + migrations.AlterField( + model_name='tag', + name='icon', + field=models.ImageField(blank=True, null=True, upload_to='tags/icons/'), + ), + migrations.CreateModel( + name='Star', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('project', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='fossdb.project')), + ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ], + ), + ] diff --git a/src/apps/fossdb/models.py b/src/apps/fossdb/models.py index fef774f..c776012 100644 --- a/src/apps/fossdb/models.py +++ b/src/apps/fossdb/models.py @@ -4,10 +4,60 @@ from django.conf import settings from django.db import models -from .license.models import License -from .operating_system.models import OperatingSystemVersion -from .programming_language.models import ProgrammingLanguage -from .tag.models import Tag + +class License(models.Model): + short_name = models.CharField(max_length=50, unique=True) + full_name = models.CharField(max_length=100, unique=True) + url = models.URLField(blank=True, default="") + text = models.TextField(blank=True, default="") + + def __str__(self): + return self.short_name + + +class OperatingSystem(models.Model): + name = models.CharField(max_length=100, unique=True) + description = models.TextField(blank=True, default="") + + def __str__(self): + return self.name + + +class OperatingSystemVersion(models.Model): + operating_system = models.ForeignKey(OperatingSystem, on_delete=models.CASCADE) + version = models.CharField(max_length=50, blank=True, default="") + codename = models.CharField(max_length=100, blank=True, default="") + is_lts = models.BooleanField(blank=True, default=False) + + def __str__(self): + return f"{self.operating_system.name} {self.version} {'LTS' if self.is_lts else ''}" + + class Meta: + constraints = ( + models.UniqueConstraint( + fields=( + "operating_system", + "version", + ), + name="unique_os_version", + ), + ) + + +class Tag(models.Model): + name = models.CharField(max_length=100, unique=True, db_index=True) + description = models.TextField(blank=True, default="") + icon = models.ImageField(upload_to="tags/icons/", null=True, blank=True) + + def __str__(self): + return self.name + + +class ProgrammingLanguage(models.Model): + name = models.CharField(max_length=100, unique=True) + + def __str__(self): + return self.name class Project(models.Model): @@ -41,3 +91,33 @@ class Project(models.Model): name="unique_owner_name", ), ) + + +class ProjectProgrammingLanguage(models.Model): + project = models.ForeignKey(Project, on_delete=models.CASCADE) + programming_language = models.ForeignKey(ProgrammingLanguage, on_delete=models.CASCADE) + percentage = models.PositiveIntegerField(blank=True, null=True) + + def __str__(self): + return f"{self.project.owner}/{self.project.name} | {self.programming_language} | {self.percentage}%" + + +class HostingPlatform(models.Model): + name = models.CharField(max_length=100, unique=True) + + def __str__(self): + return self.name + + +class ProjectHostingPlatform(models.Model): + hosting_platform = models.ForeignKey(HostingPlatform, on_delete=models.CASCADE) + project = models.OneToOneField(Project, on_delete=models.CASCADE) + url = models.URLField(unique=True) + + def __str__(self): + return self.url + + +class Star(models.Model): + user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE) + project = models.ForeignKey(Project, on_delete=models.CASCADE) diff --git a/src/apps/fossdb/operating_system/models.py b/src/apps/fossdb/operating_system/models.py deleted file mode 100644 index 911d8fd..0000000 --- a/src/apps/fossdb/operating_system/models.py +++ /dev/null @@ -1,30 +0,0 @@ -from django.db import models - - -class OperatingSystem(models.Model): - name = models.CharField(max_length=100, unique=True) - description = models.TextField(blank=True, default="") - - def __str__(self): - return self.name - - -class OperatingSystemVersion(models.Model): - operating_system = models.ForeignKey(OperatingSystem, on_delete=models.CASCADE) - version = models.CharField(max_length=50, blank=True, default="") - codename = models.CharField(max_length=100, blank=True, default="") - is_lts = models.BooleanField(blank=True, default=False) - - def __str__(self): - return f"{self.operating_system.name} {self.version} {'LTS' if self.is_lts else ''}" - - class Meta: - constraints = ( - models.UniqueConstraint( - fields=( - "operating_system", - "version", - ), - name="unique_os_version", - ), - ) diff --git a/src/apps/fossdb/programming_language/forms.py b/src/apps/fossdb/programming_language/forms.py deleted file mode 100644 index 4d29eb5..0000000 --- a/src/apps/fossdb/programming_language/forms.py +++ /dev/null @@ -1,23 +0,0 @@ -from django import forms - -from .models import ProgrammingLanguage, ProjectProgrammingLanguage - - -class ProgrammingLanguageForm(forms.ModelForm): - class Meta: - model = ProjectProgrammingLanguage - fields = ( - "programming_language", - "percentage", - ) - widgets = { - "programming_language": forms.Select( - choices=ProgrammingLanguage.objects.all(), - ), - "percentage": forms.NumberInput( - attrs={ - "min": "0", - "max": "100", - } - ), - } diff --git a/src/apps/fossdb/programming_language/models.py b/src/apps/fossdb/programming_language/models.py deleted file mode 100644 index d2357d3..0000000 --- a/src/apps/fossdb/programming_language/models.py +++ /dev/null @@ -1,17 +0,0 @@ -from django.db import models - - -class ProgrammingLanguage(models.Model): - name = models.CharField(max_length=100, unique=True) - - def __str__(self): - return self.name - - -class ProjectProgrammingLanguage(models.Model): - project = models.ForeignKey("Project", on_delete=models.CASCADE) - programming_language = models.ForeignKey(ProgrammingLanguage, on_delete=models.CASCADE) - percentage = models.PositiveIntegerField(blank=True, null=True) - - def __str__(self): - return f"{self.project.owner}/{self.project.name} | {self.programming_language} | {self.percentage}%" diff --git a/src/apps/fossdb/star/models.py b/src/apps/fossdb/star/models.py deleted file mode 100644 index cfa2034..0000000 --- a/src/apps/fossdb/star/models.py +++ /dev/null @@ -1,7 +0,0 @@ -from django.conf import settings -from django.db import models - - -class Star(models.Model): - user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE) - project = models.ForeignKey("Project", on_delete=models.CASCADE, related_name="stars") diff --git a/src/apps/fossdb/tag/models.py b/src/apps/fossdb/tag/models.py deleted file mode 100644 index 21908a6..0000000 --- a/src/apps/fossdb/tag/models.py +++ /dev/null @@ -1,10 +0,0 @@ -from django.db import models - - -class Tag(models.Model): - name = models.CharField(max_length=100, unique=True, db_index=True) - description = models.TextField(blank=True, default="") - icon = models.ImageField(upload_to="types/icons/", null=True, blank=True) - - def __str__(self): - return self.name diff --git a/src/apps/fossdb/urls.py b/src/apps/fossdb/urls.py index a831e57..1d4b5d0 100644 --- a/src/apps/fossdb/urls.py +++ b/src/apps/fossdb/urls.py @@ -3,7 +3,7 @@ from django.urls import path from . import views urlpatterns = [ - path("", views.ProjectListView.as_view(), name="index"), + path("explore/", views.ProjectListView.as_view(), name="explore"), path("add/", views.ProjectCreateView.as_view(), name="add-project"), path("//", views.ProjectDetailView.as_view(), name="project-detail"), path("//edit/", views.ProjectUpdateView.as_view(), name="project-update"), diff --git a/src/apps/fossdb/views.py b/src/apps/fossdb/views.py index 71668a5..13ec9d4 100644 --- a/src/apps/fossdb/views.py +++ b/src/apps/fossdb/views.py @@ -7,11 +7,8 @@ from django_filters.views import FilterView from .filters import ProjectFilter -from .forms import ProjectForm -from .hosting_platform.forms import HostingPlatformForm -from .models import Project -from .programming_language.forms import ProgrammingLanguageForm -from .programming_language.models import ProjectProgrammingLanguage +from .forms import HostingPlatformForm, ProgrammingLanguageForm, ProjectForm +from .models import Project, ProjectProgrammingLanguage ProgrammingLanguageInlineFormset = inlineformset_factory( Project, @@ -23,7 +20,7 @@ ProgrammingLanguageInlineFormset = inlineformset_factory( class ProjectListView(FilterView): model = Project - template_name = "fossdb/index.html" + template_name = "fossdb/explore.html" filterset_class = ProjectFilter context_object_name = "projects" paginate_by = 10 # optional 10 projects a page