From c2266e4e3f6a48c82f0436c7f54e6f8b2e43ca17 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 27 Mar 2023 19:03:30 +0000 Subject: [PATCH 01/54] Bump django from 4.1 to 4.1.7 Bumps [django](https://github.com/django/django) from 4.1 to 4.1.7. - [Release notes](https://github.com/django/django/releases) - [Commits](https://github.com/django/django/compare/4.1...4.1.7) --- updated-dependencies: - dependency-name: django dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 6f74b38..4e4add1 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,3 @@ -Django==4.1 +Django==4.1.7 fontawesomefree==6.2.1 mysqlclient==2.1.1 From 082fd1c21baa5eb74e860aef74d1efaae1284fa2 Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Fri, 7 Apr 2023 14:28:56 +0300 Subject: [PATCH 02/54] Make migrations --- FOSSDB_web/apps/fossdb/migrations/0001_initial.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/FOSSDB_web/apps/fossdb/migrations/0001_initial.py b/FOSSDB_web/apps/fossdb/migrations/0001_initial.py index def7053..c6fd294 100644 --- a/FOSSDB_web/apps/fossdb/migrations/0001_initial.py +++ b/FOSSDB_web/apps/fossdb/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 4.1 on 2023-03-27 17:46 +# Generated by Django 4.1.7 on 2023-04-07 11:28 from django.conf import settings from django.db import migrations, models @@ -14,6 +14,16 @@ class Migration(migrations.Migration): ] operations = [ + migrations.CreateModel( + name='License', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('short_name', models.CharField(max_length=50)), + ('full_name', models.CharField(blank=True, max_length=100, null=True)), + ('url', models.URLField(blank=True, null=True)), + ('description', models.TextField(blank=True, null=True)), + ], + ), migrations.CreateModel( name='Project', fields=[ @@ -22,6 +32,7 @@ class Migration(migrations.Migration): ('description', models.TextField()), ('create_date', models.DateTimeField(auto_now_add=True)), ('author', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ('license', models.ManyToManyField(to='fossdb.license')), ], ), ] From 341ce260b9adbe1ab0af6405a1de18bbc0b735e6 Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Fri, 7 Apr 2023 14:29:38 +0300 Subject: [PATCH 03/54] Created License model --- FOSSDB_web/apps/fossdb/models.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/FOSSDB_web/apps/fossdb/models.py b/FOSSDB_web/apps/fossdb/models.py index e61e920..b62e83c 100644 --- a/FOSSDB_web/apps/fossdb/models.py +++ b/FOSSDB_web/apps/fossdb/models.py @@ -2,10 +2,21 @@ from django.contrib.auth.models import User from django.db import models +class License(models.Model): + short_name = models.CharField(max_length=50) + full_name = models.CharField(max_length=100, null=True, blank=True) + url = models.URLField(null=True, blank=True) + description = models.TextField(null=True, blank=True) + + def __str__(self): + return self.short_name + + class Project(models.Model): author = models.ForeignKey(User, on_delete=models.CASCADE) title = models.CharField(max_length=255) description = models.TextField() + license = models.ManyToManyField(License) create_date = models.DateTimeField(auto_now_add=True) def __str__(self): From a00d932f3c9cdab889052c66799e0d04b3ff3ce9 Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Fri, 7 Apr 2023 14:29:53 +0300 Subject: [PATCH 04/54] Minor fixes --- FOSSDB_web/apps/fossdb/models.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/FOSSDB_web/apps/fossdb/models.py b/FOSSDB_web/apps/fossdb/models.py index b62e83c..1784573 100644 --- a/FOSSDB_web/apps/fossdb/models.py +++ b/FOSSDB_web/apps/fossdb/models.py @@ -14,13 +14,13 @@ class License(models.Model): class Project(models.Model): author = models.ForeignKey(User, on_delete=models.CASCADE) - title = models.CharField(max_length=255) + title = models.CharField(max_length=255, null=False) description = models.TextField() license = models.ManyToManyField(License) create_date = models.DateTimeField(auto_now_add=True) def __str__(self): - return self.repo_name + return f"{self.author} | {self.title}" def get_absolute_url(self): return f"/projects/{self.id}" From 50c74ff9b60a8e232b75e6c586596650fe668f03 Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Fri, 7 Apr 2023 14:31:08 +0300 Subject: [PATCH 05/54] Renamed variable --- FOSSDB_web/apps/fossdb/views.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/FOSSDB_web/apps/fossdb/views.py b/FOSSDB_web/apps/fossdb/views.py index 3b3a3a8..1811a24 100644 --- a/FOSSDB_web/apps/fossdb/views.py +++ b/FOSSDB_web/apps/fossdb/views.py @@ -15,10 +15,12 @@ def index(request): def add_project(request): if request.method == "POST": form = ProjectForm(request.POST) + if form.is_valid(): - post = form.save(commit=False) - post.author = request.user - post.save() + project = form.save(commit=False) + project.author = request.user + project.save() + form.save_m2m() return redirect("/") else: form = ProjectForm() From 0caa73b3dcd8f59631578e24b825465368068630 Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Fri, 7 Apr 2023 14:31:41 +0300 Subject: [PATCH 06/54] Added buttons for convinience --- templates/fossdb/index.html | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/templates/fossdb/index.html b/templates/fossdb/index.html index c7843d8..5bb61ea 100644 --- a/templates/fossdb/index.html +++ b/templates/fossdb/index.html @@ -3,6 +3,13 @@ {% block title %}{{ title }}{% endblock %} {% block meta %}{% endblock %} {% block content %} + + +
{% for project in projects %} @{{ project.author.username }}
{{ project.title }}
From 5d5944fa49aee48d6516544d744afec4df40e093 Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Fri, 7 Apr 2023 14:32:08 +0300 Subject: [PATCH 07/54] Created License form --- FOSSDB_web/apps/fossdb/forms.py | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/FOSSDB_web/apps/fossdb/forms.py b/FOSSDB_web/apps/fossdb/forms.py index 9603689..c6e1981 100644 --- a/FOSSDB_web/apps/fossdb/forms.py +++ b/FOSSDB_web/apps/fossdb/forms.py @@ -1,9 +1,29 @@ -from django import forms +from django.forms import (CheckboxSelectMultiple, ModelForm, + ModelMultipleChoiceField, TextInput) -from .models import Project +from .models import License, Project -class ProjectForm(forms.ModelForm): +class ProjectForm(ModelForm): + class Meta: model = Project - fields = ["title", "description"] + fields = ["title", "description", "license"] + + widgets = { + "title": TextInput(attrs={ + "class": "form-control", + "placeholder": "Project name", + }), + "description": TextInput(attrs={ + "class": "form-control", + "placeholder": "Description", + }), + } + license = ModelMultipleChoiceField(queryset=License.objects.all(), widget=CheckboxSelectMultiple) + + +class LicenseForm(ModelForm): + class Meta: + model = License + fields = ["short_name", "full_name", "url", "description"] From 022f4f8c9b373256800c7db8f0ccb8e8c4f73f25 Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Fri, 7 Apr 2023 14:32:24 +0300 Subject: [PATCH 08/54] Added Project and License models to admin --- FOSSDB_web/apps/fossdb/admin.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/FOSSDB_web/apps/fossdb/admin.py b/FOSSDB_web/apps/fossdb/admin.py index e69de29..dbe7c58 100644 --- a/FOSSDB_web/apps/fossdb/admin.py +++ b/FOSSDB_web/apps/fossdb/admin.py @@ -0,0 +1,6 @@ +from django.contrib import admin + +from .models import License, Project + +admin.site.register(Project) +admin.site.register(License) From 3991385be7d0c8f91026bb403319b7552eaf7827 Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Fri, 7 Apr 2023 14:32:36 +0300 Subject: [PATCH 09/54] Display licenses of project --- templates/fossdb/index.html | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/templates/fossdb/index.html b/templates/fossdb/index.html index 5bb61ea..1882b08 100644 --- a/templates/fossdb/index.html +++ b/templates/fossdb/index.html @@ -14,6 +14,17 @@ @{{ project.author.username }}
{{ project.title }}

{{ project.description }}

+ +
+

{{ project.create_date }}

{% empty %}

No projects yet (

{% endfor %} From c95614aedff2da8d449684f42e789a7bb2983484 Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Fri, 7 Apr 2023 22:55:33 +0300 Subject: [PATCH 10/54] Fix typo --- FOSSDB_web/apps/fossdb/views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/FOSSDB_web/apps/fossdb/views.py b/FOSSDB_web/apps/fossdb/views.py index 1811a24..1de238b 100644 --- a/FOSSDB_web/apps/fossdb/views.py +++ b/FOSSDB_web/apps/fossdb/views.py @@ -11,7 +11,7 @@ def index(request): @login_required(login_url="login/") -@permission_required("fossdb.add_post)", login_url="login/", raise_exception=True) +@permission_required("fossdb.add_post", login_url="login/", raise_exception=True) def add_project(request): if request.method == "POST": form = ProjectForm(request.POST) From ed36aba8e0fcff7fe9f4f66c5e3e50fd9d99a780 Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Fri, 7 Apr 2023 22:59:09 +0300 Subject: [PATCH 11/54] Moved to context --- FOSSDB_web/apps/fossdb/views.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/FOSSDB_web/apps/fossdb/views.py b/FOSSDB_web/apps/fossdb/views.py index 1de238b..e860d6b 100644 --- a/FOSSDB_web/apps/fossdb/views.py +++ b/FOSSDB_web/apps/fossdb/views.py @@ -6,8 +6,11 @@ from .models import Project def index(request): - projects = Project.objects.all() - return render(request, "fossdb/index.html", {"title": "FOSSDB", "projects": projects}) + context = { + "title": "FOSSDB", + "projects": Project.objects.all() + } + return render(request, "fossdb/index.html", context) @login_required(login_url="login/") From 581bd74e575ac4de0000632fb937d52002dffa1b Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Fri, 7 Apr 2023 23:00:00 +0300 Subject: [PATCH 12/54] Renamed variable --- FOSSDB_web/apps/fossdb/views.py | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/FOSSDB_web/apps/fossdb/views.py b/FOSSDB_web/apps/fossdb/views.py index e860d6b..5e0b370 100644 --- a/FOSSDB_web/apps/fossdb/views.py +++ b/FOSSDB_web/apps/fossdb/views.py @@ -17,14 +17,20 @@ def index(request): @permission_required("fossdb.add_post", login_url="login/", raise_exception=True) def add_project(request): if request.method == "POST": - form = ProjectForm(request.POST) + project_form = ProjectForm(request.POST) - if form.is_valid(): - project = form.save(commit=False) + if project_form.is_valid(): + project = project_form.save(commit=False) project.author = request.user project.save() - form.save_m2m() + project_form.save_m2m() return redirect("/") else: - form = ProjectForm() - return render(request, "fossdb/add_project.html", {"title": "Add project", "form": form}) + project_form = ProjectForm() + + context = { + "title": "Add project", + "project_form": project_form, + # "language_formset": language_formset + } + return render(request, "fossdb/add_project.html", context) From 2cff08747c658c74cbf1da48b4c127235541b29a Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Fri, 7 Apr 2023 23:40:27 +0300 Subject: [PATCH 13/54] Created ProgrammingLanguage model --- FOSSDB_web/apps/fossdb/models.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/FOSSDB_web/apps/fossdb/models.py b/FOSSDB_web/apps/fossdb/models.py index 1784573..fd03cd8 100644 --- a/FOSSDB_web/apps/fossdb/models.py +++ b/FOSSDB_web/apps/fossdb/models.py @@ -12,6 +12,13 @@ class License(models.Model): return self.short_name +class ProgrammingLanguage(models.Model): + name = models.CharField(max_length=100) + + def __str__(self): + return self.name + + class Project(models.Model): author = models.ForeignKey(User, on_delete=models.CASCADE) title = models.CharField(max_length=255, null=False) From 5c082c724d64f0ef3ecda33c24fa5a34c33a19cf Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Fri, 7 Apr 2023 23:41:10 +0300 Subject: [PATCH 14/54] Created ProjectProgrammingLanguage model --- FOSSDB_web/apps/fossdb/models.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/FOSSDB_web/apps/fossdb/models.py b/FOSSDB_web/apps/fossdb/models.py index fd03cd8..3153a76 100644 --- a/FOSSDB_web/apps/fossdb/models.py +++ b/FOSSDB_web/apps/fossdb/models.py @@ -19,6 +19,15 @@ class ProgrammingLanguage(models.Model): return self.name +class ProjectProgrammingLanguage(models.Model): + project = models.ForeignKey("Project", on_delete=models.CASCADE) + language = models.ForeignKey(ProgrammingLanguage, on_delete=models.CASCADE) + percentage = models.PositiveIntegerField() + + def __str__(self): + return f"{self.project} | {self.language} | {self.percentage}%" + + class Project(models.Model): author = models.ForeignKey(User, on_delete=models.CASCADE) title = models.CharField(max_length=255, null=False) From ff396a11928ace2042fdfb13afee1b567b93f6f3 Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Fri, 7 Apr 2023 23:42:19 +0300 Subject: [PATCH 15/54] Renamed variable --- FOSSDB_web/apps/fossdb/models.py | 4 ++-- templates/fossdb/index.html | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/FOSSDB_web/apps/fossdb/models.py b/FOSSDB_web/apps/fossdb/models.py index 3153a76..239fdaa 100644 --- a/FOSSDB_web/apps/fossdb/models.py +++ b/FOSSDB_web/apps/fossdb/models.py @@ -30,13 +30,13 @@ class ProjectProgrammingLanguage(models.Model): class Project(models.Model): author = models.ForeignKey(User, on_delete=models.CASCADE) - title = models.CharField(max_length=255, null=False) + name = models.CharField(max_length=255, null=False) description = models.TextField() license = models.ManyToManyField(License) create_date = models.DateTimeField(auto_now_add=True) def __str__(self): - return f"{self.author} | {self.title}" + return f"{self.author} | {self.name}" def get_absolute_url(self): return f"/projects/{self.id}" diff --git a/templates/fossdb/index.html b/templates/fossdb/index.html index 1882b08..b1fff40 100644 --- a/templates/fossdb/index.html +++ b/templates/fossdb/index.html @@ -12,7 +12,7 @@
{% for project in projects %} @{{ project.author.username }} -
{{ project.title }}
+

{{ project.name }}

{{ project.description }}

    {% for license in project.license.all %} From 6c259d2e967e63c3606c8fb2fd7e1738f961b63e Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Fri, 7 Apr 2023 23:43:30 +0300 Subject: [PATCH 16/54] Renamed variables --- FOSSDB_web/apps/fossdb/models.py | 4 ++-- templates/fossdb/index.html | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/FOSSDB_web/apps/fossdb/models.py b/FOSSDB_web/apps/fossdb/models.py index 239fdaa..ead28f4 100644 --- a/FOSSDB_web/apps/fossdb/models.py +++ b/FOSSDB_web/apps/fossdb/models.py @@ -32,8 +32,8 @@ class Project(models.Model): author = models.ForeignKey(User, on_delete=models.CASCADE) name = models.CharField(max_length=255, null=False) description = models.TextField() - license = models.ManyToManyField(License) - create_date = models.DateTimeField(auto_now_add=True) + licenses = models.ManyToManyField(License) + date_created = models.DateTimeField(auto_now_add=True) def __str__(self): return f"{self.author} | {self.name}" diff --git a/templates/fossdb/index.html b/templates/fossdb/index.html index b1fff40..bde03bb 100644 --- a/templates/fossdb/index.html +++ b/templates/fossdb/index.html @@ -24,7 +24,7 @@ {% endfor %}

-

{{ project.create_date }}

+

{{ project.date_created }}

{% empty %}

No projects yet (

{% endfor %} From 8ac7f73806e1b1a95c0bca54dc7c7a1a4835b3e9 Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Fri, 7 Apr 2023 23:48:32 +0300 Subject: [PATCH 17/54] Added languages attribute to Projects model --- FOSSDB_web/apps/fossdb/models.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/FOSSDB_web/apps/fossdb/models.py b/FOSSDB_web/apps/fossdb/models.py index ead28f4..c006ce6 100644 --- a/FOSSDB_web/apps/fossdb/models.py +++ b/FOSSDB_web/apps/fossdb/models.py @@ -33,10 +33,9 @@ class Project(models.Model): name = models.CharField(max_length=255, null=False) description = models.TextField() licenses = models.ManyToManyField(License) + programming_languages = models.ManyToManyField(ProgrammingLanguage, through="ProjectProgrammingLanguage", related_name="projects") date_created = models.DateTimeField(auto_now_add=True) def __str__(self): return f"{self.author} | {self.name}" - def get_absolute_url(self): - return f"/projects/{self.id}" From 4791e5477ab53656407a29e29a0b7f47a93ea21e Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Fri, 7 Apr 2023 23:50:20 +0300 Subject: [PATCH 18/54] Show language % of each project --- templates/fossdb/add_project.html | 2 +- templates/fossdb/index.html | 9 ++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/templates/fossdb/add_project.html b/templates/fossdb/add_project.html index 52b018a..99282da 100644 --- a/templates/fossdb/add_project.html +++ b/templates/fossdb/add_project.html @@ -4,7 +4,7 @@ {% block meta %}{% endblock %} {% block content %}
- {% csrf_token %}{{ form }} + {% csrf_token %}{{ project_form }}
{% endblock %} diff --git a/templates/fossdb/index.html b/templates/fossdb/index.html index bde03bb..49af468 100644 --- a/templates/fossdb/index.html +++ b/templates/fossdb/index.html @@ -15,7 +15,7 @@

{{ project.name }}

{{ project.description }}

    - {% for license in project.license.all %} + {% for license in project.licenses.all %}
  • {{ license.short_name }}
  • @@ -23,6 +23,13 @@

    No license

    {% endfor %}
+
    + {% for language in project.projectprogramminglanguage_set.all %} +
  • {{ language.language.name }} | {{ language.percentage }}%
  • + {% empty %} +

    No language

    + {% endfor %} +

{{ project.date_created }}

{% empty %} From 2544256b50a8e103e611380c5cc16265a3e48fca Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Fri, 7 Apr 2023 23:50:36 +0300 Subject: [PATCH 19/54] Added language form --- FOSSDB_web/apps/fossdb/views.py | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/FOSSDB_web/apps/fossdb/views.py b/FOSSDB_web/apps/fossdb/views.py index 5e0b370..4d2496f 100644 --- a/FOSSDB_web/apps/fossdb/views.py +++ b/FOSSDB_web/apps/fossdb/views.py @@ -1,14 +1,15 @@ from django.contrib.auth.decorators import login_required, permission_required +from django.forms import formset_factory from django.shortcuts import redirect, render -from .forms import ProjectForm -from .models import Project +from .forms import ProjectForm, ProjectProgrammingLanguageForm +from .models import ProgrammingLanguage, Project def index(request): context = { "title": "FOSSDB", - "projects": Project.objects.all() + "projects": Project.objects.all(), } return render(request, "fossdb/index.html", context) @@ -16,21 +17,31 @@ def index(request): @login_required(login_url="login/") @permission_required("fossdb.add_post", login_url="login/", raise_exception=True) def add_project(request): + ProgrammingLanguageFormSet = formset_factory(ProjectProgrammingLanguageForm, extra=1) if request.method == "POST": project_form = ProjectForm(request.POST) + language_formset = ProgrammingLanguageFormSet(request.POST) - if project_form.is_valid(): + if project_form.is_valid() and language_formset.is_valid(): project = project_form.save(commit=False) project.author = request.user project.save() + + for language_form in language_formset: + if language_formset.is_valid(): + language = language_form.save(commit=False) + language.project = project + language.save() + project_form.save_m2m() return redirect("/") else: project_form = ProjectForm() + language_formset = ProgrammingLanguageFormSet() context = { "title": "Add project", "project_form": project_form, - # "language_formset": language_formset + "language_formset": language_formset } return render(request, "fossdb/add_project.html", context) From 18dacd78bfd6ca833931aa4683fa06daf025e94a Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Fri, 7 Apr 2023 23:50:49 +0300 Subject: [PATCH 20/54] Updated admin panel --- FOSSDB_web/apps/fossdb/admin.py | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/FOSSDB_web/apps/fossdb/admin.py b/FOSSDB_web/apps/fossdb/admin.py index dbe7c58..632e081 100644 --- a/FOSSDB_web/apps/fossdb/admin.py +++ b/FOSSDB_web/apps/fossdb/admin.py @@ -1,6 +1,24 @@ from django.contrib import admin +from django.forms import inlineformset_factory + +from .models import (License, ProgrammingLanguage, Project, + ProjectProgrammingLanguage) + + +class ProjectProgrammingLanguageInline(admin.TabularInline): + model = ProjectProgrammingLanguage + extra = 1 + + +class ProjectAdmin(admin.ModelAdmin): + inlines = [ProjectProgrammingLanguageInline] + list_display = ("author", "name", "get_languages") + + def get_languages(self, object): + return " | ".join([i.language.name for i in object.projectprogramminglanguage_set.all()]) -from .models import License, Project -admin.site.register(Project) admin.site.register(License) +admin.site.register(ProgrammingLanguage) +admin.site.register(Project, ProjectAdmin) +# admin.site.register(HostingPlatform) From 9f56f4de86c479d7d51fa5e8b6fc5d22cb380c8c Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Fri, 7 Apr 2023 23:52:03 +0300 Subject: [PATCH 21/54] Added language form --- FOSSDB_web/apps/fossdb/forms.py | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/FOSSDB_web/apps/fossdb/forms.py b/FOSSDB_web/apps/fossdb/forms.py index c6e1981..1d946c8 100644 --- a/FOSSDB_web/apps/fossdb/forms.py +++ b/FOSSDB_web/apps/fossdb/forms.py @@ -1,29 +1,30 @@ -from django.forms import (CheckboxSelectMultiple, ModelForm, - ModelMultipleChoiceField, TextInput) +from django import forms -from .models import License, Project +from .models import License, Project, ProjectProgrammingLanguage -class ProjectForm(ModelForm): +class ProjectForm(forms.ModelForm): class Meta: model = Project - fields = ["title", "description", "license"] + fields = ["name", "description", "licenses", "programming_languages"] widgets = { - "title": TextInput(attrs={ + "name": forms.TextInput(attrs={ "class": "form-control", "placeholder": "Project name", }), - "description": TextInput(attrs={ + "description": forms.Textarea(attrs={ "class": "form-control", "placeholder": "Description", }), + "licenses": forms.CheckboxSelectMultiple(), + "programming_languages": forms.CheckboxSelectMultiple(), } - license = ModelMultipleChoiceField(queryset=License.objects.all(), widget=CheckboxSelectMultiple) -class LicenseForm(ModelForm): +class LicenseForm(forms.ModelForm): class Meta: model = License fields = ["short_name", "full_name", "url", "description"] + From 4ef0b5bcb835b461e3bba03887a6c8449da5d683 Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Fri, 7 Apr 2023 23:52:23 +0300 Subject: [PATCH 22/54] Update migrations --- .../apps/fossdb/migrations/0001_initial.py | 38 --------- ...r_projectprogramminglanguage_percentage.py | 82 +++++++++++++++++++ 2 files changed, 82 insertions(+), 38 deletions(-) delete mode 100644 FOSSDB_web/apps/fossdb/migrations/0001_initial.py create mode 100644 FOSSDB_web/apps/fossdb/migrations/0001_squashed_0004_alter_projectprogramminglanguage_percentage.py diff --git a/FOSSDB_web/apps/fossdb/migrations/0001_initial.py b/FOSSDB_web/apps/fossdb/migrations/0001_initial.py deleted file mode 100644 index c6fd294..0000000 --- a/FOSSDB_web/apps/fossdb/migrations/0001_initial.py +++ /dev/null @@ -1,38 +0,0 @@ -# Generated by Django 4.1.7 on 2023-04-07 11:28 - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ] - - operations = [ - migrations.CreateModel( - name='License', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('short_name', models.CharField(max_length=50)), - ('full_name', models.CharField(blank=True, max_length=100, null=True)), - ('url', models.URLField(blank=True, null=True)), - ('description', models.TextField(blank=True, null=True)), - ], - ), - migrations.CreateModel( - name='Project', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('title', models.CharField(max_length=255)), - ('description', models.TextField()), - ('create_date', models.DateTimeField(auto_now_add=True)), - ('author', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), - ('license', models.ManyToManyField(to='fossdb.license')), - ], - ), - ] diff --git a/FOSSDB_web/apps/fossdb/migrations/0001_squashed_0004_alter_projectprogramminglanguage_percentage.py b/FOSSDB_web/apps/fossdb/migrations/0001_squashed_0004_alter_projectprogramminglanguage_percentage.py new file mode 100644 index 0000000..3a7b6a4 --- /dev/null +++ b/FOSSDB_web/apps/fossdb/migrations/0001_squashed_0004_alter_projectprogramminglanguage_percentage.py @@ -0,0 +1,82 @@ +# Generated by Django 4.1.7 on 2023-04-07 20:39 + +from django.conf import settings +import django.core.validators +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + replaces = [('fossdb', '0001_initial'), ('fossdb', '0002_alter_projectprogramminglanguage_project'), ('fossdb', '0003_alter_project_licenses_and_more'), ('fossdb', '0004_alter_projectprogramminglanguage_percentage')] + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='License', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('short_name', models.CharField(max_length=50)), + ('full_name', models.CharField(blank=True, max_length=100, null=True)), + ('url', models.URLField(blank=True, null=True)), + ('description', models.TextField(blank=True, null=True)), + ], + ), + migrations.CreateModel( + name='ProgrammingLanguage', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=100)), + ], + ), + migrations.CreateModel( + name='Project', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=255)), + ('description', models.TextField()), + ('date_created', models.DateTimeField(auto_now_add=True)), + ('author', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ('licenses', models.ManyToManyField(related_name='projects', to='fossdb.license')), + ], + ), + migrations.CreateModel( + name='ProjectProgrammingLanguage', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('percentage', models.PositiveIntegerField(default=0, validators=[django.core.validators.MaxValueValidator(100)])), + ('language', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='fossdb.programminglanguage')), + ('project', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='fossdb.project')), + ], + ), + migrations.AddField( + model_name='project', + name='programming_languages', + field=models.ManyToManyField(related_name='projects', through='fossdb.ProjectProgrammingLanguage', to='fossdb.programminglanguage'), + ), + migrations.AlterField( + model_name='projectprogramminglanguage', + name='project', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='project_languages', to='fossdb.project'), + ), + migrations.AlterField( + model_name='project', + name='licenses', + field=models.ManyToManyField(to='fossdb.license'), + ), + migrations.AlterField( + model_name='projectprogramminglanguage', + name='project', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='fossdb.project'), + ), + migrations.AlterField( + model_name='projectprogramminglanguage', + name='percentage', + field=models.PositiveIntegerField(), + ), + ] From a969a900070c4f08b00832ec3425fb8c45ccd5b5 Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Sat, 8 Apr 2023 00:59:15 +0300 Subject: [PATCH 23/54] Renamed variable --- FOSSDB_web/apps/fossdb/admin.py | 3 +-- FOSSDB_web/apps/fossdb/models.py | 5 ++--- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/FOSSDB_web/apps/fossdb/admin.py b/FOSSDB_web/apps/fossdb/admin.py index 632e081..1c328f2 100644 --- a/FOSSDB_web/apps/fossdb/admin.py +++ b/FOSSDB_web/apps/fossdb/admin.py @@ -1,5 +1,4 @@ from django.contrib import admin -from django.forms import inlineformset_factory from .models import (License, ProgrammingLanguage, Project, ProjectProgrammingLanguage) @@ -15,7 +14,7 @@ class ProjectAdmin(admin.ModelAdmin): list_display = ("author", "name", "get_languages") def get_languages(self, object): - return " | ".join([i.language.name for i in object.projectprogramminglanguage_set.all()]) + return " | ".join([i.language.language for i in object.projectprogramminglanguage_set.all()]) admin.site.register(License) diff --git a/FOSSDB_web/apps/fossdb/models.py b/FOSSDB_web/apps/fossdb/models.py index c006ce6..1fa7430 100644 --- a/FOSSDB_web/apps/fossdb/models.py +++ b/FOSSDB_web/apps/fossdb/models.py @@ -13,10 +13,10 @@ class License(models.Model): class ProgrammingLanguage(models.Model): - name = models.CharField(max_length=100) + language = models.CharField(max_length=100) def __str__(self): - return self.name + return self.language class ProjectProgrammingLanguage(models.Model): @@ -38,4 +38,3 @@ class Project(models.Model): def __str__(self): return f"{self.author} | {self.name}" - From 7da126c2f00ee60c94e130b83491345b0f1becfb Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Sat, 8 Apr 2023 01:00:01 +0300 Subject: [PATCH 24/54] Fix language % input --- FOSSDB_web/apps/fossdb/views.py | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/FOSSDB_web/apps/fossdb/views.py b/FOSSDB_web/apps/fossdb/views.py index 4d2496f..87c9b9f 100644 --- a/FOSSDB_web/apps/fossdb/views.py +++ b/FOSSDB_web/apps/fossdb/views.py @@ -1,9 +1,8 @@ from django.contrib.auth.decorators import login_required, permission_required -from django.forms import formset_factory from django.shortcuts import redirect, render -from .forms import ProjectForm, ProjectProgrammingLanguageForm -from .models import ProgrammingLanguage, Project +from .forms import ProjectForm, ProjectProgrammingLanguageFormSet +from .models import Project def index(request): @@ -17,27 +16,23 @@ def index(request): @login_required(login_url="login/") @permission_required("fossdb.add_post", login_url="login/", raise_exception=True) def add_project(request): - ProgrammingLanguageFormSet = formset_factory(ProjectProgrammingLanguageForm, extra=1) if request.method == "POST": project_form = ProjectForm(request.POST) - language_formset = ProgrammingLanguageFormSet(request.POST) + language_formset = ProjectProgrammingLanguageFormSet(request.POST, instance=Project()) if project_form.is_valid() and language_formset.is_valid(): project = project_form.save(commit=False) project.author = request.user project.save() - for language_form in language_formset: - if language_formset.is_valid(): - language = language_form.save(commit=False) - language.project = project - language.save() + language_formset.instance = project + language_formset.save() project_form.save_m2m() return redirect("/") else: project_form = ProjectForm() - language_formset = ProgrammingLanguageFormSet() + language_formset = ProjectProgrammingLanguageFormSet() context = { "title": "Add project", From b04757c176f47423d2b051dad2be4911753678ae Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Sat, 8 Apr 2023 01:00:28 +0300 Subject: [PATCH 25/54] Made language input as table --- templates/fossdb/add_project.html | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/templates/fossdb/add_project.html b/templates/fossdb/add_project.html index 99282da..f560f60 100644 --- a/templates/fossdb/add_project.html +++ b/templates/fossdb/add_project.html @@ -4,7 +4,18 @@ {% block meta %}{% endblock %} {% block content %}
- {% csrf_token %}{{ project_form }} + {% csrf_token %} + {{ project_form.as_p }} + + {{ language_formset.management_form }} + {% for form in language_formset %} + + + + + + {% endfor %} +
{{ form.language.label_tag }}{{ form.language }}{{ form.percentage }}
{% endblock %} From 73428cddfb8a4bc77626518a7a7f81ddcfaea0e8 Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Sat, 8 Apr 2023 01:00:55 +0300 Subject: [PATCH 26/54] Minor fix --- FOSSDB_web/apps/fossdb/forms.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/FOSSDB_web/apps/fossdb/forms.py b/FOSSDB_web/apps/fossdb/forms.py index 1d946c8..c80ed03 100644 --- a/FOSSDB_web/apps/fossdb/forms.py +++ b/FOSSDB_web/apps/fossdb/forms.py @@ -1,13 +1,14 @@ from django import forms -from .models import License, Project, ProjectProgrammingLanguage +from .models import (License, ProgrammingLanguage, Project, + ProjectProgrammingLanguage) class ProjectForm(forms.ModelForm): class Meta: model = Project - fields = ["name", "description", "licenses", "programming_languages"] + fields = ["name", "description", "licenses"] widgets = { "name": forms.TextInput(attrs={ @@ -19,7 +20,6 @@ class ProjectForm(forms.ModelForm): "placeholder": "Description", }), "licenses": forms.CheckboxSelectMultiple(), - "programming_languages": forms.CheckboxSelectMultiple(), } From 7fa3e03cdc21a84386793ed246ff5834ed351cd4 Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Sat, 8 Apr 2023 01:01:45 +0300 Subject: [PATCH 27/54] Fix language showing in homepage --- templates/fossdb/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/fossdb/index.html b/templates/fossdb/index.html index 49af468..3b062bb 100644 --- a/templates/fossdb/index.html +++ b/templates/fossdb/index.html @@ -25,7 +25,7 @@
    {% for language in project.projectprogramminglanguage_set.all %} -
  • {{ language.language.name }} | {{ language.percentage }}%
  • +
  • {{ language.language }} | {{ language.percentage }}%
  • {% empty %}

    No language

    {% endfor %} From f34cf827c83483fbc4735d01f96fbc7fae984815 Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Sat, 8 Apr 2023 01:24:54 +0300 Subject: [PATCH 28/54] Added HostingPlatform --- FOSSDB_web/apps/fossdb/admin.py | 22 ++++++++++++------ FOSSDB_web/apps/fossdb/forms.py | 37 +++++++++++++++++++++++++++++-- FOSSDB_web/apps/fossdb/models.py | 17 ++++++++++++++ FOSSDB_web/apps/fossdb/views.py | 13 ++++++++--- templates/fossdb/add_project.html | 1 + 5 files changed, 78 insertions(+), 12 deletions(-) diff --git a/FOSSDB_web/apps/fossdb/admin.py b/FOSSDB_web/apps/fossdb/admin.py index 1c328f2..353a014 100644 --- a/FOSSDB_web/apps/fossdb/admin.py +++ b/FOSSDB_web/apps/fossdb/admin.py @@ -1,7 +1,7 @@ from django.contrib import admin -from .models import (License, ProgrammingLanguage, Project, - ProjectProgrammingLanguage) +from .models import (HostingPlatform, License, ProgrammingLanguage, Project, + ProjectHostingPlatform, ProjectProgrammingLanguage) class ProjectProgrammingLanguageInline(admin.TabularInline): @@ -9,15 +9,23 @@ class ProjectProgrammingLanguageInline(admin.TabularInline): extra = 1 -class ProjectAdmin(admin.ModelAdmin): - inlines = [ProjectProgrammingLanguageInline] - list_display = ("author", "name", "get_languages") +class ProjectHostingPlatformInline(admin.TabularInline): + model = ProjectHostingPlatform + extra = 1 - def get_languages(self, object): + +class ProjectAdmin(admin.ModelAdmin): + inlines = [ProjectProgrammingLanguageInline, ProjectHostingPlatformInline] + list_display = ("author", "name", "_languages", "_hosting_platform") + + def _languages(self, object): return " | ".join([i.language.language for i in object.projectprogramminglanguage_set.all()]) + def _hosting_platform(self, object): + return " | ".join([i.hosting_platform.hosting_platform for i in object.projecthostingplatform_set.all()]) + admin.site.register(License) admin.site.register(ProgrammingLanguage) +admin.site.register(HostingPlatform) admin.site.register(Project, ProjectAdmin) -# admin.site.register(HostingPlatform) diff --git a/FOSSDB_web/apps/fossdb/forms.py b/FOSSDB_web/apps/fossdb/forms.py index c80ed03..9da02f4 100644 --- a/FOSSDB_web/apps/fossdb/forms.py +++ b/FOSSDB_web/apps/fossdb/forms.py @@ -1,7 +1,7 @@ from django import forms -from .models import (License, ProgrammingLanguage, Project, - ProjectProgrammingLanguage) +from .models import (HostingPlatform, License, ProgrammingLanguage, Project, + ProjectHostingPlatform, ProjectProgrammingLanguage) class ProjectForm(forms.ModelForm): @@ -28,3 +28,36 @@ class LicenseForm(forms.ModelForm): model = License fields = ["short_name", "full_name", "url", "description"] + +class ProgrammingLanguageForm(forms.ModelForm): + percentage = forms.IntegerField(min_value=0, max_value=100) + + class Meta: + model = ProgrammingLanguage + fields = ["language", "percentage"] + + +ProjectProgrammingLanguageFormSet = forms.inlineformset_factory( + Project, + ProjectProgrammingLanguage, + form=ProgrammingLanguageForm, + extra=1, + can_delete=True, +) + + +class HostingPlatformForm(forms.ModelForm): + url = forms.URLField() + + class Meta: + model = HostingPlatform + fields = ["hosting_platform", "url"] + + +ProjectHostingPlatformFormSet = forms.inlineformset_factory( + Project, + ProjectHostingPlatform, + form=HostingPlatformForm, + extra=1, + can_delete=False +) diff --git a/FOSSDB_web/apps/fossdb/models.py b/FOSSDB_web/apps/fossdb/models.py index 1fa7430..9485b59 100644 --- a/FOSSDB_web/apps/fossdb/models.py +++ b/FOSSDB_web/apps/fossdb/models.py @@ -28,12 +28,29 @@ class ProjectProgrammingLanguage(models.Model): return f"{self.project} | {self.language} | {self.percentage}%" +class HostingPlatform(models.Model): + hosting_platform = models.CharField(max_length=100) + + def __str__(self): + return self.hosting_platform + + +class ProjectHostingPlatform(models.Model): + project = models.ForeignKey("Project", on_delete=models.CASCADE) + hosting_platform = models.ForeignKey(HostingPlatform, on_delete=models.CASCADE) + url = models.URLField() + + def __str__(self): + return f"{self.project} | {self.hosting_platform}" + + class Project(models.Model): author = models.ForeignKey(User, on_delete=models.CASCADE) name = models.CharField(max_length=255, null=False) description = models.TextField() licenses = models.ManyToManyField(License) programming_languages = models.ManyToManyField(ProgrammingLanguage, through="ProjectProgrammingLanguage", related_name="projects") + hosting_platform = models.ManyToManyField(HostingPlatform, through="ProjectHostingPlatform", related_name="projects") date_created = models.DateTimeField(auto_now_add=True) def __str__(self): diff --git a/FOSSDB_web/apps/fossdb/views.py b/FOSSDB_web/apps/fossdb/views.py index 87c9b9f..19b6d09 100644 --- a/FOSSDB_web/apps/fossdb/views.py +++ b/FOSSDB_web/apps/fossdb/views.py @@ -1,7 +1,8 @@ from django.contrib.auth.decorators import login_required, permission_required from django.shortcuts import redirect, render -from .forms import ProjectForm, ProjectProgrammingLanguageFormSet +from .forms import (ProjectForm, ProjectHostingPlatformFormSet, + ProjectProgrammingLanguageFormSet) from .models import Project @@ -19,8 +20,9 @@ def add_project(request): if request.method == "POST": project_form = ProjectForm(request.POST) language_formset = ProjectProgrammingLanguageFormSet(request.POST, instance=Project()) + host_formset = ProjectHostingPlatformFormSet(request.POST, instance=Project()) - if project_form.is_valid() and language_formset.is_valid(): + if project_form.is_valid() and language_formset.is_valid() and host_formset.is_valid(): project = project_form.save(commit=False) project.author = request.user project.save() @@ -28,15 +30,20 @@ def add_project(request): language_formset.instance = project language_formset.save() + host_formset.instance = project + host_formset.save() + project_form.save_m2m() return redirect("/") else: project_form = ProjectForm() language_formset = ProjectProgrammingLanguageFormSet() + host_formset = ProjectHostingPlatformFormSet() context = { "title": "Add project", "project_form": project_form, - "language_formset": language_formset + "language_formset": language_formset, + "host_formset": host_formset, } return render(request, "fossdb/add_project.html", context) diff --git a/templates/fossdb/add_project.html b/templates/fossdb/add_project.html index f560f60..d414e16 100644 --- a/templates/fossdb/add_project.html +++ b/templates/fossdb/add_project.html @@ -16,6 +16,7 @@ {% endfor %} + {{ host_formset.as_p }} {% endblock %} From f25759bb5b7b13fa17092c2af42cf9b04dfcb563 Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Sat, 8 Apr 2023 02:19:09 +0300 Subject: [PATCH 29/54] Changed id to uuid --- FOSSDB_web/apps/fossdb/models.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/FOSSDB_web/apps/fossdb/models.py b/FOSSDB_web/apps/fossdb/models.py index 9485b59..d21d940 100644 --- a/FOSSDB_web/apps/fossdb/models.py +++ b/FOSSDB_web/apps/fossdb/models.py @@ -1,3 +1,5 @@ +import uuid + from django.contrib.auth.models import User from django.db import models @@ -45,6 +47,7 @@ class ProjectHostingPlatform(models.Model): class Project(models.Model): + uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) author = models.ForeignKey(User, on_delete=models.CASCADE) name = models.CharField(max_length=255, null=False) description = models.TextField() @@ -53,5 +56,10 @@ class Project(models.Model): hosting_platform = models.ManyToManyField(HostingPlatform, through="ProjectHostingPlatform", related_name="projects") date_created = models.DateTimeField(auto_now_add=True) + def save(self, *args, **kwargs): + if not self.uuid: + self.uuid = uuid.uuid5(uuid.NAMESPACE_URL, f"{self.author.username}-{self.name}") + super().save(*args, **kwargs) + def __str__(self): return f"{self.author} | {self.name}" From 4b97d321bc202f8008b4b3e3c86951ed3a8856da Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Sat, 8 Apr 2023 02:19:28 +0300 Subject: [PATCH 30/54] Migrations --- ...language_percentage.py => 0001_initial.py} | 59 ++++++++++--------- 1 file changed, 31 insertions(+), 28 deletions(-) rename FOSSDB_web/apps/fossdb/migrations/{0001_squashed_0004_alter_projectprogramminglanguage_percentage.py => 0001_initial.py} (66%) diff --git a/FOSSDB_web/apps/fossdb/migrations/0001_squashed_0004_alter_projectprogramminglanguage_percentage.py b/FOSSDB_web/apps/fossdb/migrations/0001_initial.py similarity index 66% rename from FOSSDB_web/apps/fossdb/migrations/0001_squashed_0004_alter_projectprogramminglanguage_percentage.py rename to FOSSDB_web/apps/fossdb/migrations/0001_initial.py index 3a7b6a4..d43573f 100644 --- a/FOSSDB_web/apps/fossdb/migrations/0001_squashed_0004_alter_projectprogramminglanguage_percentage.py +++ b/FOSSDB_web/apps/fossdb/migrations/0001_initial.py @@ -1,15 +1,13 @@ -# Generated by Django 4.1.7 on 2023-04-07 20:39 +# Generated by Django 4.1.7 on 2023-04-07 23:05 from django.conf import settings -import django.core.validators from django.db import migrations, models import django.db.models.deletion +import uuid class Migration(migrations.Migration): - replaces = [('fossdb', '0001_initial'), ('fossdb', '0002_alter_projectprogramminglanguage_project'), ('fossdb', '0003_alter_project_licenses_and_more'), ('fossdb', '0004_alter_projectprogramminglanguage_percentage')] - initial = True dependencies = [ @@ -17,6 +15,13 @@ class Migration(migrations.Migration): ] operations = [ + migrations.CreateModel( + name='HostingPlatform', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('hosting_platform', models.CharField(max_length=100)), + ], + ), migrations.CreateModel( name='License', fields=[ @@ -31,52 +36,50 @@ class Migration(migrations.Migration): name='ProgrammingLanguage', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(max_length=100)), + ('language', models.CharField(max_length=100)), ], ), migrations.CreateModel( name='Project', fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('uuid', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), ('name', models.CharField(max_length=255)), ('description', models.TextField()), ('date_created', models.DateTimeField(auto_now_add=True)), ('author', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), - ('licenses', models.ManyToManyField(related_name='projects', to='fossdb.license')), ], ), migrations.CreateModel( name='ProjectProgrammingLanguage', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('percentage', models.PositiveIntegerField(default=0, validators=[django.core.validators.MaxValueValidator(100)])), + ('percentage', models.PositiveIntegerField()), ('language', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='fossdb.programminglanguage')), ('project', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='fossdb.project')), ], ), + migrations.CreateModel( + name='ProjectHostingPlatform', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('url', models.URLField()), + ('hosting_platform', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='fossdb.hostingplatform')), + ('project', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='fossdb.project')), + ], + ), + migrations.AddField( + model_name='project', + name='hosting_platform', + field=models.ManyToManyField(related_name='projects', through='fossdb.ProjectHostingPlatform', to='fossdb.hostingplatform'), + ), + migrations.AddField( + model_name='project', + name='licenses', + field=models.ManyToManyField(to='fossdb.license'), + ), migrations.AddField( model_name='project', name='programming_languages', field=models.ManyToManyField(related_name='projects', through='fossdb.ProjectProgrammingLanguage', to='fossdb.programminglanguage'), ), - migrations.AlterField( - model_name='projectprogramminglanguage', - name='project', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='project_languages', to='fossdb.project'), - ), - migrations.AlterField( - model_name='project', - name='licenses', - field=models.ManyToManyField(to='fossdb.license'), - ), - migrations.AlterField( - model_name='projectprogramminglanguage', - name='project', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='fossdb.project'), - ), - migrations.AlterField( - model_name='projectprogramminglanguage', - name='percentage', - field=models.PositiveIntegerField(), - ), ] From d5bf12cf29423ac8f1f993e7870ad7a39acb4915 Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Sat, 8 Apr 2023 13:10:28 +0300 Subject: [PATCH 31/54] Created License app --- FOSSDB_web/apps/license/__init__.py | 0 FOSSDB_web/apps/license/admin.py | 3 +++ FOSSDB_web/apps/license/apps.py | 6 ++++++ FOSSDB_web/apps/license/migrations/__init__.py | 0 FOSSDB_web/apps/license/models.py | 3 +++ FOSSDB_web/apps/license/tests.py | 3 +++ FOSSDB_web/apps/license/views.py | 3 +++ 7 files changed, 18 insertions(+) create mode 100644 FOSSDB_web/apps/license/__init__.py create mode 100644 FOSSDB_web/apps/license/admin.py create mode 100644 FOSSDB_web/apps/license/apps.py create mode 100644 FOSSDB_web/apps/license/migrations/__init__.py create mode 100644 FOSSDB_web/apps/license/models.py create mode 100644 FOSSDB_web/apps/license/tests.py create mode 100644 FOSSDB_web/apps/license/views.py diff --git a/FOSSDB_web/apps/license/__init__.py b/FOSSDB_web/apps/license/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/FOSSDB_web/apps/license/admin.py b/FOSSDB_web/apps/license/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/FOSSDB_web/apps/license/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/FOSSDB_web/apps/license/apps.py b/FOSSDB_web/apps/license/apps.py new file mode 100644 index 0000000..af50348 --- /dev/null +++ b/FOSSDB_web/apps/license/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class LicenseConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'license' diff --git a/FOSSDB_web/apps/license/migrations/__init__.py b/FOSSDB_web/apps/license/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/FOSSDB_web/apps/license/models.py b/FOSSDB_web/apps/license/models.py new file mode 100644 index 0000000..71a8362 --- /dev/null +++ b/FOSSDB_web/apps/license/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/FOSSDB_web/apps/license/tests.py b/FOSSDB_web/apps/license/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/FOSSDB_web/apps/license/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/FOSSDB_web/apps/license/views.py b/FOSSDB_web/apps/license/views.py new file mode 100644 index 0000000..91ea44a --- /dev/null +++ b/FOSSDB_web/apps/license/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here. From a055cbe47659775fad268616b56ea787cd776026 Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Sat, 8 Apr 2023 13:16:38 +0300 Subject: [PATCH 32/54] Moved License code to separate app --- FOSSDB_web/apps/fossdb/admin.py | 3 +-- FOSSDB_web/apps/fossdb/forms.py | 8 +------ ...2_delete_license_alter_project_licenses.py | 22 +++++++++++++++++ FOSSDB_web/apps/fossdb/models.py | 10 +------- FOSSDB_web/apps/license/admin.py | 4 +++- FOSSDB_web/apps/license/forms.py | 9 +++++++ .../apps/license/migrations/0001_initial.py | 24 +++++++++++++++++++ FOSSDB_web/apps/license/models.py | 10 +++++++- FOSSDB_web/apps/license/views.py | 3 --- FOSSDB_web/settings.py | 1 + 10 files changed, 71 insertions(+), 23 deletions(-) create mode 100644 FOSSDB_web/apps/fossdb/migrations/0002_delete_license_alter_project_licenses.py create mode 100644 FOSSDB_web/apps/license/forms.py create mode 100644 FOSSDB_web/apps/license/migrations/0001_initial.py diff --git a/FOSSDB_web/apps/fossdb/admin.py b/FOSSDB_web/apps/fossdb/admin.py index 353a014..e377288 100644 --- a/FOSSDB_web/apps/fossdb/admin.py +++ b/FOSSDB_web/apps/fossdb/admin.py @@ -1,6 +1,6 @@ from django.contrib import admin -from .models import (HostingPlatform, License, ProgrammingLanguage, Project, +from .models import (HostingPlatform, ProgrammingLanguage, Project, ProjectHostingPlatform, ProjectProgrammingLanguage) @@ -25,7 +25,6 @@ class ProjectAdmin(admin.ModelAdmin): return " | ".join([i.hosting_platform.hosting_platform for i in object.projecthostingplatform_set.all()]) -admin.site.register(License) admin.site.register(ProgrammingLanguage) admin.site.register(HostingPlatform) admin.site.register(Project, ProjectAdmin) diff --git a/FOSSDB_web/apps/fossdb/forms.py b/FOSSDB_web/apps/fossdb/forms.py index 9da02f4..0333317 100644 --- a/FOSSDB_web/apps/fossdb/forms.py +++ b/FOSSDB_web/apps/fossdb/forms.py @@ -1,6 +1,6 @@ from django import forms -from .models import (HostingPlatform, License, ProgrammingLanguage, Project, +from .models import (HostingPlatform, ProgrammingLanguage, Project, ProjectHostingPlatform, ProjectProgrammingLanguage) @@ -23,12 +23,6 @@ class ProjectForm(forms.ModelForm): } -class LicenseForm(forms.ModelForm): - class Meta: - model = License - fields = ["short_name", "full_name", "url", "description"] - - class ProgrammingLanguageForm(forms.ModelForm): percentage = forms.IntegerField(min_value=0, max_value=100) diff --git a/FOSSDB_web/apps/fossdb/migrations/0002_delete_license_alter_project_licenses.py b/FOSSDB_web/apps/fossdb/migrations/0002_delete_license_alter_project_licenses.py new file mode 100644 index 0000000..0244548 --- /dev/null +++ b/FOSSDB_web/apps/fossdb/migrations/0002_delete_license_alter_project_licenses.py @@ -0,0 +1,22 @@ +# Generated by Django 4.1.7 on 2023-04-08 10:14 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('license', '0001_initial'), + ('fossdb', '0001_initial'), + ] + + operations = [ + migrations.DeleteModel( + name='License', + ), + migrations.AlterField( + model_name='project', + name='licenses', + field=models.ManyToManyField(to='license.license'), + ), + ] diff --git a/FOSSDB_web/apps/fossdb/models.py b/FOSSDB_web/apps/fossdb/models.py index d21d940..d25faa4 100644 --- a/FOSSDB_web/apps/fossdb/models.py +++ b/FOSSDB_web/apps/fossdb/models.py @@ -3,15 +3,7 @@ import uuid from django.contrib.auth.models import User from django.db import models - -class License(models.Model): - short_name = models.CharField(max_length=50) - full_name = models.CharField(max_length=100, null=True, blank=True) - url = models.URLField(null=True, blank=True) - description = models.TextField(null=True, blank=True) - - def __str__(self): - return self.short_name +from license.models import License class ProgrammingLanguage(models.Model): diff --git a/FOSSDB_web/apps/license/admin.py b/FOSSDB_web/apps/license/admin.py index 8c38f3f..9908df0 100644 --- a/FOSSDB_web/apps/license/admin.py +++ b/FOSSDB_web/apps/license/admin.py @@ -1,3 +1,5 @@ from django.contrib import admin -# Register your models here. +from .models import License + +admin.site.register(License) diff --git a/FOSSDB_web/apps/license/forms.py b/FOSSDB_web/apps/license/forms.py new file mode 100644 index 0000000..0c180da --- /dev/null +++ b/FOSSDB_web/apps/license/forms.py @@ -0,0 +1,9 @@ +from django import forms + +from .models import License + + +class LicenseForm(forms.ModelForm): + class Meta: + model = License + fields = ["short_name", "full_name", "url", "description"] diff --git a/FOSSDB_web/apps/license/migrations/0001_initial.py b/FOSSDB_web/apps/license/migrations/0001_initial.py new file mode 100644 index 0000000..26024b3 --- /dev/null +++ b/FOSSDB_web/apps/license/migrations/0001_initial.py @@ -0,0 +1,24 @@ +# Generated by Django 4.1.7 on 2023-04-08 10:14 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='License', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('short_name', models.CharField(max_length=50)), + ('full_name', models.CharField(blank=True, max_length=100, null=True)), + ('url', models.URLField(blank=True, null=True)), + ('description', models.TextField(blank=True, null=True)), + ], + ), + ] diff --git a/FOSSDB_web/apps/license/models.py b/FOSSDB_web/apps/license/models.py index 71a8362..172f707 100644 --- a/FOSSDB_web/apps/license/models.py +++ b/FOSSDB_web/apps/license/models.py @@ -1,3 +1,11 @@ from django.db import models -# Create your models here. + +class License(models.Model): + short_name = models.CharField(max_length=50) + full_name = models.CharField(max_length=100, null=True, blank=True) + url = models.URLField(null=True, blank=True) + description = models.TextField(null=True, blank=True) + + def __str__(self): + return self.short_name diff --git a/FOSSDB_web/apps/license/views.py b/FOSSDB_web/apps/license/views.py index 91ea44a..e69de29 100644 --- a/FOSSDB_web/apps/license/views.py +++ b/FOSSDB_web/apps/license/views.py @@ -1,3 +0,0 @@ -from django.shortcuts import render - -# Create your views here. diff --git a/FOSSDB_web/settings.py b/FOSSDB_web/settings.py index e4d3655..5a28844 100644 --- a/FOSSDB_web/settings.py +++ b/FOSSDB_web/settings.py @@ -37,6 +37,7 @@ ALLOWED_HOSTS = config["ALLOWED_HOSTS"] INSTALLED_APPS = [ "fossdb", + "license", "account", "django.contrib.admin", "django.contrib.auth", From 89143d6d43fa74937c49a367b3156ac080642667 Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Sat, 8 Apr 2023 13:18:13 +0300 Subject: [PATCH 33/54] Added Tag model --- FOSSDB_web/apps/fossdb/admin.py | 3 ++- FOSSDB_web/apps/fossdb/models.py | 15 ++++++++++++--- FOSSDB_web/settings.py | 14 +++++++++++++- 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/FOSSDB_web/apps/fossdb/admin.py b/FOSSDB_web/apps/fossdb/admin.py index 353a014..e7f018d 100644 --- a/FOSSDB_web/apps/fossdb/admin.py +++ b/FOSSDB_web/apps/fossdb/admin.py @@ -1,7 +1,7 @@ from django.contrib import admin from .models import (HostingPlatform, License, ProgrammingLanguage, Project, - ProjectHostingPlatform, ProjectProgrammingLanguage) + ProjectHostingPlatform, ProjectProgrammingLanguage, Tag) class ProjectProgrammingLanguageInline(admin.TabularInline): @@ -29,3 +29,4 @@ admin.site.register(License) admin.site.register(ProgrammingLanguage) admin.site.register(HostingPlatform) admin.site.register(Project, ProjectAdmin) +admin.site.register(Tag) diff --git a/FOSSDB_web/apps/fossdb/models.py b/FOSSDB_web/apps/fossdb/models.py index d21d940..f4a7079 100644 --- a/FOSSDB_web/apps/fossdb/models.py +++ b/FOSSDB_web/apps/fossdb/models.py @@ -1,12 +1,14 @@ import uuid -from django.contrib.auth.models import User +from django.conf import settings from django.db import models +User = settings.AUTH_USER_MODEL + class License(models.Model): short_name = models.CharField(max_length=50) - full_name = models.CharField(max_length=100, null=True, blank=True) + full_name = models.CharField(max_length=100, blank=True) url = models.URLField(null=True, blank=True) description = models.TextField(null=True, blank=True) @@ -24,7 +26,7 @@ class ProgrammingLanguage(models.Model): class ProjectProgrammingLanguage(models.Model): project = models.ForeignKey("Project", on_delete=models.CASCADE) language = models.ForeignKey(ProgrammingLanguage, on_delete=models.CASCADE) - percentage = models.PositiveIntegerField() + percentage = models.PositiveIntegerField(default=0) def __str__(self): return f"{self.project} | {self.language} | {self.percentage}%" @@ -46,6 +48,12 @@ class ProjectHostingPlatform(models.Model): return f"{self.project} | {self.hosting_platform}" +class Tag(models.Model): + name = models.CharField(max_length=100) + description = models.TextField(null=True, blank=True) + icon = models.ImageField(upload_to="types/icons/", null=True, blank=True) + + class Project(models.Model): uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) author = models.ForeignKey(User, on_delete=models.CASCADE) @@ -54,6 +62,7 @@ class Project(models.Model): licenses = models.ManyToManyField(License) programming_languages = models.ManyToManyField(ProgrammingLanguage, through="ProjectProgrammingLanguage", related_name="projects") hosting_platform = models.ManyToManyField(HostingPlatform, through="ProjectHostingPlatform", related_name="projects") + project_type = models.ForeignKey(Tag, on_delete=models.CASCADE, blank=True, null=True) date_created = models.DateTimeField(auto_now_add=True) def save(self, *args, **kwargs): diff --git a/FOSSDB_web/settings.py b/FOSSDB_web/settings.py index e4d3655..cd5514a 100644 --- a/FOSSDB_web/settings.py +++ b/FOSSDB_web/settings.py @@ -82,7 +82,7 @@ WSGI_APPLICATION = "FOSSDB_web.wsgi.application" DATABASES = { "default": { - "ENGINE": "django.db.backends.mysql", + "ENGINE": f"django.db.backends.{config['DATABASE']['ENGINE']}", "NAME": config["DATABASE"]["NAME"], "USER": config["DATABASE"]["USER"], "PASSWORD": config["DATABASE"]["PASSWORD"], @@ -128,6 +128,7 @@ USE_TZ = True STATIC_URL = "/static/" STATIC_ROOT = BASE_PATH.joinpath("static") +MEDIA_URL = "/media/" MEDIA_ROOT = BASE_PATH.joinpath("media") # Default primary key field type @@ -136,3 +137,14 @@ MEDIA_ROOT = BASE_PATH.joinpath("media") DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField" LOGIN_REDIRECT_URL = "/" LOGOUT_REDIRECT_URL = "/" + +# HTTPS settings +# SESSION_COOKIE_SECURE = True +# CSRF_COOKIE_SECURE = True +# SECURE_SSL_REDIRECT = True + +# HSTS settings +# SECURE_HSTS_SECONDS = 31536000 # 1 year +# SECURE_HSTS_SECONDS = 1 # 1 year +# SECURE_HSTS_PRELOAD = True +# SECURE_HSTS_INCLUDE_SUBDOMAINS = True From 1555f9d5e0bfcc4cad55ae111033f15eedffdd89 Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Sat, 8 Apr 2023 13:26:12 +0300 Subject: [PATCH 34/54] Changed user --- FOSSDB_web/apps/fossdb/models.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/FOSSDB_web/apps/fossdb/models.py b/FOSSDB_web/apps/fossdb/models.py index 8ca8573..ff362d2 100644 --- a/FOSSDB_web/apps/fossdb/models.py +++ b/FOSSDB_web/apps/fossdb/models.py @@ -2,9 +2,10 @@ import uuid from django.conf import settings from django.db import models - from license.models import License +User = settings.AUTH_USER_MODEL + class ProgrammingLanguage(models.Model): language = models.CharField(max_length=100) From 2207738a2a8b5fdc562cf5e963258ac239782ac2 Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Sat, 8 Apr 2023 13:46:59 +0300 Subject: [PATCH 35/54] Created ProgrammingLanguage app --- FOSSDB_web/apps/fossdb/admin.py | 10 ++------- FOSSDB_web/apps/fossdb/forms.py | 20 +----------------- FOSSDB_web/apps/fossdb/models.py | 17 +-------------- FOSSDB_web/apps/fossdb/views.py | 4 ++-- .../apps/programming_language/__init__.py | 0 FOSSDB_web/apps/programming_language/admin.py | 11 ++++++++++ FOSSDB_web/apps/programming_language/apps.py | 6 ++++++ FOSSDB_web/apps/programming_language/forms.py | 21 +++++++++++++++++++ .../migrations/__init__.py | 0 .../apps/programming_language/models.py | 17 +++++++++++++++ FOSSDB_web/apps/programming_language/tests.py | 3 +++ FOSSDB_web/apps/programming_language/views.py | 3 +++ FOSSDB_web/settings.py | 1 + 13 files changed, 68 insertions(+), 45 deletions(-) create mode 100644 FOSSDB_web/apps/programming_language/__init__.py create mode 100644 FOSSDB_web/apps/programming_language/admin.py create mode 100644 FOSSDB_web/apps/programming_language/apps.py create mode 100644 FOSSDB_web/apps/programming_language/forms.py create mode 100644 FOSSDB_web/apps/programming_language/migrations/__init__.py create mode 100644 FOSSDB_web/apps/programming_language/models.py create mode 100644 FOSSDB_web/apps/programming_language/tests.py create mode 100644 FOSSDB_web/apps/programming_language/views.py diff --git a/FOSSDB_web/apps/fossdb/admin.py b/FOSSDB_web/apps/fossdb/admin.py index 353a014..4bcb5bd 100644 --- a/FOSSDB_web/apps/fossdb/admin.py +++ b/FOSSDB_web/apps/fossdb/admin.py @@ -1,12 +1,7 @@ from django.contrib import admin +from programming_language.admin import ProjectProgrammingLanguageInline -from .models import (HostingPlatform, License, ProgrammingLanguage, Project, - ProjectHostingPlatform, ProjectProgrammingLanguage) - - -class ProjectProgrammingLanguageInline(admin.TabularInline): - model = ProjectProgrammingLanguage - extra = 1 +from .models import HostingPlatform, License, Project, ProjectHostingPlatform class ProjectHostingPlatformInline(admin.TabularInline): @@ -26,6 +21,5 @@ class ProjectAdmin(admin.ModelAdmin): admin.site.register(License) -admin.site.register(ProgrammingLanguage) admin.site.register(HostingPlatform) admin.site.register(Project, ProjectAdmin) diff --git a/FOSSDB_web/apps/fossdb/forms.py b/FOSSDB_web/apps/fossdb/forms.py index 9da02f4..355ed69 100644 --- a/FOSSDB_web/apps/fossdb/forms.py +++ b/FOSSDB_web/apps/fossdb/forms.py @@ -1,7 +1,6 @@ from django import forms -from .models import (HostingPlatform, License, ProgrammingLanguage, Project, - ProjectHostingPlatform, ProjectProgrammingLanguage) +from .models import HostingPlatform, License, Project, ProjectHostingPlatform class ProjectForm(forms.ModelForm): @@ -29,23 +28,6 @@ class LicenseForm(forms.ModelForm): fields = ["short_name", "full_name", "url", "description"] -class ProgrammingLanguageForm(forms.ModelForm): - percentage = forms.IntegerField(min_value=0, max_value=100) - - class Meta: - model = ProgrammingLanguage - fields = ["language", "percentage"] - - -ProjectProgrammingLanguageFormSet = forms.inlineformset_factory( - Project, - ProjectProgrammingLanguage, - form=ProgrammingLanguageForm, - extra=1, - can_delete=True, -) - - class HostingPlatformForm(forms.ModelForm): url = forms.URLField() diff --git a/FOSSDB_web/apps/fossdb/models.py b/FOSSDB_web/apps/fossdb/models.py index d21d940..1921743 100644 --- a/FOSSDB_web/apps/fossdb/models.py +++ b/FOSSDB_web/apps/fossdb/models.py @@ -2,6 +2,7 @@ import uuid from django.contrib.auth.models import User from django.db import models +from programming_language.models import ProgrammingLanguage class License(models.Model): @@ -14,22 +15,6 @@ class License(models.Model): return self.short_name -class ProgrammingLanguage(models.Model): - language = models.CharField(max_length=100) - - def __str__(self): - return self.language - - -class ProjectProgrammingLanguage(models.Model): - project = models.ForeignKey("Project", on_delete=models.CASCADE) - language = models.ForeignKey(ProgrammingLanguage, on_delete=models.CASCADE) - percentage = models.PositiveIntegerField() - - def __str__(self): - return f"{self.project} | {self.language} | {self.percentage}%" - - class HostingPlatform(models.Model): hosting_platform = models.CharField(max_length=100) diff --git a/FOSSDB_web/apps/fossdb/views.py b/FOSSDB_web/apps/fossdb/views.py index 19b6d09..63d4ae2 100644 --- a/FOSSDB_web/apps/fossdb/views.py +++ b/FOSSDB_web/apps/fossdb/views.py @@ -1,8 +1,8 @@ from django.contrib.auth.decorators import login_required, permission_required from django.shortcuts import redirect, render +from programming_language.forms import ProjectProgrammingLanguageFormSet -from .forms import (ProjectForm, ProjectHostingPlatformFormSet, - ProjectProgrammingLanguageFormSet) +from .forms import ProjectForm, ProjectHostingPlatformFormSet from .models import Project diff --git a/FOSSDB_web/apps/programming_language/__init__.py b/FOSSDB_web/apps/programming_language/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/FOSSDB_web/apps/programming_language/admin.py b/FOSSDB_web/apps/programming_language/admin.py new file mode 100644 index 0000000..74324bf --- /dev/null +++ b/FOSSDB_web/apps/programming_language/admin.py @@ -0,0 +1,11 @@ +from django.contrib import admin + +from .models import ProgrammingLanguage, ProjectProgrammingLanguage + + +class ProjectProgrammingLanguageInline(admin.TabularInline): + model = ProjectProgrammingLanguage + extra = 1 + + +admin.site.register(ProgrammingLanguage) diff --git a/FOSSDB_web/apps/programming_language/apps.py b/FOSSDB_web/apps/programming_language/apps.py new file mode 100644 index 0000000..4192b11 --- /dev/null +++ b/FOSSDB_web/apps/programming_language/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class ProgrammingLanguageConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'programming_language' diff --git a/FOSSDB_web/apps/programming_language/forms.py b/FOSSDB_web/apps/programming_language/forms.py new file mode 100644 index 0000000..4cc8775 --- /dev/null +++ b/FOSSDB_web/apps/programming_language/forms.py @@ -0,0 +1,21 @@ +from django import forms +from fossdb.models import Project + +from .models import ProgrammingLanguage, ProjectProgrammingLanguage + + +class ProgrammingLanguageForm(forms.ModelForm): + percentage = forms.IntegerField(min_value=0, max_value=100) + + class Meta: + model = ProgrammingLanguage + fields = ["language", "percentage"] + + +ProjectProgrammingLanguageFormSet = forms.inlineformset_factory( + Project, + ProjectProgrammingLanguage, + form=ProgrammingLanguageForm, + extra=1, + can_delete=True, +) diff --git a/FOSSDB_web/apps/programming_language/migrations/__init__.py b/FOSSDB_web/apps/programming_language/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/FOSSDB_web/apps/programming_language/models.py b/FOSSDB_web/apps/programming_language/models.py new file mode 100644 index 0000000..9a624f1 --- /dev/null +++ b/FOSSDB_web/apps/programming_language/models.py @@ -0,0 +1,17 @@ +from django.db import models + + +class ProgrammingLanguage(models.Model): + language = models.CharField(max_length=100) + + def __str__(self): + return self.language + + +class ProjectProgrammingLanguage(models.Model): + project = models.ForeignKey("Project", on_delete=models.CASCADE) + language = models.ForeignKey(ProgrammingLanguage, on_delete=models.CASCADE) + percentage = models.PositiveIntegerField() + + def __str__(self): + return f"{self.project} | {self.language} | {self.percentage}%" diff --git a/FOSSDB_web/apps/programming_language/tests.py b/FOSSDB_web/apps/programming_language/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/FOSSDB_web/apps/programming_language/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/FOSSDB_web/apps/programming_language/views.py b/FOSSDB_web/apps/programming_language/views.py new file mode 100644 index 0000000..91ea44a --- /dev/null +++ b/FOSSDB_web/apps/programming_language/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here. diff --git a/FOSSDB_web/settings.py b/FOSSDB_web/settings.py index e4d3655..4df1802 100644 --- a/FOSSDB_web/settings.py +++ b/FOSSDB_web/settings.py @@ -38,6 +38,7 @@ ALLOWED_HOSTS = config["ALLOWED_HOSTS"] INSTALLED_APPS = [ "fossdb", "account", + "programming_language", "django.contrib.admin", "django.contrib.auth", "django.contrib.contenttypes", From 816c430f29cc9a482e05101dc8ccc09d3d9a9be7 Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Sat, 8 Apr 2023 13:50:45 +0300 Subject: [PATCH 36/54] Created HostingPlatform app --- FOSSDB_web/apps/hosting_platform/__init__.py | 0 FOSSDB_web/apps/hosting_platform/admin.py | 3 +++ FOSSDB_web/apps/hosting_platform/apps.py | 6 ++++++ FOSSDB_web/apps/hosting_platform/migrations/__init__.py | 0 FOSSDB_web/apps/hosting_platform/models.py | 3 +++ FOSSDB_web/apps/hosting_platform/tests.py | 3 +++ FOSSDB_web/apps/hosting_platform/views.py | 3 +++ FOSSDB_web/settings.py | 1 + 8 files changed, 19 insertions(+) create mode 100644 FOSSDB_web/apps/hosting_platform/__init__.py create mode 100644 FOSSDB_web/apps/hosting_platform/admin.py create mode 100644 FOSSDB_web/apps/hosting_platform/apps.py create mode 100644 FOSSDB_web/apps/hosting_platform/migrations/__init__.py create mode 100644 FOSSDB_web/apps/hosting_platform/models.py create mode 100644 FOSSDB_web/apps/hosting_platform/tests.py create mode 100644 FOSSDB_web/apps/hosting_platform/views.py diff --git a/FOSSDB_web/apps/hosting_platform/__init__.py b/FOSSDB_web/apps/hosting_platform/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/FOSSDB_web/apps/hosting_platform/admin.py b/FOSSDB_web/apps/hosting_platform/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/FOSSDB_web/apps/hosting_platform/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/FOSSDB_web/apps/hosting_platform/apps.py b/FOSSDB_web/apps/hosting_platform/apps.py new file mode 100644 index 0000000..c11d49f --- /dev/null +++ b/FOSSDB_web/apps/hosting_platform/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class HostingPlatformConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'hosting_platform' diff --git a/FOSSDB_web/apps/hosting_platform/migrations/__init__.py b/FOSSDB_web/apps/hosting_platform/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/FOSSDB_web/apps/hosting_platform/models.py b/FOSSDB_web/apps/hosting_platform/models.py new file mode 100644 index 0000000..71a8362 --- /dev/null +++ b/FOSSDB_web/apps/hosting_platform/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/FOSSDB_web/apps/hosting_platform/tests.py b/FOSSDB_web/apps/hosting_platform/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/FOSSDB_web/apps/hosting_platform/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/FOSSDB_web/apps/hosting_platform/views.py b/FOSSDB_web/apps/hosting_platform/views.py new file mode 100644 index 0000000..91ea44a --- /dev/null +++ b/FOSSDB_web/apps/hosting_platform/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here. diff --git a/FOSSDB_web/settings.py b/FOSSDB_web/settings.py index e4d3655..2f033e5 100644 --- a/FOSSDB_web/settings.py +++ b/FOSSDB_web/settings.py @@ -38,6 +38,7 @@ ALLOWED_HOSTS = config["ALLOWED_HOSTS"] INSTALLED_APPS = [ "fossdb", "account", + "hosting_platform", "django.contrib.admin", "django.contrib.auth", "django.contrib.contenttypes", From f28e74912efe05b3d9b8c07e73498d860e0bc05f Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Sat, 8 Apr 2023 13:56:24 +0300 Subject: [PATCH 37/54] Moved HostingPlatform model to separate app --- FOSSDB_web/apps/fossdb/admin.py | 10 ++-------- FOSSDB_web/apps/fossdb/forms.py | 19 +------------------ FOSSDB_web/apps/fossdb/models.py | 17 +---------------- FOSSDB_web/apps/fossdb/views.py | 3 ++- FOSSDB_web/apps/hosting_platform/admin.py | 10 +++++++++- FOSSDB_web/apps/hosting_platform/forms.py | 21 +++++++++++++++++++++ FOSSDB_web/apps/hosting_platform/models.py | 16 +++++++++++++++- 7 files changed, 51 insertions(+), 45 deletions(-) create mode 100644 FOSSDB_web/apps/hosting_platform/forms.py diff --git a/FOSSDB_web/apps/fossdb/admin.py b/FOSSDB_web/apps/fossdb/admin.py index 099f80d..a74ba9e 100644 --- a/FOSSDB_web/apps/fossdb/admin.py +++ b/FOSSDB_web/apps/fossdb/admin.py @@ -1,12 +1,8 @@ from django.contrib import admin +from hosting_platform.admin import ProjectHostingPlatformInline from programming_language.admin import ProjectProgrammingLanguageInline -from .models import HostingPlatform, License, Project, ProjectHostingPlatform - - -class ProjectHostingPlatformInline(admin.TabularInline): - model = ProjectHostingPlatform - extra = 1 +from .models import Project class ProjectAdmin(admin.ModelAdmin): @@ -20,7 +16,5 @@ class ProjectAdmin(admin.ModelAdmin): return " | ".join([i.hosting_platform.hosting_platform for i in object.projecthostingplatform_set.all()]) -admin.site.register(ProgrammingLanguage) -admin.site.register(HostingPlatform) admin.site.register(Project, ProjectAdmin) admin.site.register(Tag) diff --git a/FOSSDB_web/apps/fossdb/forms.py b/FOSSDB_web/apps/fossdb/forms.py index 1dde296..b1f60e2 100644 --- a/FOSSDB_web/apps/fossdb/forms.py +++ b/FOSSDB_web/apps/fossdb/forms.py @@ -1,6 +1,6 @@ from django import forms -from .models import HostingPlatform, Project, ProjectHostingPlatform +from .models import Project class ProjectForm(forms.ModelForm): @@ -20,20 +20,3 @@ class ProjectForm(forms.ModelForm): }), "licenses": forms.CheckboxSelectMultiple(), } - - -class HostingPlatformForm(forms.ModelForm): - url = forms.URLField() - - class Meta: - model = HostingPlatform - fields = ["hosting_platform", "url"] - - -ProjectHostingPlatformFormSet = forms.inlineformset_factory( - Project, - ProjectHostingPlatform, - form=HostingPlatformForm, - extra=1, - can_delete=False -) diff --git a/FOSSDB_web/apps/fossdb/models.py b/FOSSDB_web/apps/fossdb/models.py index bf9a7bd..4700ea9 100644 --- a/FOSSDB_web/apps/fossdb/models.py +++ b/FOSSDB_web/apps/fossdb/models.py @@ -2,28 +2,13 @@ import uuid from django.conf import settings from django.db import models +from hosting_platform.models import HostingPlatform from license.models import License from programming_language.models import ProgrammingLanguage User = settings.AUTH_USER_MODEL -class HostingPlatform(models.Model): - hosting_platform = models.CharField(max_length=100) - - def __str__(self): - return self.hosting_platform - - -class ProjectHostingPlatform(models.Model): - project = models.ForeignKey("Project", on_delete=models.CASCADE) - hosting_platform = models.ForeignKey(HostingPlatform, on_delete=models.CASCADE) - url = models.URLField() - - def __str__(self): - return f"{self.project} | {self.hosting_platform}" - - class Tag(models.Model): name = models.CharField(max_length=100) description = models.TextField(null=True, blank=True) diff --git a/FOSSDB_web/apps/fossdb/views.py b/FOSSDB_web/apps/fossdb/views.py index 63d4ae2..34bb139 100644 --- a/FOSSDB_web/apps/fossdb/views.py +++ b/FOSSDB_web/apps/fossdb/views.py @@ -1,8 +1,9 @@ from django.contrib.auth.decorators import login_required, permission_required from django.shortcuts import redirect, render +from hosting_platform.forms import ProjectHostingPlatformFormSet from programming_language.forms import ProjectProgrammingLanguageFormSet -from .forms import ProjectForm, ProjectHostingPlatformFormSet +from .forms import ProjectForm from .models import Project diff --git a/FOSSDB_web/apps/hosting_platform/admin.py b/FOSSDB_web/apps/hosting_platform/admin.py index 8c38f3f..22ac739 100644 --- a/FOSSDB_web/apps/hosting_platform/admin.py +++ b/FOSSDB_web/apps/hosting_platform/admin.py @@ -1,3 +1,11 @@ from django.contrib import admin -# Register your models here. +from .models import HostingPlatform, ProjectHostingPlatform + + +class ProjectHostingPlatformInline(admin.TabularInline): + model = ProjectHostingPlatform + extra = 1 + + +admin.site.register(HostingPlatform) diff --git a/FOSSDB_web/apps/hosting_platform/forms.py b/FOSSDB_web/apps/hosting_platform/forms.py new file mode 100644 index 0000000..7d39747 --- /dev/null +++ b/FOSSDB_web/apps/hosting_platform/forms.py @@ -0,0 +1,21 @@ +from django import forms +from fossdb.models import Project + +from .models import HostingPlatform, ProjectHostingPlatform + + +class HostingPlatformForm(forms.ModelForm): + url = forms.URLField() + + class Meta: + model = HostingPlatform + fields = ["hosting_platform", "url"] + + +ProjectHostingPlatformFormSet = forms.inlineformset_factory( + Project, + ProjectHostingPlatform, + form=HostingPlatformForm, + extra=1, + can_delete=False +) diff --git a/FOSSDB_web/apps/hosting_platform/models.py b/FOSSDB_web/apps/hosting_platform/models.py index 71a8362..c401aa0 100644 --- a/FOSSDB_web/apps/hosting_platform/models.py +++ b/FOSSDB_web/apps/hosting_platform/models.py @@ -1,3 +1,17 @@ from django.db import models -# Create your models here. + +class HostingPlatform(models.Model): + hosting_platform = models.CharField(max_length=100) + + def __str__(self): + return self.hosting_platform + + +class ProjectHostingPlatform(models.Model): + project = models.ForeignKey("Project", on_delete=models.CASCADE) + hosting_platform = models.ForeignKey(HostingPlatform, on_delete=models.CASCADE) + url = models.URLField() + + def __str__(self): + return f"{self.project} | {self.hosting_platform}" From 311780d2e2d139709f3076f715fd52adf8d9e07a Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Sat, 8 Apr 2023 13:59:22 +0300 Subject: [PATCH 38/54] Created Tag app --- FOSSDB_web/apps/fossdb/admin.py | 1 - FOSSDB_web/apps/tag/__init__.py | 0 FOSSDB_web/apps/tag/admin.py | 3 +++ FOSSDB_web/apps/tag/apps.py | 6 ++++++ FOSSDB_web/apps/tag/migrations/__init__.py | 0 FOSSDB_web/apps/tag/models.py | 3 +++ FOSSDB_web/apps/tag/tests.py | 3 +++ FOSSDB_web/apps/tag/views.py | 3 +++ FOSSDB_web/settings.py | 1 + 9 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 FOSSDB_web/apps/tag/__init__.py create mode 100644 FOSSDB_web/apps/tag/admin.py create mode 100644 FOSSDB_web/apps/tag/apps.py create mode 100644 FOSSDB_web/apps/tag/migrations/__init__.py create mode 100644 FOSSDB_web/apps/tag/models.py create mode 100644 FOSSDB_web/apps/tag/tests.py create mode 100644 FOSSDB_web/apps/tag/views.py diff --git a/FOSSDB_web/apps/fossdb/admin.py b/FOSSDB_web/apps/fossdb/admin.py index a74ba9e..00be6f8 100644 --- a/FOSSDB_web/apps/fossdb/admin.py +++ b/FOSSDB_web/apps/fossdb/admin.py @@ -17,4 +17,3 @@ class ProjectAdmin(admin.ModelAdmin): admin.site.register(Project, ProjectAdmin) -admin.site.register(Tag) diff --git a/FOSSDB_web/apps/tag/__init__.py b/FOSSDB_web/apps/tag/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/FOSSDB_web/apps/tag/admin.py b/FOSSDB_web/apps/tag/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/FOSSDB_web/apps/tag/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/FOSSDB_web/apps/tag/apps.py b/FOSSDB_web/apps/tag/apps.py new file mode 100644 index 0000000..72862e5 --- /dev/null +++ b/FOSSDB_web/apps/tag/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class TagConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'tag' diff --git a/FOSSDB_web/apps/tag/migrations/__init__.py b/FOSSDB_web/apps/tag/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/FOSSDB_web/apps/tag/models.py b/FOSSDB_web/apps/tag/models.py new file mode 100644 index 0000000..71a8362 --- /dev/null +++ b/FOSSDB_web/apps/tag/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/FOSSDB_web/apps/tag/tests.py b/FOSSDB_web/apps/tag/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/FOSSDB_web/apps/tag/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/FOSSDB_web/apps/tag/views.py b/FOSSDB_web/apps/tag/views.py new file mode 100644 index 0000000..91ea44a --- /dev/null +++ b/FOSSDB_web/apps/tag/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here. diff --git a/FOSSDB_web/settings.py b/FOSSDB_web/settings.py index f3438e9..f52db99 100644 --- a/FOSSDB_web/settings.py +++ b/FOSSDB_web/settings.py @@ -41,6 +41,7 @@ INSTALLED_APPS = [ "account", "programming_language", "hosting_platform", + "tag", "django.contrib.admin", "django.contrib.auth", "django.contrib.contenttypes", From 6272b312c236511ea0361385ec993a16d7687c0a Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Sat, 8 Apr 2023 14:01:07 +0300 Subject: [PATCH 39/54] Moved Tag model to separete app --- FOSSDB_web/apps/fossdb/models.py | 8 ++------ FOSSDB_web/apps/tag/admin.py | 4 +++- FOSSDB_web/apps/tag/models.py | 6 +++++- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/FOSSDB_web/apps/fossdb/models.py b/FOSSDB_web/apps/fossdb/models.py index 4700ea9..7ea3a6c 100644 --- a/FOSSDB_web/apps/fossdb/models.py +++ b/FOSSDB_web/apps/fossdb/models.py @@ -6,15 +6,11 @@ from hosting_platform.models import HostingPlatform from license.models import License from programming_language.models import ProgrammingLanguage +from tag.models import Tag + User = settings.AUTH_USER_MODEL -class Tag(models.Model): - name = models.CharField(max_length=100) - description = models.TextField(null=True, blank=True) - icon = models.ImageField(upload_to="types/icons/", null=True, blank=True) - - class Project(models.Model): uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) author = models.ForeignKey(User, on_delete=models.CASCADE) diff --git a/FOSSDB_web/apps/tag/admin.py b/FOSSDB_web/apps/tag/admin.py index 8c38f3f..1fdb041 100644 --- a/FOSSDB_web/apps/tag/admin.py +++ b/FOSSDB_web/apps/tag/admin.py @@ -1,3 +1,5 @@ from django.contrib import admin -# Register your models here. +from .models import Tag + +admin.site.register(Tag) diff --git a/FOSSDB_web/apps/tag/models.py b/FOSSDB_web/apps/tag/models.py index 71a8362..0172969 100644 --- a/FOSSDB_web/apps/tag/models.py +++ b/FOSSDB_web/apps/tag/models.py @@ -1,3 +1,7 @@ from django.db import models -# Create your models here. + +class Tag(models.Model): + name = models.CharField(max_length=100) + description = models.TextField(null=True, blank=True) + icon = models.ImageField(upload_to="types/icons/", null=True, blank=True) From a79a31154a30230e971828f51afa6425f9c8dbf7 Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Sat, 8 Apr 2023 14:04:45 +0300 Subject: [PATCH 40/54] Set default fields --- FOSSDB_web/apps/fossdb/models.py | 5 ++--- FOSSDB_web/apps/license/models.py | 6 +++--- FOSSDB_web/apps/tag/models.py | 2 +- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/FOSSDB_web/apps/fossdb/models.py b/FOSSDB_web/apps/fossdb/models.py index 7ea3a6c..37fddeb 100644 --- a/FOSSDB_web/apps/fossdb/models.py +++ b/FOSSDB_web/apps/fossdb/models.py @@ -5,7 +5,6 @@ from django.db import models from hosting_platform.models import HostingPlatform from license.models import License from programming_language.models import ProgrammingLanguage - from tag.models import Tag User = settings.AUTH_USER_MODEL @@ -14,8 +13,8 @@ User = settings.AUTH_USER_MODEL class Project(models.Model): uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) author = models.ForeignKey(User, on_delete=models.CASCADE) - name = models.CharField(max_length=255, null=False) - description = models.TextField() + name = models.CharField(max_length=255) + description = models.TextField(blank=True, default="") licenses = models.ManyToManyField(License) programming_languages = models.ManyToManyField(ProgrammingLanguage, through="ProjectProgrammingLanguage", related_name="projects") hosting_platform = models.ManyToManyField(HostingPlatform, through="ProjectHostingPlatform", related_name="projects") diff --git a/FOSSDB_web/apps/license/models.py b/FOSSDB_web/apps/license/models.py index 172f707..572a0b4 100644 --- a/FOSSDB_web/apps/license/models.py +++ b/FOSSDB_web/apps/license/models.py @@ -3,9 +3,9 @@ from django.db import models class License(models.Model): short_name = models.CharField(max_length=50) - full_name = models.CharField(max_length=100, null=True, blank=True) - url = models.URLField(null=True, blank=True) - description = models.TextField(null=True, blank=True) + full_name = models.CharField(max_length=100, blank=True, default="") + url = models.URLField(blank=True, default="") + description = models.TextField(blank=True, default="") def __str__(self): return self.short_name diff --git a/FOSSDB_web/apps/tag/models.py b/FOSSDB_web/apps/tag/models.py index 0172969..99ab5f3 100644 --- a/FOSSDB_web/apps/tag/models.py +++ b/FOSSDB_web/apps/tag/models.py @@ -3,5 +3,5 @@ from django.db import models class Tag(models.Model): name = models.CharField(max_length=100) - description = models.TextField(null=True, blank=True) + description = models.TextField(blank=True, default="") icon = models.ImageField(upload_to="types/icons/", null=True, blank=True) From 17ad8a41f811e25a9d633a82ca29f78046cd0cd7 Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Sat, 8 Apr 2023 15:16:34 +0300 Subject: [PATCH 41/54] Moved Project model to separate app --- FOSSDB_web/apps/fossdb/admin.py | 19 ----- FOSSDB_web/apps/fossdb/forms.py | 22 ----- .../{ => fossdb}/hosting_platform/__init__.py | 0 .../{ => fossdb}/hosting_platform/admin.py | 0 .../apps/fossdb/hosting_platform/apps.py | 6 ++ .../apps/fossdb/hosting_platform/forms.py | 11 +++ .../hosting_platform/migrations/__init__.py | 0 .../{ => fossdb}/hosting_platform/models.py | 0 .../{ => fossdb}/hosting_platform/tests.py | 0 .../{ => fossdb}/hosting_platform/views.py | 0 .../apps/{ => fossdb}/license/__init__.py | 0 FOSSDB_web/apps/{ => fossdb}/license/admin.py | 0 FOSSDB_web/apps/fossdb/license/apps.py | 6 ++ FOSSDB_web/apps/{ => fossdb}/license/forms.py | 0 .../license/migrations/__init__.py | 0 .../apps/{ => fossdb}/license/models.py | 0 FOSSDB_web/apps/{ => fossdb}/license/tests.py | 0 FOSSDB_web/apps/{ => fossdb}/license/views.py | 0 .../apps/fossdb/migrations/0001_initial.py | 85 ------------------- ...2_delete_license_alter_project_licenses.py | 22 ----- .../programming_language/__init__.py | 0 .../programming_language/admin.py | 0 .../apps/fossdb/programming_language/apps.py | 6 ++ .../apps/fossdb/programming_language/forms.py | 11 +++ .../migrations/__init__.py | 0 .../programming_language/models.py | 0 .../programming_language/tests.py | 0 .../programming_language/views.py | 0 .../apps/{tag => fossdb/project}/__init__.py | 0 FOSSDB_web/apps/fossdb/project/admin.py | 20 +++++ FOSSDB_web/apps/fossdb/project/apps.py | 6 ++ FOSSDB_web/apps/fossdb/project/forms.py | 45 ++++++++++ .../project}/migrations/__init__.py | 0 .../apps/fossdb/{ => project}/models.py | 15 ++-- FOSSDB_web/apps/fossdb/project/tests.py | 0 FOSSDB_web/apps/fossdb/project/views.py | 45 ++++++++++ FOSSDB_web/apps/fossdb/tag/__init__.py | 0 FOSSDB_web/apps/{ => fossdb}/tag/admin.py | 0 FOSSDB_web/apps/fossdb/tag/apps.py | 6 ++ .../apps/fossdb/tag/migrations/__init__.py | 0 FOSSDB_web/apps/{ => fossdb}/tag/models.py | 0 FOSSDB_web/apps/{ => fossdb}/tag/tests.py | 0 FOSSDB_web/apps/{ => fossdb}/tag/views.py | 0 FOSSDB_web/apps/fossdb/views.py | 43 +--------- FOSSDB_web/apps/hosting_platform/apps.py | 6 -- FOSSDB_web/apps/hosting_platform/forms.py | 21 ----- FOSSDB_web/apps/license/apps.py | 6 -- .../apps/license/migrations/0001_initial.py | 24 ------ FOSSDB_web/apps/programming_language/apps.py | 6 -- FOSSDB_web/apps/programming_language/forms.py | 21 ----- FOSSDB_web/apps/tag/apps.py | 6 -- FOSSDB_web/settings.py | 11 +-- 52 files changed, 179 insertions(+), 290 deletions(-) delete mode 100644 FOSSDB_web/apps/fossdb/forms.py rename FOSSDB_web/apps/{ => fossdb}/hosting_platform/__init__.py (100%) rename FOSSDB_web/apps/{ => fossdb}/hosting_platform/admin.py (100%) create mode 100644 FOSSDB_web/apps/fossdb/hosting_platform/apps.py create mode 100644 FOSSDB_web/apps/fossdb/hosting_platform/forms.py rename FOSSDB_web/apps/{ => fossdb}/hosting_platform/migrations/__init__.py (100%) rename FOSSDB_web/apps/{ => fossdb}/hosting_platform/models.py (100%) rename FOSSDB_web/apps/{ => fossdb}/hosting_platform/tests.py (100%) rename FOSSDB_web/apps/{ => fossdb}/hosting_platform/views.py (100%) rename FOSSDB_web/apps/{ => fossdb}/license/__init__.py (100%) rename FOSSDB_web/apps/{ => fossdb}/license/admin.py (100%) create mode 100644 FOSSDB_web/apps/fossdb/license/apps.py rename FOSSDB_web/apps/{ => fossdb}/license/forms.py (100%) rename FOSSDB_web/apps/{ => fossdb}/license/migrations/__init__.py (100%) rename FOSSDB_web/apps/{ => fossdb}/license/models.py (100%) rename FOSSDB_web/apps/{ => fossdb}/license/tests.py (100%) rename FOSSDB_web/apps/{ => fossdb}/license/views.py (100%) delete mode 100644 FOSSDB_web/apps/fossdb/migrations/0001_initial.py delete mode 100644 FOSSDB_web/apps/fossdb/migrations/0002_delete_license_alter_project_licenses.py rename FOSSDB_web/apps/{ => fossdb}/programming_language/__init__.py (100%) rename FOSSDB_web/apps/{ => fossdb}/programming_language/admin.py (100%) create mode 100644 FOSSDB_web/apps/fossdb/programming_language/apps.py create mode 100644 FOSSDB_web/apps/fossdb/programming_language/forms.py rename FOSSDB_web/apps/{ => fossdb}/programming_language/migrations/__init__.py (100%) rename FOSSDB_web/apps/{ => fossdb}/programming_language/models.py (100%) rename FOSSDB_web/apps/{ => fossdb}/programming_language/tests.py (100%) rename FOSSDB_web/apps/{ => fossdb}/programming_language/views.py (100%) rename FOSSDB_web/apps/{tag => fossdb/project}/__init__.py (100%) create mode 100644 FOSSDB_web/apps/fossdb/project/admin.py create mode 100644 FOSSDB_web/apps/fossdb/project/apps.py create mode 100644 FOSSDB_web/apps/fossdb/project/forms.py rename FOSSDB_web/apps/{tag => fossdb/project}/migrations/__init__.py (100%) rename FOSSDB_web/apps/fossdb/{ => project}/models.py (67%) create mode 100644 FOSSDB_web/apps/fossdb/project/tests.py create mode 100644 FOSSDB_web/apps/fossdb/project/views.py create mode 100644 FOSSDB_web/apps/fossdb/tag/__init__.py rename FOSSDB_web/apps/{ => fossdb}/tag/admin.py (100%) create mode 100644 FOSSDB_web/apps/fossdb/tag/apps.py create mode 100644 FOSSDB_web/apps/fossdb/tag/migrations/__init__.py rename FOSSDB_web/apps/{ => fossdb}/tag/models.py (100%) rename FOSSDB_web/apps/{ => fossdb}/tag/tests.py (100%) rename FOSSDB_web/apps/{ => fossdb}/tag/views.py (100%) delete mode 100644 FOSSDB_web/apps/hosting_platform/apps.py delete mode 100644 FOSSDB_web/apps/hosting_platform/forms.py delete mode 100644 FOSSDB_web/apps/license/apps.py delete mode 100644 FOSSDB_web/apps/license/migrations/0001_initial.py delete mode 100644 FOSSDB_web/apps/programming_language/apps.py delete mode 100644 FOSSDB_web/apps/programming_language/forms.py delete mode 100644 FOSSDB_web/apps/tag/apps.py diff --git a/FOSSDB_web/apps/fossdb/admin.py b/FOSSDB_web/apps/fossdb/admin.py index 00be6f8..e69de29 100644 --- a/FOSSDB_web/apps/fossdb/admin.py +++ b/FOSSDB_web/apps/fossdb/admin.py @@ -1,19 +0,0 @@ -from django.contrib import admin -from hosting_platform.admin import ProjectHostingPlatformInline -from programming_language.admin import ProjectProgrammingLanguageInline - -from .models import Project - - -class ProjectAdmin(admin.ModelAdmin): - inlines = [ProjectProgrammingLanguageInline, ProjectHostingPlatformInline] - list_display = ("author", "name", "_languages", "_hosting_platform") - - def _languages(self, object): - return " | ".join([i.language.language for i in object.projectprogramminglanguage_set.all()]) - - def _hosting_platform(self, object): - return " | ".join([i.hosting_platform.hosting_platform for i in object.projecthostingplatform_set.all()]) - - -admin.site.register(Project, ProjectAdmin) diff --git a/FOSSDB_web/apps/fossdb/forms.py b/FOSSDB_web/apps/fossdb/forms.py deleted file mode 100644 index b1f60e2..0000000 --- a/FOSSDB_web/apps/fossdb/forms.py +++ /dev/null @@ -1,22 +0,0 @@ -from django import forms - -from .models import Project - - -class ProjectForm(forms.ModelForm): - - class Meta: - model = Project - fields = ["name", "description", "licenses"] - - widgets = { - "name": forms.TextInput(attrs={ - "class": "form-control", - "placeholder": "Project name", - }), - "description": forms.Textarea(attrs={ - "class": "form-control", - "placeholder": "Description", - }), - "licenses": forms.CheckboxSelectMultiple(), - } diff --git a/FOSSDB_web/apps/hosting_platform/__init__.py b/FOSSDB_web/apps/fossdb/hosting_platform/__init__.py similarity index 100% rename from FOSSDB_web/apps/hosting_platform/__init__.py rename to FOSSDB_web/apps/fossdb/hosting_platform/__init__.py diff --git a/FOSSDB_web/apps/hosting_platform/admin.py b/FOSSDB_web/apps/fossdb/hosting_platform/admin.py similarity index 100% rename from FOSSDB_web/apps/hosting_platform/admin.py rename to FOSSDB_web/apps/fossdb/hosting_platform/admin.py diff --git a/FOSSDB_web/apps/fossdb/hosting_platform/apps.py b/FOSSDB_web/apps/fossdb/hosting_platform/apps.py new file mode 100644 index 0000000..e041c8e --- /dev/null +++ b/FOSSDB_web/apps/fossdb/hosting_platform/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class HostingPlatformConfig(AppConfig): + default_auto_field = "django.db.models.BigAutoField" + name = "fossdb.hosting_platform" diff --git a/FOSSDB_web/apps/fossdb/hosting_platform/forms.py b/FOSSDB_web/apps/fossdb/hosting_platform/forms.py new file mode 100644 index 0000000..661213f --- /dev/null +++ b/FOSSDB_web/apps/fossdb/hosting_platform/forms.py @@ -0,0 +1,11 @@ +from django import forms + +from .models import HostingPlatform + + +class HostingPlatformForm(forms.ModelForm): + url = forms.URLField() + + class Meta: + model = HostingPlatform + fields = ["hosting_platform", "url"] diff --git a/FOSSDB_web/apps/hosting_platform/migrations/__init__.py b/FOSSDB_web/apps/fossdb/hosting_platform/migrations/__init__.py similarity index 100% rename from FOSSDB_web/apps/hosting_platform/migrations/__init__.py rename to FOSSDB_web/apps/fossdb/hosting_platform/migrations/__init__.py diff --git a/FOSSDB_web/apps/hosting_platform/models.py b/FOSSDB_web/apps/fossdb/hosting_platform/models.py similarity index 100% rename from FOSSDB_web/apps/hosting_platform/models.py rename to FOSSDB_web/apps/fossdb/hosting_platform/models.py diff --git a/FOSSDB_web/apps/hosting_platform/tests.py b/FOSSDB_web/apps/fossdb/hosting_platform/tests.py similarity index 100% rename from FOSSDB_web/apps/hosting_platform/tests.py rename to FOSSDB_web/apps/fossdb/hosting_platform/tests.py diff --git a/FOSSDB_web/apps/hosting_platform/views.py b/FOSSDB_web/apps/fossdb/hosting_platform/views.py similarity index 100% rename from FOSSDB_web/apps/hosting_platform/views.py rename to FOSSDB_web/apps/fossdb/hosting_platform/views.py diff --git a/FOSSDB_web/apps/license/__init__.py b/FOSSDB_web/apps/fossdb/license/__init__.py similarity index 100% rename from FOSSDB_web/apps/license/__init__.py rename to FOSSDB_web/apps/fossdb/license/__init__.py diff --git a/FOSSDB_web/apps/license/admin.py b/FOSSDB_web/apps/fossdb/license/admin.py similarity index 100% rename from FOSSDB_web/apps/license/admin.py rename to FOSSDB_web/apps/fossdb/license/admin.py diff --git a/FOSSDB_web/apps/fossdb/license/apps.py b/FOSSDB_web/apps/fossdb/license/apps.py new file mode 100644 index 0000000..4e1d259 --- /dev/null +++ b/FOSSDB_web/apps/fossdb/license/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class LicenseConfig(AppConfig): + default_auto_field = "django.db.models.BigAutoField" + name = "fossdb.license" diff --git a/FOSSDB_web/apps/license/forms.py b/FOSSDB_web/apps/fossdb/license/forms.py similarity index 100% rename from FOSSDB_web/apps/license/forms.py rename to FOSSDB_web/apps/fossdb/license/forms.py diff --git a/FOSSDB_web/apps/license/migrations/__init__.py b/FOSSDB_web/apps/fossdb/license/migrations/__init__.py similarity index 100% rename from FOSSDB_web/apps/license/migrations/__init__.py rename to FOSSDB_web/apps/fossdb/license/migrations/__init__.py diff --git a/FOSSDB_web/apps/license/models.py b/FOSSDB_web/apps/fossdb/license/models.py similarity index 100% rename from FOSSDB_web/apps/license/models.py rename to FOSSDB_web/apps/fossdb/license/models.py diff --git a/FOSSDB_web/apps/license/tests.py b/FOSSDB_web/apps/fossdb/license/tests.py similarity index 100% rename from FOSSDB_web/apps/license/tests.py rename to FOSSDB_web/apps/fossdb/license/tests.py diff --git a/FOSSDB_web/apps/license/views.py b/FOSSDB_web/apps/fossdb/license/views.py similarity index 100% rename from FOSSDB_web/apps/license/views.py rename to FOSSDB_web/apps/fossdb/license/views.py diff --git a/FOSSDB_web/apps/fossdb/migrations/0001_initial.py b/FOSSDB_web/apps/fossdb/migrations/0001_initial.py deleted file mode 100644 index d43573f..0000000 --- a/FOSSDB_web/apps/fossdb/migrations/0001_initial.py +++ /dev/null @@ -1,85 +0,0 @@ -# Generated by Django 4.1.7 on 2023-04-07 23:05 - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion -import uuid - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ] - - operations = [ - migrations.CreateModel( - name='HostingPlatform', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('hosting_platform', models.CharField(max_length=100)), - ], - ), - migrations.CreateModel( - name='License', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('short_name', models.CharField(max_length=50)), - ('full_name', models.CharField(blank=True, max_length=100, null=True)), - ('url', models.URLField(blank=True, null=True)), - ('description', models.TextField(blank=True, null=True)), - ], - ), - migrations.CreateModel( - name='ProgrammingLanguage', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('language', models.CharField(max_length=100)), - ], - ), - migrations.CreateModel( - name='Project', - fields=[ - ('uuid', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), - ('name', models.CharField(max_length=255)), - ('description', models.TextField()), - ('date_created', models.DateTimeField(auto_now_add=True)), - ('author', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), - ], - ), - migrations.CreateModel( - name='ProjectProgrammingLanguage', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('percentage', models.PositiveIntegerField()), - ('language', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='fossdb.programminglanguage')), - ('project', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='fossdb.project')), - ], - ), - migrations.CreateModel( - name='ProjectHostingPlatform', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('url', models.URLField()), - ('hosting_platform', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='fossdb.hostingplatform')), - ('project', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='fossdb.project')), - ], - ), - migrations.AddField( - model_name='project', - name='hosting_platform', - field=models.ManyToManyField(related_name='projects', through='fossdb.ProjectHostingPlatform', to='fossdb.hostingplatform'), - ), - migrations.AddField( - model_name='project', - name='licenses', - field=models.ManyToManyField(to='fossdb.license'), - ), - migrations.AddField( - model_name='project', - name='programming_languages', - field=models.ManyToManyField(related_name='projects', through='fossdb.ProjectProgrammingLanguage', to='fossdb.programminglanguage'), - ), - ] diff --git a/FOSSDB_web/apps/fossdb/migrations/0002_delete_license_alter_project_licenses.py b/FOSSDB_web/apps/fossdb/migrations/0002_delete_license_alter_project_licenses.py deleted file mode 100644 index 0244548..0000000 --- a/FOSSDB_web/apps/fossdb/migrations/0002_delete_license_alter_project_licenses.py +++ /dev/null @@ -1,22 +0,0 @@ -# Generated by Django 4.1.7 on 2023-04-08 10:14 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('license', '0001_initial'), - ('fossdb', '0001_initial'), - ] - - operations = [ - migrations.DeleteModel( - name='License', - ), - migrations.AlterField( - model_name='project', - name='licenses', - field=models.ManyToManyField(to='license.license'), - ), - ] diff --git a/FOSSDB_web/apps/programming_language/__init__.py b/FOSSDB_web/apps/fossdb/programming_language/__init__.py similarity index 100% rename from FOSSDB_web/apps/programming_language/__init__.py rename to FOSSDB_web/apps/fossdb/programming_language/__init__.py diff --git a/FOSSDB_web/apps/programming_language/admin.py b/FOSSDB_web/apps/fossdb/programming_language/admin.py similarity index 100% rename from FOSSDB_web/apps/programming_language/admin.py rename to FOSSDB_web/apps/fossdb/programming_language/admin.py diff --git a/FOSSDB_web/apps/fossdb/programming_language/apps.py b/FOSSDB_web/apps/fossdb/programming_language/apps.py new file mode 100644 index 0000000..a460465 --- /dev/null +++ b/FOSSDB_web/apps/fossdb/programming_language/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class ProgrammingLanguageConfig(AppConfig): + default_auto_field = "django.db.models.BigAutoField" + name = "fossdb.programming_language" diff --git a/FOSSDB_web/apps/fossdb/programming_language/forms.py b/FOSSDB_web/apps/fossdb/programming_language/forms.py new file mode 100644 index 0000000..4478a51 --- /dev/null +++ b/FOSSDB_web/apps/fossdb/programming_language/forms.py @@ -0,0 +1,11 @@ +from django import forms + +from .models import ProgrammingLanguage + + +class ProgrammingLanguageForm(forms.ModelForm): + percentage = forms.IntegerField(min_value=0, max_value=100) + + class Meta: + model = ProgrammingLanguage + fields = ["language", "percentage"] diff --git a/FOSSDB_web/apps/programming_language/migrations/__init__.py b/FOSSDB_web/apps/fossdb/programming_language/migrations/__init__.py similarity index 100% rename from FOSSDB_web/apps/programming_language/migrations/__init__.py rename to FOSSDB_web/apps/fossdb/programming_language/migrations/__init__.py diff --git a/FOSSDB_web/apps/programming_language/models.py b/FOSSDB_web/apps/fossdb/programming_language/models.py similarity index 100% rename from FOSSDB_web/apps/programming_language/models.py rename to FOSSDB_web/apps/fossdb/programming_language/models.py diff --git a/FOSSDB_web/apps/programming_language/tests.py b/FOSSDB_web/apps/fossdb/programming_language/tests.py similarity index 100% rename from FOSSDB_web/apps/programming_language/tests.py rename to FOSSDB_web/apps/fossdb/programming_language/tests.py diff --git a/FOSSDB_web/apps/programming_language/views.py b/FOSSDB_web/apps/fossdb/programming_language/views.py similarity index 100% rename from FOSSDB_web/apps/programming_language/views.py rename to FOSSDB_web/apps/fossdb/programming_language/views.py diff --git a/FOSSDB_web/apps/tag/__init__.py b/FOSSDB_web/apps/fossdb/project/__init__.py similarity index 100% rename from FOSSDB_web/apps/tag/__init__.py rename to FOSSDB_web/apps/fossdb/project/__init__.py diff --git a/FOSSDB_web/apps/fossdb/project/admin.py b/FOSSDB_web/apps/fossdb/project/admin.py new file mode 100644 index 0000000..936ecd6 --- /dev/null +++ b/FOSSDB_web/apps/fossdb/project/admin.py @@ -0,0 +1,20 @@ +from django.contrib import admin + +from fossdb.hosting_platform.admin import ProjectHostingPlatformInline +from fossdb.programming_language.admin import ProjectProgrammingLanguageInline + +from .models import Project + + +class ProjectAdmin(admin.ModelAdmin): + inlines = [ProjectProgrammingLanguageInline, ProjectHostingPlatformInline] + list_display = ("author", "name", "_languages", "_hosting_platform") + + def _languages(self, object): + return " | ".join([i.language.language for i in object.projectprogramminglanguage_set.all()]) + + def _hosting_platform(self, object): + return " | ".join([i.hosting_platform.hosting_platform for i in object.projecthostingplatform_set.all()]) + + +admin.site.register(Project, ProjectAdmin) diff --git a/FOSSDB_web/apps/fossdb/project/apps.py b/FOSSDB_web/apps/fossdb/project/apps.py new file mode 100644 index 0000000..a8017ec --- /dev/null +++ b/FOSSDB_web/apps/fossdb/project/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class ProjectConfig(AppConfig): + default_auto_field = "django.db.models.BigAutoField" + name = "fossdb.project" diff --git a/FOSSDB_web/apps/fossdb/project/forms.py b/FOSSDB_web/apps/fossdb/project/forms.py new file mode 100644 index 0000000..26bd551 --- /dev/null +++ b/FOSSDB_web/apps/fossdb/project/forms.py @@ -0,0 +1,45 @@ +from django import forms + +from fossdb.hosting_platform.forms import HostingPlatformForm +from fossdb.hosting_platform.models import ProjectHostingPlatform +from fossdb.programming_language.forms import ProgrammingLanguageForm +from fossdb.programming_language.models import ProjectProgrammingLanguage + +from .models import Project + + +class ProjectForm(forms.ModelForm): + + class Meta: + model = Project + fields = ["name", "description", "licenses"] + + widgets = { + "name": forms.TextInput(attrs={ + "class": "form-control", + "placeholder": "Project name", + }), + "description": forms.Textarea(attrs={ + "class": "form-control", + "placeholder": "Description", + }), + "licenses": forms.CheckboxSelectMultiple(), + } + + +ProjectHostingPlatformFormSet = forms.inlineformset_factory( + Project, + ProjectHostingPlatform, + form=HostingPlatformForm, + extra=1, + can_delete=False +) + + +ProjectProgrammingLanguageFormSet = forms.inlineformset_factory( + Project, + ProjectProgrammingLanguage, + form=ProgrammingLanguageForm, + extra=1, + can_delete=True, +) diff --git a/FOSSDB_web/apps/tag/migrations/__init__.py b/FOSSDB_web/apps/fossdb/project/migrations/__init__.py similarity index 100% rename from FOSSDB_web/apps/tag/migrations/__init__.py rename to FOSSDB_web/apps/fossdb/project/migrations/__init__.py diff --git a/FOSSDB_web/apps/fossdb/models.py b/FOSSDB_web/apps/fossdb/project/models.py similarity index 67% rename from FOSSDB_web/apps/fossdb/models.py rename to FOSSDB_web/apps/fossdb/project/models.py index 37fddeb..37dd50e 100644 --- a/FOSSDB_web/apps/fossdb/models.py +++ b/FOSSDB_web/apps/fossdb/project/models.py @@ -2,10 +2,13 @@ import uuid from django.conf import settings from django.db import models -from hosting_platform.models import HostingPlatform -from license.models import License -from programming_language.models import ProgrammingLanguage -from tag.models import Tag + +from fossdb.hosting_platform.models import (HostingPlatform, + ProjectHostingPlatform) +from fossdb.license.models import License +from fossdb.programming_language.models import (ProgrammingLanguage, + ProjectProgrammingLanguage) +from fossdb.tag.models import Tag User = settings.AUTH_USER_MODEL @@ -16,8 +19,8 @@ class Project(models.Model): name = models.CharField(max_length=255) description = models.TextField(blank=True, default="") licenses = models.ManyToManyField(License) - programming_languages = models.ManyToManyField(ProgrammingLanguage, through="ProjectProgrammingLanguage", related_name="projects") - hosting_platform = models.ManyToManyField(HostingPlatform, through="ProjectHostingPlatform", related_name="projects") + programming_languages = models.ManyToManyField(ProgrammingLanguage, through=ProjectProgrammingLanguage, related_name="projects") + hosting_platform = models.ManyToManyField(HostingPlatform, through=ProjectHostingPlatform, related_name="projects") project_type = models.ForeignKey(Tag, on_delete=models.CASCADE, blank=True, null=True) date_created = models.DateTimeField(auto_now_add=True) diff --git a/FOSSDB_web/apps/fossdb/project/tests.py b/FOSSDB_web/apps/fossdb/project/tests.py new file mode 100644 index 0000000..e69de29 diff --git a/FOSSDB_web/apps/fossdb/project/views.py b/FOSSDB_web/apps/fossdb/project/views.py new file mode 100644 index 0000000..11b33e6 --- /dev/null +++ b/FOSSDB_web/apps/fossdb/project/views.py @@ -0,0 +1,45 @@ + +from django.contrib.auth.decorators import login_required, permission_required +from django.shortcuts import redirect, render + +from .forms import (ProjectForm, ProjectHostingPlatformFormSet, + ProjectProgrammingLanguageFormSet) +from .models import Project + +# from fossdb.hosting_platform.forms import ProjectHostingPlatformFormSet +# from fossdb.programming_language.forms import ProjectProgrammingLanguageFormSet + + +@login_required(login_url="login/") +@permission_required("fossdb.add_post", login_url="login/", raise_exception=True) +def add_project(request): + if request.method == "POST": + project_form = ProjectForm(request.POST) + language_formset = ProjectProgrammingLanguageFormSet(request.POST, instance=Project()) + host_formset = ProjectHostingPlatformFormSet(request.POST, instance=Project()) + + if project_form.is_valid() and language_formset.is_valid() and host_formset.is_valid(): + project = project_form.save(commit=False) + project.author = request.user + project.save() + + language_formset.instance = project + language_formset.save() + + host_formset.instance = project + host_formset.save() + + project_form.save_m2m() + return redirect("/") + else: + project_form = ProjectForm() + language_formset = ProjectProgrammingLanguageFormSet() + host_formset = ProjectHostingPlatformFormSet() + + context = { + "title": "Add project", + "project_form": project_form, + "language_formset": language_formset, + "host_formset": host_formset, + } + return render(request, "fossdb/add_project.html", context) diff --git a/FOSSDB_web/apps/fossdb/tag/__init__.py b/FOSSDB_web/apps/fossdb/tag/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/FOSSDB_web/apps/tag/admin.py b/FOSSDB_web/apps/fossdb/tag/admin.py similarity index 100% rename from FOSSDB_web/apps/tag/admin.py rename to FOSSDB_web/apps/fossdb/tag/admin.py diff --git a/FOSSDB_web/apps/fossdb/tag/apps.py b/FOSSDB_web/apps/fossdb/tag/apps.py new file mode 100644 index 0000000..5ce961f --- /dev/null +++ b/FOSSDB_web/apps/fossdb/tag/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class TagConfig(AppConfig): + default_auto_field = "django.db.models.BigAutoField" + name = "fossdb.tag" diff --git a/FOSSDB_web/apps/fossdb/tag/migrations/__init__.py b/FOSSDB_web/apps/fossdb/tag/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/FOSSDB_web/apps/tag/models.py b/FOSSDB_web/apps/fossdb/tag/models.py similarity index 100% rename from FOSSDB_web/apps/tag/models.py rename to FOSSDB_web/apps/fossdb/tag/models.py diff --git a/FOSSDB_web/apps/tag/tests.py b/FOSSDB_web/apps/fossdb/tag/tests.py similarity index 100% rename from FOSSDB_web/apps/tag/tests.py rename to FOSSDB_web/apps/fossdb/tag/tests.py diff --git a/FOSSDB_web/apps/tag/views.py b/FOSSDB_web/apps/fossdb/tag/views.py similarity index 100% rename from FOSSDB_web/apps/tag/views.py rename to FOSSDB_web/apps/fossdb/tag/views.py diff --git a/FOSSDB_web/apps/fossdb/views.py b/FOSSDB_web/apps/fossdb/views.py index 34bb139..0759545 100644 --- a/FOSSDB_web/apps/fossdb/views.py +++ b/FOSSDB_web/apps/fossdb/views.py @@ -1,10 +1,6 @@ -from django.contrib.auth.decorators import login_required, permission_required -from django.shortcuts import redirect, render -from hosting_platform.forms import ProjectHostingPlatformFormSet -from programming_language.forms import ProjectProgrammingLanguageFormSet +from django.shortcuts import render -from .forms import ProjectForm -from .models import Project +from fossdb.models import Project def index(request): @@ -13,38 +9,3 @@ def index(request): "projects": Project.objects.all(), } return render(request, "fossdb/index.html", context) - - -@login_required(login_url="login/") -@permission_required("fossdb.add_post", login_url="login/", raise_exception=True) -def add_project(request): - if request.method == "POST": - project_form = ProjectForm(request.POST) - language_formset = ProjectProgrammingLanguageFormSet(request.POST, instance=Project()) - host_formset = ProjectHostingPlatformFormSet(request.POST, instance=Project()) - - if project_form.is_valid() and language_formset.is_valid() and host_formset.is_valid(): - project = project_form.save(commit=False) - project.author = request.user - project.save() - - language_formset.instance = project - language_formset.save() - - host_formset.instance = project - host_formset.save() - - project_form.save_m2m() - return redirect("/") - else: - project_form = ProjectForm() - language_formset = ProjectProgrammingLanguageFormSet() - host_formset = ProjectHostingPlatformFormSet() - - context = { - "title": "Add project", - "project_form": project_form, - "language_formset": language_formset, - "host_formset": host_formset, - } - return render(request, "fossdb/add_project.html", context) diff --git a/FOSSDB_web/apps/hosting_platform/apps.py b/FOSSDB_web/apps/hosting_platform/apps.py deleted file mode 100644 index c11d49f..0000000 --- a/FOSSDB_web/apps/hosting_platform/apps.py +++ /dev/null @@ -1,6 +0,0 @@ -from django.apps import AppConfig - - -class HostingPlatformConfig(AppConfig): - default_auto_field = 'django.db.models.BigAutoField' - name = 'hosting_platform' diff --git a/FOSSDB_web/apps/hosting_platform/forms.py b/FOSSDB_web/apps/hosting_platform/forms.py deleted file mode 100644 index 7d39747..0000000 --- a/FOSSDB_web/apps/hosting_platform/forms.py +++ /dev/null @@ -1,21 +0,0 @@ -from django import forms -from fossdb.models import Project - -from .models import HostingPlatform, ProjectHostingPlatform - - -class HostingPlatformForm(forms.ModelForm): - url = forms.URLField() - - class Meta: - model = HostingPlatform - fields = ["hosting_platform", "url"] - - -ProjectHostingPlatformFormSet = forms.inlineformset_factory( - Project, - ProjectHostingPlatform, - form=HostingPlatformForm, - extra=1, - can_delete=False -) diff --git a/FOSSDB_web/apps/license/apps.py b/FOSSDB_web/apps/license/apps.py deleted file mode 100644 index af50348..0000000 --- a/FOSSDB_web/apps/license/apps.py +++ /dev/null @@ -1,6 +0,0 @@ -from django.apps import AppConfig - - -class LicenseConfig(AppConfig): - default_auto_field = 'django.db.models.BigAutoField' - name = 'license' diff --git a/FOSSDB_web/apps/license/migrations/0001_initial.py b/FOSSDB_web/apps/license/migrations/0001_initial.py deleted file mode 100644 index 26024b3..0000000 --- a/FOSSDB_web/apps/license/migrations/0001_initial.py +++ /dev/null @@ -1,24 +0,0 @@ -# Generated by Django 4.1.7 on 2023-04-08 10:14 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - ] - - operations = [ - migrations.CreateModel( - name='License', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('short_name', models.CharField(max_length=50)), - ('full_name', models.CharField(blank=True, max_length=100, null=True)), - ('url', models.URLField(blank=True, null=True)), - ('description', models.TextField(blank=True, null=True)), - ], - ), - ] diff --git a/FOSSDB_web/apps/programming_language/apps.py b/FOSSDB_web/apps/programming_language/apps.py deleted file mode 100644 index 4192b11..0000000 --- a/FOSSDB_web/apps/programming_language/apps.py +++ /dev/null @@ -1,6 +0,0 @@ -from django.apps import AppConfig - - -class ProgrammingLanguageConfig(AppConfig): - default_auto_field = 'django.db.models.BigAutoField' - name = 'programming_language' diff --git a/FOSSDB_web/apps/programming_language/forms.py b/FOSSDB_web/apps/programming_language/forms.py deleted file mode 100644 index 4cc8775..0000000 --- a/FOSSDB_web/apps/programming_language/forms.py +++ /dev/null @@ -1,21 +0,0 @@ -from django import forms -from fossdb.models import Project - -from .models import ProgrammingLanguage, ProjectProgrammingLanguage - - -class ProgrammingLanguageForm(forms.ModelForm): - percentage = forms.IntegerField(min_value=0, max_value=100) - - class Meta: - model = ProgrammingLanguage - fields = ["language", "percentage"] - - -ProjectProgrammingLanguageFormSet = forms.inlineformset_factory( - Project, - ProjectProgrammingLanguage, - form=ProgrammingLanguageForm, - extra=1, - can_delete=True, -) diff --git a/FOSSDB_web/apps/tag/apps.py b/FOSSDB_web/apps/tag/apps.py deleted file mode 100644 index 72862e5..0000000 --- a/FOSSDB_web/apps/tag/apps.py +++ /dev/null @@ -1,6 +0,0 @@ -from django.apps import AppConfig - - -class TagConfig(AppConfig): - default_auto_field = 'django.db.models.BigAutoField' - name = 'tag' diff --git a/FOSSDB_web/settings.py b/FOSSDB_web/settings.py index f52db99..fa5090e 100644 --- a/FOSSDB_web/settings.py +++ b/FOSSDB_web/settings.py @@ -36,12 +36,13 @@ ALLOWED_HOSTS = config["ALLOWED_HOSTS"] # Application definition INSTALLED_APPS = [ - "fossdb", - "license", "account", - "programming_language", - "hosting_platform", - "tag", + "fossdb", + "fossdb.project", + "fossdb.license", + "fossdb.programming_language", + "fossdb.hosting_platform", + "fossdb.tag", "django.contrib.admin", "django.contrib.auth", "django.contrib.contenttypes", From b4cf26465bbed68488d23fb5c93f0c6b2f044bf7 Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Sat, 8 Apr 2023 15:48:44 +0300 Subject: [PATCH 42/54] Revert changes --- FOSSDB_web/apps/fossdb/admin.py | 32 ++++++ FOSSDB_web/apps/fossdb/{project => }/forms.py | 44 ++++++--- .../apps/fossdb/hosting_platform/__init__.py | 0 .../apps/fossdb/hosting_platform/admin.py | 11 --- .../apps/fossdb/hosting_platform/apps.py | 6 -- .../apps/fossdb/hosting_platform/forms.py | 11 --- .../hosting_platform/migrations/__init__.py | 0 .../apps/fossdb/hosting_platform/models.py | 17 ---- .../apps/fossdb/hosting_platform/tests.py | 3 - .../apps/fossdb/hosting_platform/views.py | 3 - FOSSDB_web/apps/fossdb/license/__init__.py | 0 FOSSDB_web/apps/fossdb/license/admin.py | 5 - FOSSDB_web/apps/fossdb/license/apps.py | 6 -- FOSSDB_web/apps/fossdb/license/forms.py | 9 -- .../fossdb/license/migrations/__init__.py | 0 FOSSDB_web/apps/fossdb/license/models.py | 11 --- FOSSDB_web/apps/fossdb/license/tests.py | 3 - FOSSDB_web/apps/fossdb/license/views.py | 0 .../apps/fossdb/migrations/0001_initial.py | 99 +++++++++++++++++++ FOSSDB_web/apps/fossdb/models.py | 74 ++++++++++++++ .../fossdb/programming_language/__init__.py | 0 .../apps/fossdb/programming_language/admin.py | 11 --- .../apps/fossdb/programming_language/apps.py | 6 -- .../apps/fossdb/programming_language/forms.py | 11 --- .../migrations/__init__.py | 0 .../fossdb/programming_language/models.py | 17 ---- .../apps/fossdb/programming_language/tests.py | 3 - .../apps/fossdb/programming_language/views.py | 3 - FOSSDB_web/apps/fossdb/project/__init__.py | 0 FOSSDB_web/apps/fossdb/project/admin.py | 20 ---- FOSSDB_web/apps/fossdb/project/apps.py | 6 -- .../fossdb/project/migrations/__init__.py | 0 FOSSDB_web/apps/fossdb/project/models.py | 33 ------- FOSSDB_web/apps/fossdb/project/tests.py | 0 FOSSDB_web/apps/fossdb/project/views.py | 45 --------- FOSSDB_web/apps/fossdb/tag/__init__.py | 0 FOSSDB_web/apps/fossdb/tag/admin.py | 5 - FOSSDB_web/apps/fossdb/tag/apps.py | 6 -- .../apps/fossdb/tag/migrations/__init__.py | 0 FOSSDB_web/apps/fossdb/tag/models.py | 7 -- FOSSDB_web/apps/fossdb/tag/tests.py | 3 - FOSSDB_web/apps/fossdb/tag/views.py | 3 - FOSSDB_web/apps/fossdb/views.py | 42 +++++++- FOSSDB_web/settings.py | 5 - 44 files changed, 276 insertions(+), 284 deletions(-) rename FOSSDB_web/apps/fossdb/{project => }/forms.py (57%) delete mode 100644 FOSSDB_web/apps/fossdb/hosting_platform/__init__.py delete mode 100644 FOSSDB_web/apps/fossdb/hosting_platform/admin.py delete mode 100644 FOSSDB_web/apps/fossdb/hosting_platform/apps.py delete mode 100644 FOSSDB_web/apps/fossdb/hosting_platform/forms.py delete mode 100644 FOSSDB_web/apps/fossdb/hosting_platform/migrations/__init__.py delete mode 100644 FOSSDB_web/apps/fossdb/hosting_platform/models.py delete mode 100644 FOSSDB_web/apps/fossdb/hosting_platform/tests.py delete mode 100644 FOSSDB_web/apps/fossdb/hosting_platform/views.py delete mode 100644 FOSSDB_web/apps/fossdb/license/__init__.py delete mode 100644 FOSSDB_web/apps/fossdb/license/admin.py delete mode 100644 FOSSDB_web/apps/fossdb/license/apps.py delete mode 100644 FOSSDB_web/apps/fossdb/license/forms.py delete mode 100644 FOSSDB_web/apps/fossdb/license/migrations/__init__.py delete mode 100644 FOSSDB_web/apps/fossdb/license/models.py delete mode 100644 FOSSDB_web/apps/fossdb/license/tests.py delete mode 100644 FOSSDB_web/apps/fossdb/license/views.py create mode 100644 FOSSDB_web/apps/fossdb/migrations/0001_initial.py create mode 100644 FOSSDB_web/apps/fossdb/models.py delete mode 100644 FOSSDB_web/apps/fossdb/programming_language/__init__.py delete mode 100644 FOSSDB_web/apps/fossdb/programming_language/admin.py delete mode 100644 FOSSDB_web/apps/fossdb/programming_language/apps.py delete mode 100644 FOSSDB_web/apps/fossdb/programming_language/forms.py delete mode 100644 FOSSDB_web/apps/fossdb/programming_language/migrations/__init__.py delete mode 100644 FOSSDB_web/apps/fossdb/programming_language/models.py delete mode 100644 FOSSDB_web/apps/fossdb/programming_language/tests.py delete mode 100644 FOSSDB_web/apps/fossdb/programming_language/views.py delete mode 100644 FOSSDB_web/apps/fossdb/project/__init__.py delete mode 100644 FOSSDB_web/apps/fossdb/project/admin.py delete mode 100644 FOSSDB_web/apps/fossdb/project/apps.py delete mode 100644 FOSSDB_web/apps/fossdb/project/migrations/__init__.py delete mode 100644 FOSSDB_web/apps/fossdb/project/models.py delete mode 100644 FOSSDB_web/apps/fossdb/project/tests.py delete mode 100644 FOSSDB_web/apps/fossdb/project/views.py delete mode 100644 FOSSDB_web/apps/fossdb/tag/__init__.py delete mode 100644 FOSSDB_web/apps/fossdb/tag/admin.py delete mode 100644 FOSSDB_web/apps/fossdb/tag/apps.py delete mode 100644 FOSSDB_web/apps/fossdb/tag/migrations/__init__.py delete mode 100644 FOSSDB_web/apps/fossdb/tag/models.py delete mode 100644 FOSSDB_web/apps/fossdb/tag/tests.py delete mode 100644 FOSSDB_web/apps/fossdb/tag/views.py diff --git a/FOSSDB_web/apps/fossdb/admin.py b/FOSSDB_web/apps/fossdb/admin.py index e69de29..21327ac 100644 --- a/FOSSDB_web/apps/fossdb/admin.py +++ b/FOSSDB_web/apps/fossdb/admin.py @@ -0,0 +1,32 @@ +from django.contrib import admin + +from .models import (HostingPlatform, License, ProgrammingLanguage, Project, + ProjectHostingPlatform, ProjectProgrammingLanguage, Tag) + + +class ProjectProgrammingLanguageInline(admin.TabularInline): + model = ProjectProgrammingLanguage + extra = 1 + + +class ProjectHostingPlatformInline(admin.TabularInline): + model = ProjectHostingPlatform + extra = 1 + + +class ProjectAdmin(admin.ModelAdmin): + inlines = [ProjectProgrammingLanguageInline, ProjectHostingPlatformInline] + list_display = ("author", "name", "_languages", "_hosting_platform") + + def _languages(self, object): + return " | ".join([i.language.language for i in object.projectprogramminglanguage_set.all()]) + + def _hosting_platform(self, object): + return " | ".join([i.hosting_platform.hosting_platform for i in object.projecthostingplatform_set.all()]) + + +admin.site.register(HostingPlatform) +admin.site.register(Project, ProjectAdmin) +admin.site.register(License) +admin.site.register(ProgrammingLanguage) +admin.site.register(Tag) diff --git a/FOSSDB_web/apps/fossdb/project/forms.py b/FOSSDB_web/apps/fossdb/forms.py similarity index 57% rename from FOSSDB_web/apps/fossdb/project/forms.py rename to FOSSDB_web/apps/fossdb/forms.py index 26bd551..9da02f4 100644 --- a/FOSSDB_web/apps/fossdb/project/forms.py +++ b/FOSSDB_web/apps/fossdb/forms.py @@ -1,11 +1,7 @@ from django import forms -from fossdb.hosting_platform.forms import HostingPlatformForm -from fossdb.hosting_platform.models import ProjectHostingPlatform -from fossdb.programming_language.forms import ProgrammingLanguageForm -from fossdb.programming_language.models import ProjectProgrammingLanguage - -from .models import Project +from .models import (HostingPlatform, License, ProgrammingLanguage, Project, + ProjectHostingPlatform, ProjectProgrammingLanguage) class ProjectForm(forms.ModelForm): @@ -27,13 +23,18 @@ class ProjectForm(forms.ModelForm): } -ProjectHostingPlatformFormSet = forms.inlineformset_factory( - Project, - ProjectHostingPlatform, - form=HostingPlatformForm, - extra=1, - can_delete=False -) +class LicenseForm(forms.ModelForm): + class Meta: + model = License + fields = ["short_name", "full_name", "url", "description"] + + +class ProgrammingLanguageForm(forms.ModelForm): + percentage = forms.IntegerField(min_value=0, max_value=100) + + class Meta: + model = ProgrammingLanguage + fields = ["language", "percentage"] ProjectProgrammingLanguageFormSet = forms.inlineformset_factory( @@ -43,3 +44,20 @@ ProjectProgrammingLanguageFormSet = forms.inlineformset_factory( extra=1, can_delete=True, ) + + +class HostingPlatformForm(forms.ModelForm): + url = forms.URLField() + + class Meta: + model = HostingPlatform + fields = ["hosting_platform", "url"] + + +ProjectHostingPlatformFormSet = forms.inlineformset_factory( + Project, + ProjectHostingPlatform, + form=HostingPlatformForm, + extra=1, + can_delete=False +) diff --git a/FOSSDB_web/apps/fossdb/hosting_platform/__init__.py b/FOSSDB_web/apps/fossdb/hosting_platform/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/FOSSDB_web/apps/fossdb/hosting_platform/admin.py b/FOSSDB_web/apps/fossdb/hosting_platform/admin.py deleted file mode 100644 index 22ac739..0000000 --- a/FOSSDB_web/apps/fossdb/hosting_platform/admin.py +++ /dev/null @@ -1,11 +0,0 @@ -from django.contrib import admin - -from .models import HostingPlatform, ProjectHostingPlatform - - -class ProjectHostingPlatformInline(admin.TabularInline): - model = ProjectHostingPlatform - extra = 1 - - -admin.site.register(HostingPlatform) diff --git a/FOSSDB_web/apps/fossdb/hosting_platform/apps.py b/FOSSDB_web/apps/fossdb/hosting_platform/apps.py deleted file mode 100644 index e041c8e..0000000 --- a/FOSSDB_web/apps/fossdb/hosting_platform/apps.py +++ /dev/null @@ -1,6 +0,0 @@ -from django.apps import AppConfig - - -class HostingPlatformConfig(AppConfig): - default_auto_field = "django.db.models.BigAutoField" - name = "fossdb.hosting_platform" diff --git a/FOSSDB_web/apps/fossdb/hosting_platform/forms.py b/FOSSDB_web/apps/fossdb/hosting_platform/forms.py deleted file mode 100644 index 661213f..0000000 --- a/FOSSDB_web/apps/fossdb/hosting_platform/forms.py +++ /dev/null @@ -1,11 +0,0 @@ -from django import forms - -from .models import HostingPlatform - - -class HostingPlatformForm(forms.ModelForm): - url = forms.URLField() - - class Meta: - model = HostingPlatform - fields = ["hosting_platform", "url"] diff --git a/FOSSDB_web/apps/fossdb/hosting_platform/migrations/__init__.py b/FOSSDB_web/apps/fossdb/hosting_platform/migrations/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/FOSSDB_web/apps/fossdb/hosting_platform/models.py b/FOSSDB_web/apps/fossdb/hosting_platform/models.py deleted file mode 100644 index c401aa0..0000000 --- a/FOSSDB_web/apps/fossdb/hosting_platform/models.py +++ /dev/null @@ -1,17 +0,0 @@ -from django.db import models - - -class HostingPlatform(models.Model): - hosting_platform = models.CharField(max_length=100) - - def __str__(self): - return self.hosting_platform - - -class ProjectHostingPlatform(models.Model): - project = models.ForeignKey("Project", on_delete=models.CASCADE) - hosting_platform = models.ForeignKey(HostingPlatform, on_delete=models.CASCADE) - url = models.URLField() - - def __str__(self): - return f"{self.project} | {self.hosting_platform}" diff --git a/FOSSDB_web/apps/fossdb/hosting_platform/tests.py b/FOSSDB_web/apps/fossdb/hosting_platform/tests.py deleted file mode 100644 index 7ce503c..0000000 --- a/FOSSDB_web/apps/fossdb/hosting_platform/tests.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.test import TestCase - -# Create your tests here. diff --git a/FOSSDB_web/apps/fossdb/hosting_platform/views.py b/FOSSDB_web/apps/fossdb/hosting_platform/views.py deleted file mode 100644 index 91ea44a..0000000 --- a/FOSSDB_web/apps/fossdb/hosting_platform/views.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.shortcuts import render - -# Create your views here. diff --git a/FOSSDB_web/apps/fossdb/license/__init__.py b/FOSSDB_web/apps/fossdb/license/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/FOSSDB_web/apps/fossdb/license/admin.py b/FOSSDB_web/apps/fossdb/license/admin.py deleted file mode 100644 index 9908df0..0000000 --- a/FOSSDB_web/apps/fossdb/license/admin.py +++ /dev/null @@ -1,5 +0,0 @@ -from django.contrib import admin - -from .models import License - -admin.site.register(License) diff --git a/FOSSDB_web/apps/fossdb/license/apps.py b/FOSSDB_web/apps/fossdb/license/apps.py deleted file mode 100644 index 4e1d259..0000000 --- a/FOSSDB_web/apps/fossdb/license/apps.py +++ /dev/null @@ -1,6 +0,0 @@ -from django.apps import AppConfig - - -class LicenseConfig(AppConfig): - default_auto_field = "django.db.models.BigAutoField" - name = "fossdb.license" diff --git a/FOSSDB_web/apps/fossdb/license/forms.py b/FOSSDB_web/apps/fossdb/license/forms.py deleted file mode 100644 index 0c180da..0000000 --- a/FOSSDB_web/apps/fossdb/license/forms.py +++ /dev/null @@ -1,9 +0,0 @@ -from django import forms - -from .models import License - - -class LicenseForm(forms.ModelForm): - class Meta: - model = License - fields = ["short_name", "full_name", "url", "description"] diff --git a/FOSSDB_web/apps/fossdb/license/migrations/__init__.py b/FOSSDB_web/apps/fossdb/license/migrations/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/FOSSDB_web/apps/fossdb/license/models.py b/FOSSDB_web/apps/fossdb/license/models.py deleted file mode 100644 index 572a0b4..0000000 --- a/FOSSDB_web/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) - full_name = models.CharField(max_length=100, blank=True, default="") - url = models.URLField(blank=True, default="") - description = models.TextField(blank=True, default="") - - def __str__(self): - return self.short_name diff --git a/FOSSDB_web/apps/fossdb/license/tests.py b/FOSSDB_web/apps/fossdb/license/tests.py deleted file mode 100644 index 7ce503c..0000000 --- a/FOSSDB_web/apps/fossdb/license/tests.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.test import TestCase - -# Create your tests here. diff --git a/FOSSDB_web/apps/fossdb/license/views.py b/FOSSDB_web/apps/fossdb/license/views.py deleted file mode 100644 index e69de29..0000000 diff --git a/FOSSDB_web/apps/fossdb/migrations/0001_initial.py b/FOSSDB_web/apps/fossdb/migrations/0001_initial.py new file mode 100644 index 0000000..33d8a96 --- /dev/null +++ b/FOSSDB_web/apps/fossdb/migrations/0001_initial.py @@ -0,0 +1,99 @@ +# Generated by Django 4.1.7 on 2023-04-08 12:47 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion +import uuid + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='HostingPlatform', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('hosting_platform', models.CharField(max_length=100)), + ], + ), + migrations.CreateModel( + name='License', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('short_name', models.CharField(max_length=50)), + ('full_name', models.CharField(blank=True, default='', max_length=100)), + ('url', models.URLField(blank=True, default='')), + ('description', models.TextField(blank=True, default='')), + ], + ), + migrations.CreateModel( + name='ProgrammingLanguage', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('language', models.CharField(max_length=100)), + ], + ), + migrations.CreateModel( + name='Project', + fields=[ + ('uuid', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), + ('name', models.CharField(max_length=255)), + ('description', models.TextField(blank=True, default='')), + ('date_created', models.DateTimeField(auto_now_add=True)), + ('author', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ], + ), + migrations.CreateModel( + name='Tag', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=100)), + ('description', models.TextField(blank=True, default='')), + ('icon', models.ImageField(blank=True, null=True, upload_to='types/icons/')), + ], + ), + migrations.CreateModel( + name='ProjectProgrammingLanguage', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('percentage', models.PositiveIntegerField()), + ('language', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='fossdb.programminglanguage')), + ('project', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='fossdb.project')), + ], + ), + migrations.CreateModel( + name='ProjectHostingPlatform', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('url', models.URLField()), + ('hosting_platform', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='fossdb.hostingplatform')), + ('project', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='fossdb.project')), + ], + ), + migrations.AddField( + model_name='project', + name='hosting_platform', + field=models.ManyToManyField(related_name='projects', through='fossdb.ProjectHostingPlatform', to='fossdb.hostingplatform'), + ), + migrations.AddField( + model_name='project', + name='licenses', + field=models.ManyToManyField(to='fossdb.license'), + ), + migrations.AddField( + model_name='project', + name='programming_languages', + field=models.ManyToManyField(related_name='projects', through='fossdb.ProjectProgrammingLanguage', to='fossdb.programminglanguage'), + ), + migrations.AddField( + model_name='project', + name='project_type', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='fossdb.tag'), + ), + ] diff --git a/FOSSDB_web/apps/fossdb/models.py b/FOSSDB_web/apps/fossdb/models.py new file mode 100644 index 0000000..e1ae5ea --- /dev/null +++ b/FOSSDB_web/apps/fossdb/models.py @@ -0,0 +1,74 @@ +import uuid + +from django.conf import settings +from django.db import models + +User = settings.AUTH_USER_MODEL + + +class License(models.Model): + short_name = models.CharField(max_length=50) + full_name = models.CharField(max_length=100, blank=True, default="") + url = models.URLField(blank=True, default="") + description = models.TextField(blank=True, default="") + + def __str__(self): + return self.short_name + + +class HostingPlatform(models.Model): + hosting_platform = models.CharField(max_length=100) + + def __str__(self): + return self.hosting_platform + + +class ProgrammingLanguage(models.Model): + language = models.CharField(max_length=100) + + def __str__(self): + return self.language + + +class Tag(models.Model): + name = models.CharField(max_length=100) + description = models.TextField(blank=True, default="") + icon = models.ImageField(upload_to="types/icons/", null=True, blank=True) + + +class ProjectProgrammingLanguage(models.Model): + project = models.ForeignKey("Project", on_delete=models.CASCADE) + language = models.ForeignKey(ProgrammingLanguage, on_delete=models.CASCADE) + percentage = models.PositiveIntegerField() + + def __str__(self): + return f"{self.project} | {self.language} | {self.percentage}%" + + +class ProjectHostingPlatform(models.Model): + project = models.ForeignKey("Project", on_delete=models.CASCADE) + hosting_platform = models.ForeignKey(HostingPlatform, on_delete=models.CASCADE) + url = models.URLField() + + def __str__(self): + return f"{self.project} | {self.hosting_platform}" + + +class Project(models.Model): + uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) + author = models.ForeignKey(User, on_delete=models.CASCADE) + name = models.CharField(max_length=255) + description = models.TextField(blank=True, default="") + licenses = models.ManyToManyField(License) + programming_languages = models.ManyToManyField(ProgrammingLanguage, through="ProjectProgrammingLanguage", related_name="projects") + hosting_platform = models.ManyToManyField(HostingPlatform, through="ProjectHostingPlatform", related_name="projects") + project_type = models.ForeignKey(Tag, on_delete=models.CASCADE, blank=True, null=True) + date_created = models.DateTimeField(auto_now_add=True) + + def save(self, *args, **kwargs): + if not self.uuid: + self.uuid = uuid.uuid5(uuid.NAMESPACE_URL, f"{self.author.username}-{self.name}") + super().save(*args, **kwargs) + + def __str__(self): + return f"{self.author} | {self.name}" diff --git a/FOSSDB_web/apps/fossdb/programming_language/__init__.py b/FOSSDB_web/apps/fossdb/programming_language/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/FOSSDB_web/apps/fossdb/programming_language/admin.py b/FOSSDB_web/apps/fossdb/programming_language/admin.py deleted file mode 100644 index 74324bf..0000000 --- a/FOSSDB_web/apps/fossdb/programming_language/admin.py +++ /dev/null @@ -1,11 +0,0 @@ -from django.contrib import admin - -from .models import ProgrammingLanguage, ProjectProgrammingLanguage - - -class ProjectProgrammingLanguageInline(admin.TabularInline): - model = ProjectProgrammingLanguage - extra = 1 - - -admin.site.register(ProgrammingLanguage) diff --git a/FOSSDB_web/apps/fossdb/programming_language/apps.py b/FOSSDB_web/apps/fossdb/programming_language/apps.py deleted file mode 100644 index a460465..0000000 --- a/FOSSDB_web/apps/fossdb/programming_language/apps.py +++ /dev/null @@ -1,6 +0,0 @@ -from django.apps import AppConfig - - -class ProgrammingLanguageConfig(AppConfig): - default_auto_field = "django.db.models.BigAutoField" - name = "fossdb.programming_language" diff --git a/FOSSDB_web/apps/fossdb/programming_language/forms.py b/FOSSDB_web/apps/fossdb/programming_language/forms.py deleted file mode 100644 index 4478a51..0000000 --- a/FOSSDB_web/apps/fossdb/programming_language/forms.py +++ /dev/null @@ -1,11 +0,0 @@ -from django import forms - -from .models import ProgrammingLanguage - - -class ProgrammingLanguageForm(forms.ModelForm): - percentage = forms.IntegerField(min_value=0, max_value=100) - - class Meta: - model = ProgrammingLanguage - fields = ["language", "percentage"] diff --git a/FOSSDB_web/apps/fossdb/programming_language/migrations/__init__.py b/FOSSDB_web/apps/fossdb/programming_language/migrations/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/FOSSDB_web/apps/fossdb/programming_language/models.py b/FOSSDB_web/apps/fossdb/programming_language/models.py deleted file mode 100644 index 9a624f1..0000000 --- a/FOSSDB_web/apps/fossdb/programming_language/models.py +++ /dev/null @@ -1,17 +0,0 @@ -from django.db import models - - -class ProgrammingLanguage(models.Model): - language = models.CharField(max_length=100) - - def __str__(self): - return self.language - - -class ProjectProgrammingLanguage(models.Model): - project = models.ForeignKey("Project", on_delete=models.CASCADE) - language = models.ForeignKey(ProgrammingLanguage, on_delete=models.CASCADE) - percentage = models.PositiveIntegerField() - - def __str__(self): - return f"{self.project} | {self.language} | {self.percentage}%" diff --git a/FOSSDB_web/apps/fossdb/programming_language/tests.py b/FOSSDB_web/apps/fossdb/programming_language/tests.py deleted file mode 100644 index 7ce503c..0000000 --- a/FOSSDB_web/apps/fossdb/programming_language/tests.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.test import TestCase - -# Create your tests here. diff --git a/FOSSDB_web/apps/fossdb/programming_language/views.py b/FOSSDB_web/apps/fossdb/programming_language/views.py deleted file mode 100644 index 91ea44a..0000000 --- a/FOSSDB_web/apps/fossdb/programming_language/views.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.shortcuts import render - -# Create your views here. diff --git a/FOSSDB_web/apps/fossdb/project/__init__.py b/FOSSDB_web/apps/fossdb/project/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/FOSSDB_web/apps/fossdb/project/admin.py b/FOSSDB_web/apps/fossdb/project/admin.py deleted file mode 100644 index 936ecd6..0000000 --- a/FOSSDB_web/apps/fossdb/project/admin.py +++ /dev/null @@ -1,20 +0,0 @@ -from django.contrib import admin - -from fossdb.hosting_platform.admin import ProjectHostingPlatformInline -from fossdb.programming_language.admin import ProjectProgrammingLanguageInline - -from .models import Project - - -class ProjectAdmin(admin.ModelAdmin): - inlines = [ProjectProgrammingLanguageInline, ProjectHostingPlatformInline] - list_display = ("author", "name", "_languages", "_hosting_platform") - - def _languages(self, object): - return " | ".join([i.language.language for i in object.projectprogramminglanguage_set.all()]) - - def _hosting_platform(self, object): - return " | ".join([i.hosting_platform.hosting_platform for i in object.projecthostingplatform_set.all()]) - - -admin.site.register(Project, ProjectAdmin) diff --git a/FOSSDB_web/apps/fossdb/project/apps.py b/FOSSDB_web/apps/fossdb/project/apps.py deleted file mode 100644 index a8017ec..0000000 --- a/FOSSDB_web/apps/fossdb/project/apps.py +++ /dev/null @@ -1,6 +0,0 @@ -from django.apps import AppConfig - - -class ProjectConfig(AppConfig): - default_auto_field = "django.db.models.BigAutoField" - name = "fossdb.project" diff --git a/FOSSDB_web/apps/fossdb/project/migrations/__init__.py b/FOSSDB_web/apps/fossdb/project/migrations/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/FOSSDB_web/apps/fossdb/project/models.py b/FOSSDB_web/apps/fossdb/project/models.py deleted file mode 100644 index 37dd50e..0000000 --- a/FOSSDB_web/apps/fossdb/project/models.py +++ /dev/null @@ -1,33 +0,0 @@ -import uuid - -from django.conf import settings -from django.db import models - -from fossdb.hosting_platform.models import (HostingPlatform, - ProjectHostingPlatform) -from fossdb.license.models import License -from fossdb.programming_language.models import (ProgrammingLanguage, - ProjectProgrammingLanguage) -from fossdb.tag.models import Tag - -User = settings.AUTH_USER_MODEL - - -class Project(models.Model): - uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) - author = models.ForeignKey(User, on_delete=models.CASCADE) - name = models.CharField(max_length=255) - description = models.TextField(blank=True, default="") - licenses = models.ManyToManyField(License) - programming_languages = models.ManyToManyField(ProgrammingLanguage, through=ProjectProgrammingLanguage, related_name="projects") - hosting_platform = models.ManyToManyField(HostingPlatform, through=ProjectHostingPlatform, related_name="projects") - project_type = models.ForeignKey(Tag, on_delete=models.CASCADE, blank=True, null=True) - date_created = models.DateTimeField(auto_now_add=True) - - def save(self, *args, **kwargs): - if not self.uuid: - self.uuid = uuid.uuid5(uuid.NAMESPACE_URL, f"{self.author.username}-{self.name}") - super().save(*args, **kwargs) - - def __str__(self): - return f"{self.author} | {self.name}" diff --git a/FOSSDB_web/apps/fossdb/project/tests.py b/FOSSDB_web/apps/fossdb/project/tests.py deleted file mode 100644 index e69de29..0000000 diff --git a/FOSSDB_web/apps/fossdb/project/views.py b/FOSSDB_web/apps/fossdb/project/views.py deleted file mode 100644 index 11b33e6..0000000 --- a/FOSSDB_web/apps/fossdb/project/views.py +++ /dev/null @@ -1,45 +0,0 @@ - -from django.contrib.auth.decorators import login_required, permission_required -from django.shortcuts import redirect, render - -from .forms import (ProjectForm, ProjectHostingPlatformFormSet, - ProjectProgrammingLanguageFormSet) -from .models import Project - -# from fossdb.hosting_platform.forms import ProjectHostingPlatformFormSet -# from fossdb.programming_language.forms import ProjectProgrammingLanguageFormSet - - -@login_required(login_url="login/") -@permission_required("fossdb.add_post", login_url="login/", raise_exception=True) -def add_project(request): - if request.method == "POST": - project_form = ProjectForm(request.POST) - language_formset = ProjectProgrammingLanguageFormSet(request.POST, instance=Project()) - host_formset = ProjectHostingPlatformFormSet(request.POST, instance=Project()) - - if project_form.is_valid() and language_formset.is_valid() and host_formset.is_valid(): - project = project_form.save(commit=False) - project.author = request.user - project.save() - - language_formset.instance = project - language_formset.save() - - host_formset.instance = project - host_formset.save() - - project_form.save_m2m() - return redirect("/") - else: - project_form = ProjectForm() - language_formset = ProjectProgrammingLanguageFormSet() - host_formset = ProjectHostingPlatformFormSet() - - context = { - "title": "Add project", - "project_form": project_form, - "language_formset": language_formset, - "host_formset": host_formset, - } - return render(request, "fossdb/add_project.html", context) diff --git a/FOSSDB_web/apps/fossdb/tag/__init__.py b/FOSSDB_web/apps/fossdb/tag/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/FOSSDB_web/apps/fossdb/tag/admin.py b/FOSSDB_web/apps/fossdb/tag/admin.py deleted file mode 100644 index 1fdb041..0000000 --- a/FOSSDB_web/apps/fossdb/tag/admin.py +++ /dev/null @@ -1,5 +0,0 @@ -from django.contrib import admin - -from .models import Tag - -admin.site.register(Tag) diff --git a/FOSSDB_web/apps/fossdb/tag/apps.py b/FOSSDB_web/apps/fossdb/tag/apps.py deleted file mode 100644 index 5ce961f..0000000 --- a/FOSSDB_web/apps/fossdb/tag/apps.py +++ /dev/null @@ -1,6 +0,0 @@ -from django.apps import AppConfig - - -class TagConfig(AppConfig): - default_auto_field = "django.db.models.BigAutoField" - name = "fossdb.tag" diff --git a/FOSSDB_web/apps/fossdb/tag/migrations/__init__.py b/FOSSDB_web/apps/fossdb/tag/migrations/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/FOSSDB_web/apps/fossdb/tag/models.py b/FOSSDB_web/apps/fossdb/tag/models.py deleted file mode 100644 index 99ab5f3..0000000 --- a/FOSSDB_web/apps/fossdb/tag/models.py +++ /dev/null @@ -1,7 +0,0 @@ -from django.db import models - - -class Tag(models.Model): - name = models.CharField(max_length=100) - description = models.TextField(blank=True, default="") - icon = models.ImageField(upload_to="types/icons/", null=True, blank=True) diff --git a/FOSSDB_web/apps/fossdb/tag/tests.py b/FOSSDB_web/apps/fossdb/tag/tests.py deleted file mode 100644 index 7ce503c..0000000 --- a/FOSSDB_web/apps/fossdb/tag/tests.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.test import TestCase - -# Create your tests here. diff --git a/FOSSDB_web/apps/fossdb/tag/views.py b/FOSSDB_web/apps/fossdb/tag/views.py deleted file mode 100644 index 91ea44a..0000000 --- a/FOSSDB_web/apps/fossdb/tag/views.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.shortcuts import render - -# Create your views here. diff --git a/FOSSDB_web/apps/fossdb/views.py b/FOSSDB_web/apps/fossdb/views.py index 0759545..19b6d09 100644 --- a/FOSSDB_web/apps/fossdb/views.py +++ b/FOSSDB_web/apps/fossdb/views.py @@ -1,6 +1,9 @@ -from django.shortcuts import render +from django.contrib.auth.decorators import login_required, permission_required +from django.shortcuts import redirect, render -from fossdb.models import Project +from .forms import (ProjectForm, ProjectHostingPlatformFormSet, + ProjectProgrammingLanguageFormSet) +from .models import Project def index(request): @@ -9,3 +12,38 @@ def index(request): "projects": Project.objects.all(), } return render(request, "fossdb/index.html", context) + + +@login_required(login_url="login/") +@permission_required("fossdb.add_post", login_url="login/", raise_exception=True) +def add_project(request): + if request.method == "POST": + project_form = ProjectForm(request.POST) + language_formset = ProjectProgrammingLanguageFormSet(request.POST, instance=Project()) + host_formset = ProjectHostingPlatformFormSet(request.POST, instance=Project()) + + if project_form.is_valid() and language_formset.is_valid() and host_formset.is_valid(): + project = project_form.save(commit=False) + project.author = request.user + project.save() + + language_formset.instance = project + language_formset.save() + + host_formset.instance = project + host_formset.save() + + project_form.save_m2m() + return redirect("/") + else: + project_form = ProjectForm() + language_formset = ProjectProgrammingLanguageFormSet() + host_formset = ProjectHostingPlatformFormSet() + + context = { + "title": "Add project", + "project_form": project_form, + "language_formset": language_formset, + "host_formset": host_formset, + } + return render(request, "fossdb/add_project.html", context) diff --git a/FOSSDB_web/settings.py b/FOSSDB_web/settings.py index fa5090e..0c10737 100644 --- a/FOSSDB_web/settings.py +++ b/FOSSDB_web/settings.py @@ -38,11 +38,6 @@ ALLOWED_HOSTS = config["ALLOWED_HOSTS"] INSTALLED_APPS = [ "account", "fossdb", - "fossdb.project", - "fossdb.license", - "fossdb.programming_language", - "fossdb.hosting_platform", - "fossdb.tag", "django.contrib.admin", "django.contrib.auth", "django.contrib.contenttypes", From 743035a9b565d924e1dbdb79f2eb99d0c2eedd62 Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Sun, 9 Apr 2023 12:48:20 +0300 Subject: [PATCH 43/54] Fix typos --- FOSSDB_web/apps/fossdb/models.py | 5 ++++- FOSSDB_web/apps/fossdb/views.py | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/FOSSDB_web/apps/fossdb/models.py b/FOSSDB_web/apps/fossdb/models.py index e1ae5ea..0d88e65 100644 --- a/FOSSDB_web/apps/fossdb/models.py +++ b/FOSSDB_web/apps/fossdb/models.py @@ -35,6 +35,9 @@ class Tag(models.Model): description = models.TextField(blank=True, default="") icon = models.ImageField(upload_to="types/icons/", null=True, blank=True) + def __str__(self): + return self.name + class ProjectProgrammingLanguage(models.Model): project = models.ForeignKey("Project", on_delete=models.CASCADE) @@ -62,7 +65,7 @@ class Project(models.Model): licenses = models.ManyToManyField(License) programming_languages = models.ManyToManyField(ProgrammingLanguage, through="ProjectProgrammingLanguage", related_name="projects") hosting_platform = models.ManyToManyField(HostingPlatform, through="ProjectHostingPlatform", related_name="projects") - project_type = models.ForeignKey(Tag, on_delete=models.CASCADE, blank=True, null=True) + tag = models.ManyToManyField(Tag) date_created = models.DateTimeField(auto_now_add=True) def save(self, *args, **kwargs): diff --git a/FOSSDB_web/apps/fossdb/views.py b/FOSSDB_web/apps/fossdb/views.py index 19b6d09..710ee59 100644 --- a/FOSSDB_web/apps/fossdb/views.py +++ b/FOSSDB_web/apps/fossdb/views.py @@ -15,7 +15,7 @@ def index(request): @login_required(login_url="login/") -@permission_required("fossdb.add_post", login_url="login/", raise_exception=True) +@permission_required("fossdb.add_project", login_url="login/", raise_exception=True) def add_project(request): if request.method == "POST": project_form = ProjectForm(request.POST) From fdf883352371543ed3f21e920d9f6fe606756653 Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Sun, 9 Apr 2023 13:20:45 +0300 Subject: [PATCH 44/54] Moved License model to separate folder --- FOSSDB_web/apps/fossdb/admin.py | 3 ++- FOSSDB_web/apps/fossdb/forms.py | 6 ------ FOSSDB_web/apps/fossdb/license/forms.py | 9 +++++++++ FOSSDB_web/apps/fossdb/license/models.py | 11 +++++++++++ FOSSDB_web/apps/fossdb/migrations/0001_initial.py | 6 +++--- FOSSDB_web/apps/fossdb/models.py | 12 ++---------- 6 files changed, 27 insertions(+), 20 deletions(-) create mode 100644 FOSSDB_web/apps/fossdb/license/forms.py create mode 100644 FOSSDB_web/apps/fossdb/license/models.py diff --git a/FOSSDB_web/apps/fossdb/admin.py b/FOSSDB_web/apps/fossdb/admin.py index 21327ac..893dce9 100644 --- a/FOSSDB_web/apps/fossdb/admin.py +++ b/FOSSDB_web/apps/fossdb/admin.py @@ -1,6 +1,7 @@ from django.contrib import admin -from .models import (HostingPlatform, License, ProgrammingLanguage, Project, +from .license.models import License +from .models import (HostingPlatform, ProgrammingLanguage, Project, ProjectHostingPlatform, ProjectProgrammingLanguage, Tag) diff --git a/FOSSDB_web/apps/fossdb/forms.py b/FOSSDB_web/apps/fossdb/forms.py index 9da02f4..1eafc30 100644 --- a/FOSSDB_web/apps/fossdb/forms.py +++ b/FOSSDB_web/apps/fossdb/forms.py @@ -23,12 +23,6 @@ class ProjectForm(forms.ModelForm): } -class LicenseForm(forms.ModelForm): - class Meta: - model = License - fields = ["short_name", "full_name", "url", "description"] - - class ProgrammingLanguageForm(forms.ModelForm): percentage = forms.IntegerField(min_value=0, max_value=100) diff --git a/FOSSDB_web/apps/fossdb/license/forms.py b/FOSSDB_web/apps/fossdb/license/forms.py new file mode 100644 index 0000000..0c180da --- /dev/null +++ b/FOSSDB_web/apps/fossdb/license/forms.py @@ -0,0 +1,9 @@ +from django import forms + +from .models import License + + +class LicenseForm(forms.ModelForm): + class Meta: + model = License + fields = ["short_name", "full_name", "url", "description"] diff --git a/FOSSDB_web/apps/fossdb/license/models.py b/FOSSDB_web/apps/fossdb/license/models.py new file mode 100644 index 0000000..572a0b4 --- /dev/null +++ b/FOSSDB_web/apps/fossdb/license/models.py @@ -0,0 +1,11 @@ +from django.db import models + + +class License(models.Model): + short_name = models.CharField(max_length=50) + full_name = models.CharField(max_length=100, blank=True, default="") + url = models.URLField(blank=True, default="") + description = models.TextField(blank=True, default="") + + def __str__(self): + return self.short_name diff --git a/FOSSDB_web/apps/fossdb/migrations/0001_initial.py b/FOSSDB_web/apps/fossdb/migrations/0001_initial.py index 33d8a96..a142884 100644 --- a/FOSSDB_web/apps/fossdb/migrations/0001_initial.py +++ b/FOSSDB_web/apps/fossdb/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 4.1.7 on 2023-04-08 12:47 +# Generated by Django 4.1.7 on 2023-04-09 10:17 from django.conf import settings from django.db import migrations, models @@ -93,7 +93,7 @@ class Migration(migrations.Migration): ), migrations.AddField( model_name='project', - name='project_type', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='fossdb.tag'), + name='tag', + field=models.ManyToManyField(to='fossdb.tag'), ), ] diff --git a/FOSSDB_web/apps/fossdb/models.py b/FOSSDB_web/apps/fossdb/models.py index 0d88e65..3061570 100644 --- a/FOSSDB_web/apps/fossdb/models.py +++ b/FOSSDB_web/apps/fossdb/models.py @@ -3,19 +3,11 @@ import uuid from django.conf import settings from django.db import models +from .license.models import License + User = settings.AUTH_USER_MODEL -class License(models.Model): - short_name = models.CharField(max_length=50) - full_name = models.CharField(max_length=100, blank=True, default="") - url = models.URLField(blank=True, default="") - description = models.TextField(blank=True, default="") - - def __str__(self): - return self.short_name - - class HostingPlatform(models.Model): hosting_platform = models.CharField(max_length=100) From e0f2e615f3aa4537cad0d597960d0a654d7bd9c7 Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Sun, 9 Apr 2023 13:24:51 +0300 Subject: [PATCH 45/54] Moved ProgrammingLanguage to separate folder --- FOSSDB_web/apps/fossdb/admin.py | 4 ++-- FOSSDB_web/apps/fossdb/forms.py | 20 +------------------- FOSSDB_web/apps/fossdb/language/forms.py | 22 ++++++++++++++++++++++ FOSSDB_web/apps/fossdb/language/models.py | 17 +++++++++++++++++ FOSSDB_web/apps/fossdb/models.py | 17 +---------------- FOSSDB_web/apps/fossdb/views.py | 4 ++-- 6 files changed, 45 insertions(+), 39 deletions(-) create mode 100644 FOSSDB_web/apps/fossdb/language/forms.py create mode 100644 FOSSDB_web/apps/fossdb/language/models.py diff --git a/FOSSDB_web/apps/fossdb/admin.py b/FOSSDB_web/apps/fossdb/admin.py index 893dce9..18dbec5 100644 --- a/FOSSDB_web/apps/fossdb/admin.py +++ b/FOSSDB_web/apps/fossdb/admin.py @@ -1,8 +1,8 @@ from django.contrib import admin +from .language.models import ProgrammingLanguage, ProjectProgrammingLanguage from .license.models import License -from .models import (HostingPlatform, ProgrammingLanguage, Project, - ProjectHostingPlatform, ProjectProgrammingLanguage, Tag) +from .models import HostingPlatform, Project, ProjectHostingPlatform, Tag class ProjectProgrammingLanguageInline(admin.TabularInline): diff --git a/FOSSDB_web/apps/fossdb/forms.py b/FOSSDB_web/apps/fossdb/forms.py index 1eafc30..1dde296 100644 --- a/FOSSDB_web/apps/fossdb/forms.py +++ b/FOSSDB_web/apps/fossdb/forms.py @@ -1,7 +1,6 @@ from django import forms -from .models import (HostingPlatform, License, ProgrammingLanguage, Project, - ProjectHostingPlatform, ProjectProgrammingLanguage) +from .models import HostingPlatform, Project, ProjectHostingPlatform class ProjectForm(forms.ModelForm): @@ -23,23 +22,6 @@ class ProjectForm(forms.ModelForm): } -class ProgrammingLanguageForm(forms.ModelForm): - percentage = forms.IntegerField(min_value=0, max_value=100) - - class Meta: - model = ProgrammingLanguage - fields = ["language", "percentage"] - - -ProjectProgrammingLanguageFormSet = forms.inlineformset_factory( - Project, - ProjectProgrammingLanguage, - form=ProgrammingLanguageForm, - extra=1, - can_delete=True, -) - - class HostingPlatformForm(forms.ModelForm): url = forms.URLField() diff --git a/FOSSDB_web/apps/fossdb/language/forms.py b/FOSSDB_web/apps/fossdb/language/forms.py new file mode 100644 index 0000000..a7cadf3 --- /dev/null +++ b/FOSSDB_web/apps/fossdb/language/forms.py @@ -0,0 +1,22 @@ +from django import forms + +from fossdb.models import Project + +from .models import ProgrammingLanguage, ProjectProgrammingLanguage + + +class ProgrammingLanguageForm(forms.ModelForm): + percentage = forms.IntegerField(min_value=0, max_value=100) + + class Meta: + model = ProgrammingLanguage + fields = ["language", "percentage"] + + +ProjectProgrammingLanguageFormSet = forms.inlineformset_factory( + Project, + ProjectProgrammingLanguage, + form=ProgrammingLanguageForm, + extra=1, + can_delete=True, +) diff --git a/FOSSDB_web/apps/fossdb/language/models.py b/FOSSDB_web/apps/fossdb/language/models.py new file mode 100644 index 0000000..9a624f1 --- /dev/null +++ b/FOSSDB_web/apps/fossdb/language/models.py @@ -0,0 +1,17 @@ +from django.db import models + + +class ProgrammingLanguage(models.Model): + language = models.CharField(max_length=100) + + def __str__(self): + return self.language + + +class ProjectProgrammingLanguage(models.Model): + project = models.ForeignKey("Project", on_delete=models.CASCADE) + language = models.ForeignKey(ProgrammingLanguage, on_delete=models.CASCADE) + percentage = models.PositiveIntegerField() + + def __str__(self): + return f"{self.project} | {self.language} | {self.percentage}%" diff --git a/FOSSDB_web/apps/fossdb/models.py b/FOSSDB_web/apps/fossdb/models.py index 3061570..ff3703a 100644 --- a/FOSSDB_web/apps/fossdb/models.py +++ b/FOSSDB_web/apps/fossdb/models.py @@ -3,6 +3,7 @@ import uuid from django.conf import settings from django.db import models +from .language.models import ProgrammingLanguage from .license.models import License User = settings.AUTH_USER_MODEL @@ -15,13 +16,6 @@ class HostingPlatform(models.Model): return self.hosting_platform -class ProgrammingLanguage(models.Model): - language = models.CharField(max_length=100) - - def __str__(self): - return self.language - - class Tag(models.Model): name = models.CharField(max_length=100) description = models.TextField(blank=True, default="") @@ -31,15 +25,6 @@ class Tag(models.Model): return self.name -class ProjectProgrammingLanguage(models.Model): - project = models.ForeignKey("Project", on_delete=models.CASCADE) - language = models.ForeignKey(ProgrammingLanguage, on_delete=models.CASCADE) - percentage = models.PositiveIntegerField() - - def __str__(self): - return f"{self.project} | {self.language} | {self.percentage}%" - - class ProjectHostingPlatform(models.Model): project = models.ForeignKey("Project", on_delete=models.CASCADE) hosting_platform = models.ForeignKey(HostingPlatform, on_delete=models.CASCADE) diff --git a/FOSSDB_web/apps/fossdb/views.py b/FOSSDB_web/apps/fossdb/views.py index 710ee59..3249af3 100644 --- a/FOSSDB_web/apps/fossdb/views.py +++ b/FOSSDB_web/apps/fossdb/views.py @@ -1,8 +1,8 @@ from django.contrib.auth.decorators import login_required, permission_required from django.shortcuts import redirect, render -from .forms import (ProjectForm, ProjectHostingPlatformFormSet, - ProjectProgrammingLanguageFormSet) +from .forms import ProjectForm, ProjectHostingPlatformFormSet +from .language.forms import ProjectProgrammingLanguageFormSet from .models import Project From 0b0d6539dc7a6c07b9643d4d25b81bc3bed0e859 Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Sun, 9 Apr 2023 13:30:01 +0300 Subject: [PATCH 46/54] Moved HostingPlatform to separate folder --- FOSSDB_web/apps/fossdb/admin.py | 3 ++- FOSSDB_web/apps/fossdb/forms.py | 19 +------------------ FOSSDB_web/apps/fossdb/host/forms.py | 22 ++++++++++++++++++++++ FOSSDB_web/apps/fossdb/host/models.py | 17 +++++++++++++++++ FOSSDB_web/apps/fossdb/models.py | 25 +++---------------------- FOSSDB_web/apps/fossdb/views.py | 3 ++- 6 files changed, 47 insertions(+), 42 deletions(-) create mode 100644 FOSSDB_web/apps/fossdb/host/forms.py create mode 100644 FOSSDB_web/apps/fossdb/host/models.py diff --git a/FOSSDB_web/apps/fossdb/admin.py b/FOSSDB_web/apps/fossdb/admin.py index 18dbec5..6a9f524 100644 --- a/FOSSDB_web/apps/fossdb/admin.py +++ b/FOSSDB_web/apps/fossdb/admin.py @@ -1,8 +1,9 @@ from django.contrib import admin +from .host.models import HostingPlatform, ProjectHostingPlatform from .language.models import ProgrammingLanguage, ProjectProgrammingLanguage from .license.models import License -from .models import HostingPlatform, Project, ProjectHostingPlatform, Tag +from .models import Project, Tag class ProjectProgrammingLanguageInline(admin.TabularInline): diff --git a/FOSSDB_web/apps/fossdb/forms.py b/FOSSDB_web/apps/fossdb/forms.py index 1dde296..b1f60e2 100644 --- a/FOSSDB_web/apps/fossdb/forms.py +++ b/FOSSDB_web/apps/fossdb/forms.py @@ -1,6 +1,6 @@ from django import forms -from .models import HostingPlatform, Project, ProjectHostingPlatform +from .models import Project class ProjectForm(forms.ModelForm): @@ -20,20 +20,3 @@ class ProjectForm(forms.ModelForm): }), "licenses": forms.CheckboxSelectMultiple(), } - - -class HostingPlatformForm(forms.ModelForm): - url = forms.URLField() - - class Meta: - model = HostingPlatform - fields = ["hosting_platform", "url"] - - -ProjectHostingPlatformFormSet = forms.inlineformset_factory( - Project, - ProjectHostingPlatform, - form=HostingPlatformForm, - extra=1, - can_delete=False -) diff --git a/FOSSDB_web/apps/fossdb/host/forms.py b/FOSSDB_web/apps/fossdb/host/forms.py new file mode 100644 index 0000000..5c04a50 --- /dev/null +++ b/FOSSDB_web/apps/fossdb/host/forms.py @@ -0,0 +1,22 @@ +from django import forms + +from fossdb.models import Project + +from .models import HostingPlatform, ProjectHostingPlatform + + +class HostingPlatformForm(forms.ModelForm): + url = forms.URLField() + + class Meta: + model = HostingPlatform + fields = ["hosting_platform", "url"] + + +ProjectHostingPlatformFormSet = forms.inlineformset_factory( + Project, + ProjectHostingPlatform, + form=HostingPlatformForm, + extra=1, + can_delete=False +) diff --git a/FOSSDB_web/apps/fossdb/host/models.py b/FOSSDB_web/apps/fossdb/host/models.py new file mode 100644 index 0000000..c401aa0 --- /dev/null +++ b/FOSSDB_web/apps/fossdb/host/models.py @@ -0,0 +1,17 @@ +from django.db import models + + +class HostingPlatform(models.Model): + hosting_platform = models.CharField(max_length=100) + + def __str__(self): + return self.hosting_platform + + +class ProjectHostingPlatform(models.Model): + project = models.ForeignKey("Project", on_delete=models.CASCADE) + hosting_platform = models.ForeignKey(HostingPlatform, on_delete=models.CASCADE) + url = models.URLField() + + def __str__(self): + return f"{self.project} | {self.hosting_platform}" diff --git a/FOSSDB_web/apps/fossdb/models.py b/FOSSDB_web/apps/fossdb/models.py index ff3703a..3ce4c4d 100644 --- a/FOSSDB_web/apps/fossdb/models.py +++ b/FOSSDB_web/apps/fossdb/models.py @@ -3,19 +3,9 @@ import uuid from django.conf import settings from django.db import models -from .language.models import ProgrammingLanguage -from .license.models import License - User = settings.AUTH_USER_MODEL -class HostingPlatform(models.Model): - hosting_platform = models.CharField(max_length=100) - - def __str__(self): - return self.hosting_platform - - class Tag(models.Model): name = models.CharField(max_length=100) description = models.TextField(blank=True, default="") @@ -25,23 +15,14 @@ class Tag(models.Model): return self.name -class ProjectHostingPlatform(models.Model): - project = models.ForeignKey("Project", on_delete=models.CASCADE) - hosting_platform = models.ForeignKey(HostingPlatform, on_delete=models.CASCADE) - url = models.URLField() - - def __str__(self): - return f"{self.project} | {self.hosting_platform}" - - class Project(models.Model): uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) author = models.ForeignKey(User, on_delete=models.CASCADE) name = models.CharField(max_length=255) description = models.TextField(blank=True, default="") - licenses = models.ManyToManyField(License) - programming_languages = models.ManyToManyField(ProgrammingLanguage, through="ProjectProgrammingLanguage", related_name="projects") - hosting_platform = models.ManyToManyField(HostingPlatform, through="ProjectHostingPlatform", related_name="projects") + licenses = models.ManyToManyField("License") + programming_languages = models.ManyToManyField("ProgrammingLanguage", through="ProjectProgrammingLanguage", related_name="projects") + hosting_platform = models.ManyToManyField("HostingPlatform", through="ProjectHostingPlatform", related_name="projects") tag = models.ManyToManyField(Tag) date_created = models.DateTimeField(auto_now_add=True) diff --git a/FOSSDB_web/apps/fossdb/views.py b/FOSSDB_web/apps/fossdb/views.py index 3249af3..4d76938 100644 --- a/FOSSDB_web/apps/fossdb/views.py +++ b/FOSSDB_web/apps/fossdb/views.py @@ -1,7 +1,8 @@ from django.contrib.auth.decorators import login_required, permission_required from django.shortcuts import redirect, render -from .forms import ProjectForm, ProjectHostingPlatformFormSet +from .forms import ProjectForm +from .host.forms import ProjectHostingPlatformFormSet from .language.forms import ProjectProgrammingLanguageFormSet from .models import Project From a4359a4dc1fb65cce0422fb14ff8ab38db2726a4 Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Sun, 9 Apr 2023 13:31:43 +0300 Subject: [PATCH 47/54] Moved Tag to separate folder --- FOSSDB_web/apps/fossdb/admin.py | 3 ++- FOSSDB_web/apps/fossdb/models.py | 11 +---------- FOSSDB_web/apps/fossdb/tag/models.py | 11 +++++++++++ 3 files changed, 14 insertions(+), 11 deletions(-) create mode 100644 FOSSDB_web/apps/fossdb/tag/models.py diff --git a/FOSSDB_web/apps/fossdb/admin.py b/FOSSDB_web/apps/fossdb/admin.py index 6a9f524..ea74c31 100644 --- a/FOSSDB_web/apps/fossdb/admin.py +++ b/FOSSDB_web/apps/fossdb/admin.py @@ -3,7 +3,8 @@ from django.contrib import admin from .host.models import HostingPlatform, ProjectHostingPlatform from .language.models import ProgrammingLanguage, ProjectProgrammingLanguage from .license.models import License -from .models import Project, Tag +from .models import Project +from .tag.models import Tag class ProjectProgrammingLanguageInline(admin.TabularInline): diff --git a/FOSSDB_web/apps/fossdb/models.py b/FOSSDB_web/apps/fossdb/models.py index 3ce4c4d..5fa0cf2 100644 --- a/FOSSDB_web/apps/fossdb/models.py +++ b/FOSSDB_web/apps/fossdb/models.py @@ -6,15 +6,6 @@ from django.db import models User = settings.AUTH_USER_MODEL -class Tag(models.Model): - name = models.CharField(max_length=100) - description = models.TextField(blank=True, default="") - icon = models.ImageField(upload_to="types/icons/", null=True, blank=True) - - def __str__(self): - return self.name - - class Project(models.Model): uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) author = models.ForeignKey(User, on_delete=models.CASCADE) @@ -23,7 +14,7 @@ class Project(models.Model): licenses = models.ManyToManyField("License") programming_languages = models.ManyToManyField("ProgrammingLanguage", through="ProjectProgrammingLanguage", related_name="projects") hosting_platform = models.ManyToManyField("HostingPlatform", through="ProjectHostingPlatform", related_name="projects") - tag = models.ManyToManyField(Tag) + tag = models.ManyToManyField("Tag") date_created = models.DateTimeField(auto_now_add=True) def save(self, *args, **kwargs): diff --git a/FOSSDB_web/apps/fossdb/tag/models.py b/FOSSDB_web/apps/fossdb/tag/models.py new file mode 100644 index 0000000..10bb71e --- /dev/null +++ b/FOSSDB_web/apps/fossdb/tag/models.py @@ -0,0 +1,11 @@ + +from django.db import models + + +class Tag(models.Model): + name = models.CharField(max_length=100) + description = models.TextField(blank=True, default="") + icon = models.ImageField(upload_to="types/icons/", null=True, blank=True) + + def __str__(self): + return self.name From e74853d89f4900a6b7f2f4fd1c62694e5ba6c3c8 Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Sun, 9 Apr 2023 13:36:41 +0300 Subject: [PATCH 48/54] Created OS model --- .../0002_operatingsystem_project_os.py | 27 +++++++++++++++++++ FOSSDB_web/apps/fossdb/models.py | 15 ++++++++--- .../apps/fossdb/operating_system/models.py | 7 +++++ 3 files changed, 45 insertions(+), 4 deletions(-) create mode 100644 FOSSDB_web/apps/fossdb/migrations/0002_operatingsystem_project_os.py create mode 100644 FOSSDB_web/apps/fossdb/operating_system/models.py diff --git a/FOSSDB_web/apps/fossdb/migrations/0002_operatingsystem_project_os.py b/FOSSDB_web/apps/fossdb/migrations/0002_operatingsystem_project_os.py new file mode 100644 index 0000000..9741c32 --- /dev/null +++ b/FOSSDB_web/apps/fossdb/migrations/0002_operatingsystem_project_os.py @@ -0,0 +1,27 @@ +# Generated by Django 4.1.7 on 2023-04-09 10:35 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('fossdb', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='OperatingSystem', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=100)), + ('description', models.TextField(blank=True, default='')), + ('version', models.CharField(blank=True, max_length=50)), + ], + ), + migrations.AddField( + model_name='project', + name='os', + field=models.ManyToManyField(to='fossdb.operatingsystem'), + ), + ] diff --git a/FOSSDB_web/apps/fossdb/models.py b/FOSSDB_web/apps/fossdb/models.py index 5fa0cf2..59297ad 100644 --- a/FOSSDB_web/apps/fossdb/models.py +++ b/FOSSDB_web/apps/fossdb/models.py @@ -3,6 +3,12 @@ import uuid from django.conf import settings from django.db import models +from .host.models import HostingPlatform +from .language.models import ProgrammingLanguage +from .license.models import License +from .operating_system.models import OperatingSystem +from .tag.models import Tag + User = settings.AUTH_USER_MODEL @@ -11,10 +17,11 @@ class Project(models.Model): author = models.ForeignKey(User, on_delete=models.CASCADE) name = models.CharField(max_length=255) description = models.TextField(blank=True, default="") - licenses = models.ManyToManyField("License") - programming_languages = models.ManyToManyField("ProgrammingLanguage", through="ProjectProgrammingLanguage", related_name="projects") - hosting_platform = models.ManyToManyField("HostingPlatform", through="ProjectHostingPlatform", related_name="projects") - tag = models.ManyToManyField("Tag") + licenses = models.ManyToManyField(License) + programming_languages = models.ManyToManyField(ProgrammingLanguage, through="ProjectProgrammingLanguage", related_name="projects") + hosting_platform = models.ManyToManyField(HostingPlatform, through="ProjectHostingPlatform", related_name="projects") + tag = models.ManyToManyField(Tag) + os = models.ManyToManyField(OperatingSystem) date_created = models.DateTimeField(auto_now_add=True) def save(self, *args, **kwargs): diff --git a/FOSSDB_web/apps/fossdb/operating_system/models.py b/FOSSDB_web/apps/fossdb/operating_system/models.py new file mode 100644 index 0000000..d638ec8 --- /dev/null +++ b/FOSSDB_web/apps/fossdb/operating_system/models.py @@ -0,0 +1,7 @@ +from django.db import models + + +class OperatingSystem(models.Model): + name = models.CharField(max_length=100) + description = models.TextField(blank=True, default="") + version = models.CharField(max_length=50, blank=True) From 60f252321bad3ee729cbfdf30caa6449f4b0d2f5 Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Sun, 9 Apr 2023 14:06:15 +0300 Subject: [PATCH 49/54] Created Star model --- .../migrations/0003_star_project_star.py | 29 +++++++++++++++++++ FOSSDB_web/apps/fossdb/models.py | 19 ++++++++---- FOSSDB_web/apps/fossdb/star/models.py | 9 ++++++ 3 files changed, 52 insertions(+), 5 deletions(-) create mode 100644 FOSSDB_web/apps/fossdb/migrations/0003_star_project_star.py create mode 100644 FOSSDB_web/apps/fossdb/star/models.py diff --git a/FOSSDB_web/apps/fossdb/migrations/0003_star_project_star.py b/FOSSDB_web/apps/fossdb/migrations/0003_star_project_star.py new file mode 100644 index 0000000..2baf97f --- /dev/null +++ b/FOSSDB_web/apps/fossdb/migrations/0003_star_project_star.py @@ -0,0 +1,29 @@ +# Generated by Django 4.1.7 on 2023-04-09 10:51 + +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', '0002_operatingsystem_project_os'), + ] + + operations = [ + 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, related_name='stars', to='fossdb.project')), + ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ], + ), + migrations.AddField( + model_name='project', + name='star', + field=models.ManyToManyField(related_name='projects_star', to='fossdb.star'), + ), + ] diff --git a/FOSSDB_web/apps/fossdb/models.py b/FOSSDB_web/apps/fossdb/models.py index 59297ad..53d1bd0 100644 --- a/FOSSDB_web/apps/fossdb/models.py +++ b/FOSSDB_web/apps/fossdb/models.py @@ -7,6 +7,7 @@ from .host.models import HostingPlatform from .language.models import ProgrammingLanguage from .license.models import License from .operating_system.models import OperatingSystem +from .star.models import Star from .tag.models import Tag User = settings.AUTH_USER_MODEL @@ -14,7 +15,7 @@ User = settings.AUTH_USER_MODEL class Project(models.Model): uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) - author = models.ForeignKey(User, on_delete=models.CASCADE) + author = models.ForeignKey(User, on_delete=models.CASCADE, db_index=True) name = models.CharField(max_length=255) description = models.TextField(blank=True, default="") licenses = models.ManyToManyField(License) @@ -22,12 +23,20 @@ class Project(models.Model): hosting_platform = models.ManyToManyField(HostingPlatform, through="ProjectHostingPlatform", related_name="projects") tag = models.ManyToManyField(Tag) os = models.ManyToManyField(OperatingSystem) + star = models.ManyToManyField(Star, related_name="projects_star") date_created = models.DateTimeField(auto_now_add=True) - def save(self, *args, **kwargs): - if not self.uuid: - self.uuid = uuid.uuid5(uuid.NAMESPACE_URL, f"{self.author.username}-{self.name}") - super().save(*args, **kwargs) + @property + def star_amount(self): + return self.star.count() + + def get_absolute_url(self): + return f"/{self.author.name}/{self.name}" def __str__(self): return f"{self.author} | {self.name}" + + def save(self, *args, **kwargs): + if not self.uuid: + self.uuid = uuid.uuid3(uuid.uuid4(), f"{self.author.username}-{self.name}") + super().save(*args, **kwargs) diff --git a/FOSSDB_web/apps/fossdb/star/models.py b/FOSSDB_web/apps/fossdb/star/models.py new file mode 100644 index 0000000..74f0452 --- /dev/null +++ b/FOSSDB_web/apps/fossdb/star/models.py @@ -0,0 +1,9 @@ +from django.conf import settings +from django.db import models + +User = settings.AUTH_USER_MODEL + + +class Star(models.Model): + user = models.ForeignKey(User, on_delete=models.CASCADE) + project = models.ForeignKey("Project", on_delete=models.CASCADE, related_name="stars") From c54089238bdc0b76c91f530fc974e3307f22239f Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Sun, 9 Apr 2023 19:34:19 +0300 Subject: [PATCH 50/54] Added Pillow dependency --- requirements.txt | 1 + setup.cfg | 1 + 2 files changed, 2 insertions(+) diff --git a/requirements.txt b/requirements.txt index 4e4add1..c689f93 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,4 @@ Django==4.1.7 +Pillow==9.4.0 fontawesomefree==6.2.1 mysqlclient==2.1.1 diff --git a/setup.cfg b/setup.cfg index 069d76d..3ef6ae0 100644 --- a/setup.cfg +++ b/setup.cfg @@ -12,6 +12,7 @@ classifiers = packages = FOSSDB_web install_requires = Django>=4.1 + Pillow>=9.4.0 fontawesomefree>=6.2.1 mysqlclient>=2.1.1 From 64d9b9c8470f5d8b83464b12bb4d4cfa21d63c7d Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Sun, 9 Apr 2023 19:40:09 +0300 Subject: [PATCH 51/54] Fix typo --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 25fa3fb..8290f4e 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -19,5 +19,5 @@ jobs: run: | python -m pip install --upgrade pip pip install tox tox-gh-actions - - name: Lint with tox + - name: Test with tox run: tox From cf6286d4dd97f0c4071c66d9fe75b5b6e5821f51 Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Sun, 9 Apr 2023 19:45:56 +0300 Subject: [PATCH 52/54] Update `config.json` --- config.json | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/config.json b/config.json index dcaea64..2871971 100644 --- a/config.json +++ b/config.json @@ -1,10 +1,8 @@ { "SECRET_KEY": "", - "ALLOWED_HOSTS": [ - "", - "localhost" - ], + "ALLOWED_HOSTS": [""], "DATABASE": { + "ENGINE": "", "NAME": "", "USER": "", "PASSWORD": "", From 19d13a042745efa9207dd1d66b880fa90210a9b2 Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Sun, 9 Apr 2023 19:49:26 +0300 Subject: [PATCH 53/54] Changed test os --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 8290f4e..549aa1a 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -7,7 +7,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - os: [ubuntu-latest, windows-latest] + os: [debian-latest] python-version: ["3.10"] steps: - uses: actions/checkout@v2 From 3593aab01bc946985de9db21f64c9c551bec036a Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Sun, 9 Apr 2023 19:54:17 +0300 Subject: [PATCH 54/54] Removes windows from automatic testing --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 549aa1a..b1a1554 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -7,7 +7,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - os: [debian-latest] + os: [ubuntu-latest] python-version: ["3.10"] steps: - uses: actions/checkout@v2