language moved to dataclass
This commit is contained in:
parent
c2490b564e
commit
5fd4823740
22
Main/migrations/0074_auto_20211106_1215.py
Normal file
22
Main/migrations/0074_auto_20211106_1215.py
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
# Generated by Django 3.2.4 on 2021-11-06 09:15
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('Main', '0073_auto_20211106_0125'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='solution',
|
||||||
|
name='language',
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='solution',
|
||||||
|
name='language_id',
|
||||||
|
field=models.IntegerField(default=0),
|
||||||
|
),
|
||||||
|
]
|
@ -6,6 +6,5 @@ from Main.models.set import Set
|
|||||||
from Main.models.subscription import Subscription
|
from Main.models.subscription import Subscription
|
||||||
from Main.models.settask import SetTask
|
from Main.models.settask import SetTask
|
||||||
from Main.models.solution import Solution
|
from Main.models.solution import Solution
|
||||||
from Main.models.language import Language
|
|
||||||
from Main.models.extrafile import ExtraFile
|
from Main.models.extrafile import ExtraFile
|
||||||
from Main.models.progress import Progress
|
from Main.models.progress import Progress
|
||||||
|
@ -1,14 +0,0 @@
|
|||||||
from django.db import models
|
|
||||||
|
|
||||||
|
|
||||||
class Language(models.Model):
|
|
||||||
name = models.TextField()
|
|
||||||
work_name = models.TextField(default='')
|
|
||||||
file_type = models.TextField(null=True)
|
|
||||||
logo = models.ImageField(upload_to="logos", null=True)
|
|
||||||
image = models.TextField(default='ubuntu')
|
|
||||||
highlight = models.TextField(default='plaintext')
|
|
||||||
opened = models.BooleanField(default=False)
|
|
||||||
|
|
||||||
def __str__(self):
|
|
||||||
return self.name
|
|
@ -9,17 +9,21 @@ from django.db import models
|
|||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
|
|
||||||
from Main.models.task import Task
|
from Main.models.task import Task
|
||||||
from Main.models.language import Language
|
|
||||||
from Sprint.settings import CONSTS, SOLUTIONS_ROOT, SOLUTIONS_ROOT_EXTERNAL
|
from Sprint.settings import CONSTS, SOLUTIONS_ROOT, SOLUTIONS_ROOT_EXTERNAL
|
||||||
|
from SprintLib.language import languages
|
||||||
|
|
||||||
|
|
||||||
class Solution(models.Model):
|
class Solution(models.Model):
|
||||||
task = models.ForeignKey(Task, on_delete=models.CASCADE)
|
task = models.ForeignKey(Task, on_delete=models.CASCADE)
|
||||||
user = models.ForeignKey(User, on_delete=models.CASCADE)
|
user = models.ForeignKey(User, on_delete=models.CASCADE)
|
||||||
language = models.ForeignKey(Language, on_delete=models.SET_NULL, null=True)
|
language_id = models.IntegerField(default=0)
|
||||||
time_sent = models.DateTimeField(default=timezone.now)
|
time_sent = models.DateTimeField(default=timezone.now)
|
||||||
result = models.TextField(default=CONSTS["in_queue_status"])
|
result = models.TextField(default=CONSTS["in_queue_status"])
|
||||||
|
|
||||||
|
@property
|
||||||
|
def language(self):
|
||||||
|
return languages[self.language_id]
|
||||||
|
|
||||||
def delete(self, using=None, keep_parents=False):
|
def delete(self, using=None, keep_parents=False):
|
||||||
if exists(self.directory):
|
if exists(self.directory):
|
||||||
rmtree(self.directory)
|
rmtree(self.directory)
|
||||||
@ -38,10 +42,15 @@ class Solution(models.Model):
|
|||||||
'text': open(join(path, file), 'r').read()
|
'text': open(join(path, file), 'r').read()
|
||||||
}
|
}
|
||||||
end = file.split('.')[-1]
|
end = file.split('.')[-1]
|
||||||
try:
|
language = None
|
||||||
highlight = 'language-' + Language.objects.get(file_type=end).highlight
|
for l in languages:
|
||||||
except ObjectDoesNotExist:
|
if l.file_type == end:
|
||||||
|
language = l
|
||||||
|
break
|
||||||
|
if language is None:
|
||||||
highlight = 'nohighlight'
|
highlight = 'nohighlight'
|
||||||
|
else:
|
||||||
|
highlight = 'language-' + language.highlight
|
||||||
entity['highlight'] = highlight
|
entity['highlight'] = highlight
|
||||||
data.append(entity)
|
data.append(entity)
|
||||||
except:
|
except:
|
||||||
|
@ -6,5 +6,7 @@ class SolutionView(BaseView):
|
|||||||
required_login = True
|
required_login = True
|
||||||
|
|
||||||
def pre_handle(self):
|
def pre_handle(self):
|
||||||
|
if self.request.user.is_superuser:
|
||||||
|
return
|
||||||
if self.entities.solution.user != self.request.user:
|
if self.entities.solution.user != self.request.user:
|
||||||
raise AccessError()
|
raise AccessError()
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
from zipfile import ZipFile
|
from zipfile import ZipFile
|
||||||
|
|
||||||
from Main.models import Solution
|
from Main.models import Solution
|
||||||
from SprintLib.BaseView import BaseView, Language
|
from SprintLib.BaseView import BaseView
|
||||||
|
from SprintLib.language import languages
|
||||||
from SprintLib.queue import send_testing
|
from SprintLib.queue import send_testing
|
||||||
from SprintLib.testers import *
|
from SprintLib.testers import *
|
||||||
|
|
||||||
@ -11,7 +12,7 @@ class TaskView(BaseView):
|
|||||||
view_file = "task.html"
|
view_file = "task.html"
|
||||||
|
|
||||||
def get(self):
|
def get(self):
|
||||||
self.context['languages'] = Language.objects.filter(opened=True).order_by('name')
|
self.context['languages'] = sorted(languages, key=lambda x: x.name)
|
||||||
progress, _ = Progress.objects.get_or_create(user=self.request.user, task=self.entities.task)
|
progress, _ = Progress.objects.get_or_create(user=self.request.user, task=self.entities.task)
|
||||||
self.context['progress'] = progress
|
self.context['progress'] = progress
|
||||||
|
|
||||||
@ -21,7 +22,7 @@ class TaskView(BaseView):
|
|||||||
self.solution = Solution.objects.create(
|
self.solution = Solution.objects.create(
|
||||||
task=self.entities.task,
|
task=self.entities.task,
|
||||||
user=self.request.user,
|
user=self.request.user,
|
||||||
language_id=self.request.POST["language"]
|
language_id=int(self.request.POST["language"])
|
||||||
)
|
)
|
||||||
self.solution.create_dirs()
|
self.solution.create_dirs()
|
||||||
|
|
||||||
|
37
SprintLib/language.py
Normal file
37
SprintLib/language.py
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
from dataclasses import dataclass
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class Language:
|
||||||
|
id: int
|
||||||
|
name: str
|
||||||
|
work_name: str
|
||||||
|
file_type: str
|
||||||
|
logo_url: str
|
||||||
|
image: str
|
||||||
|
highlight: str
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return self.name
|
||||||
|
|
||||||
|
|
||||||
|
languages = [
|
||||||
|
Language(
|
||||||
|
id=0,
|
||||||
|
name="Python3",
|
||||||
|
work_name="Python3",
|
||||||
|
file_type="py",
|
||||||
|
logo_url="https://entredatos.es/wp-content/uploads/2021/05/1200px-Python-logo-notext.svg.png",
|
||||||
|
image="python:3.6",
|
||||||
|
highlight="python",
|
||||||
|
),
|
||||||
|
Language(
|
||||||
|
id=1,
|
||||||
|
name="Kotlin",
|
||||||
|
work_name="Kotlin",
|
||||||
|
file_type="kt",
|
||||||
|
logo_url="https://upload.wikimedia.org/wikipedia/commons/0/06/Kotlin_Icon.svg",
|
||||||
|
image="zenika/kotlin",
|
||||||
|
highlight="kotlin",
|
||||||
|
),
|
||||||
|
]
|
@ -24,7 +24,7 @@
|
|||||||
Язык
|
Язык
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<img src="{{ solution.language.logo.url }}" width="30px" height="30px">
|
<img src="{{ solution.language.logo_url }}" width="30px" height="30px">
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
|
@ -7,8 +7,8 @@
|
|||||||
{{ solution.time_sent }}
|
{{ solution.time_sent }}
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<img src="{{ solution.language.logo.url }}" width="30px" height="30px">
|
<img src="{{ solution.language.logo_url }}" width="30px" height="30px">
|
||||||
{{ solution.language }}
|
{{ solution.language.name }}
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<h4>
|
<h4>
|
||||||
|
Loading…
Reference in New Issue
Block a user