-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* Some `save_db()` code * Complete from_db * Add tests * Reformat * regex refactor * Create common django app * Fix string * Change multi line output * reversing changes in pyproject.toml * fix previous commit --------- Co-authored-by: Zonkil <[email protected]> Co-authored-by: Tomasz Kwiatkowski <[email protected]> Co-authored-by: jrozek <[email protected]>
- Loading branch information
1 parent
7cf0998
commit 2cebc15
Showing
24 changed files
with
823 additions
and
52 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -13,4 +13,7 @@ htmlcov | |
coverage.xml | ||
|
||
# macOS | ||
.DS_Store | ||
.DS_Store | ||
|
||
# Files from Django db | ||
/sio3pack |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,66 @@ | ||
from typing import Type | ||
|
||
from django.core.files import File | ||
from django.db import transaction | ||
|
||
from sio3pack.django.common.models import SIO3Package, SIO3PackModelSolution, SIO3PackNameTranslation, SIO3PackStatement | ||
from sio3pack.files.local_file import LocalFile | ||
from sio3pack.packages.exceptions import ImproperlyConfigured, PackageAlreadyExists | ||
|
||
|
||
class DjangoHandler: | ||
def __init__(self, package: Type["Package"], problem_id: int): | ||
self.package = package | ||
self.problem_id = problem_id | ||
self.db_package = None | ||
|
||
@transaction.atomic | ||
def save_to_db(self): | ||
""" | ||
Save the package to the database. | ||
""" | ||
if SIO3Package.objects.filter(problem_id=self.problem_id).exists(): | ||
raise PackageAlreadyExists(self.problem_id) | ||
|
||
self.db_package = SIO3Package.objects.create( | ||
problem_id=self.problem_id, | ||
short_name=self.package.short_name, | ||
full_name=self.package.full_name, | ||
) | ||
|
||
self._save_translated_titles() | ||
self._save_model_solutions() | ||
self._save_problem_statements() | ||
|
||
def _save_translated_titles(self): | ||
""" | ||
Save the translated titles to the database. | ||
""" | ||
for lang, title in self.package.get_titles().items(): | ||
SIO3PackNameTranslation.objects.create( | ||
package=self.db_package, | ||
language=lang, | ||
name=title, | ||
) | ||
|
||
def _save_model_solutions(self): | ||
for order, solution in enumerate(self.package.get_model_solutions()): | ||
instance = SIO3PackModelSolution( | ||
package=self.db_package, | ||
name=solution.filename, | ||
order_key=order, | ||
) | ||
instance.source_file.save(solution.filename, File(open(solution.path, "rb"))) | ||
|
||
def _save_problem_statements(self): | ||
def _add_statement(language: str, statement: LocalFile): | ||
instance = SIO3PackStatement( | ||
package=self.db_package, | ||
language=language, | ||
) | ||
instance.content.save(statement.filename, File(open(statement.path, "rb"))) | ||
|
||
if self.package.get_statement(): | ||
_add_statement("", self.package.get_statement()) | ||
for lang, statement in self.package.get_statements().items(): | ||
_add_statement(lang, statement) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,287 @@ | ||
# Generated by Django 5.1.4 on 2024-12-12 10:46 | ||
|
||
import django.db.models.deletion | ||
import sio3pack.django.common.models | ||
from django.db import migrations, models | ||
|
||
|
||
class Migration(migrations.Migration): | ||
|
||
initial = True | ||
|
||
dependencies = [] | ||
|
||
operations = [ | ||
migrations.CreateModel( | ||
name="SIO3Package", | ||
fields=[ | ||
("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")), | ||
("problem_id", models.IntegerField()), | ||
("short_name", models.CharField(max_length=30, verbose_name="short name")), | ||
("full_name", models.CharField(default="", max_length=255, verbose_name="full name")), | ||
], | ||
), | ||
migrations.CreateModel( | ||
name="SIO3PackModelSolution", | ||
fields=[ | ||
("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")), | ||
("name", models.CharField(max_length=255, verbose_name="name")), | ||
( | ||
"source_file", | ||
models.FileField( | ||
upload_to=sio3pack.django.common.models.make_problem_filename, verbose_name="source file" | ||
), | ||
), | ||
("order_key", models.IntegerField(default=0)), | ||
("package", models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to="common.sio3package")), | ||
], | ||
), | ||
migrations.CreateModel( | ||
name="SIO3PackStatement", | ||
fields=[ | ||
("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")), | ||
( | ||
"language", | ||
models.CharField( | ||
blank=True, | ||
choices=[ | ||
("af", "Afrikaans"), | ||
("ar", "Arabic"), | ||
("ar-dz", "Algerian Arabic"), | ||
("ast", "Asturian"), | ||
("az", "Azerbaijani"), | ||
("bg", "Bulgarian"), | ||
("be", "Belarusian"), | ||
("bn", "Bengali"), | ||
("br", "Breton"), | ||
("bs", "Bosnian"), | ||
("ca", "Catalan"), | ||
("ckb", "Central Kurdish (Sorani)"), | ||
("cs", "Czech"), | ||
("cy", "Welsh"), | ||
("da", "Danish"), | ||
("de", "German"), | ||
("dsb", "Lower Sorbian"), | ||
("el", "Greek"), | ||
("en", "English"), | ||
("en-au", "Australian English"), | ||
("en-gb", "British English"), | ||
("eo", "Esperanto"), | ||
("es", "Spanish"), | ||
("es-ar", "Argentinian Spanish"), | ||
("es-co", "Colombian Spanish"), | ||
("es-mx", "Mexican Spanish"), | ||
("es-ni", "Nicaraguan Spanish"), | ||
("es-ve", "Venezuelan Spanish"), | ||
("et", "Estonian"), | ||
("eu", "Basque"), | ||
("fa", "Persian"), | ||
("fi", "Finnish"), | ||
("fr", "French"), | ||
("fy", "Frisian"), | ||
("ga", "Irish"), | ||
("gd", "Scottish Gaelic"), | ||
("gl", "Galician"), | ||
("he", "Hebrew"), | ||
("hi", "Hindi"), | ||
("hr", "Croatian"), | ||
("hsb", "Upper Sorbian"), | ||
("hu", "Hungarian"), | ||
("hy", "Armenian"), | ||
("ia", "Interlingua"), | ||
("id", "Indonesian"), | ||
("ig", "Igbo"), | ||
("io", "Ido"), | ||
("is", "Icelandic"), | ||
("it", "Italian"), | ||
("ja", "Japanese"), | ||
("ka", "Georgian"), | ||
("kab", "Kabyle"), | ||
("kk", "Kazakh"), | ||
("km", "Khmer"), | ||
("kn", "Kannada"), | ||
("ko", "Korean"), | ||
("ky", "Kyrgyz"), | ||
("lb", "Luxembourgish"), | ||
("lt", "Lithuanian"), | ||
("lv", "Latvian"), | ||
("mk", "Macedonian"), | ||
("ml", "Malayalam"), | ||
("mn", "Mongolian"), | ||
("mr", "Marathi"), | ||
("ms", "Malay"), | ||
("my", "Burmese"), | ||
("nb", "Norwegian Bokmål"), | ||
("ne", "Nepali"), | ||
("nl", "Dutch"), | ||
("nn", "Norwegian Nynorsk"), | ||
("os", "Ossetic"), | ||
("pa", "Punjabi"), | ||
("pl", "Polish"), | ||
("pt", "Portuguese"), | ||
("pt-br", "Brazilian Portuguese"), | ||
("ro", "Romanian"), | ||
("ru", "Russian"), | ||
("sk", "Slovak"), | ||
("sl", "Slovenian"), | ||
("sq", "Albanian"), | ||
("sr", "Serbian"), | ||
("sr-latn", "Serbian Latin"), | ||
("sv", "Swedish"), | ||
("sw", "Swahili"), | ||
("ta", "Tamil"), | ||
("te", "Telugu"), | ||
("tg", "Tajik"), | ||
("th", "Thai"), | ||
("tk", "Turkmen"), | ||
("tr", "Turkish"), | ||
("tt", "Tatar"), | ||
("udm", "Udmurt"), | ||
("ug", "Uyghur"), | ||
("uk", "Ukrainian"), | ||
("ur", "Urdu"), | ||
("uz", "Uzbek"), | ||
("vi", "Vietnamese"), | ||
("zh-hans", "Simplified Chinese"), | ||
("zh-hant", "Traditional Chinese"), | ||
], | ||
max_length=7, | ||
null=True, | ||
verbose_name="language code", | ||
), | ||
), | ||
( | ||
"content", | ||
models.FileField( | ||
upload_to=sio3pack.django.common.models.make_problem_filename, verbose_name="content" | ||
), | ||
), | ||
("package", models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to="common.sio3package")), | ||
], | ||
options={ | ||
"verbose_name": "problem statement", | ||
"verbose_name_plural": "problem statements", | ||
}, | ||
), | ||
migrations.CreateModel( | ||
name="SIO3PackNameTranslation", | ||
fields=[ | ||
("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")), | ||
( | ||
"language", | ||
models.CharField( | ||
choices=[ | ||
("af", "Afrikaans"), | ||
("ar", "Arabic"), | ||
("ar-dz", "Algerian Arabic"), | ||
("ast", "Asturian"), | ||
("az", "Azerbaijani"), | ||
("bg", "Bulgarian"), | ||
("be", "Belarusian"), | ||
("bn", "Bengali"), | ||
("br", "Breton"), | ||
("bs", "Bosnian"), | ||
("ca", "Catalan"), | ||
("ckb", "Central Kurdish (Sorani)"), | ||
("cs", "Czech"), | ||
("cy", "Welsh"), | ||
("da", "Danish"), | ||
("de", "German"), | ||
("dsb", "Lower Sorbian"), | ||
("el", "Greek"), | ||
("en", "English"), | ||
("en-au", "Australian English"), | ||
("en-gb", "British English"), | ||
("eo", "Esperanto"), | ||
("es", "Spanish"), | ||
("es-ar", "Argentinian Spanish"), | ||
("es-co", "Colombian Spanish"), | ||
("es-mx", "Mexican Spanish"), | ||
("es-ni", "Nicaraguan Spanish"), | ||
("es-ve", "Venezuelan Spanish"), | ||
("et", "Estonian"), | ||
("eu", "Basque"), | ||
("fa", "Persian"), | ||
("fi", "Finnish"), | ||
("fr", "French"), | ||
("fy", "Frisian"), | ||
("ga", "Irish"), | ||
("gd", "Scottish Gaelic"), | ||
("gl", "Galician"), | ||
("he", "Hebrew"), | ||
("hi", "Hindi"), | ||
("hr", "Croatian"), | ||
("hsb", "Upper Sorbian"), | ||
("hu", "Hungarian"), | ||
("hy", "Armenian"), | ||
("ia", "Interlingua"), | ||
("id", "Indonesian"), | ||
("ig", "Igbo"), | ||
("io", "Ido"), | ||
("is", "Icelandic"), | ||
("it", "Italian"), | ||
("ja", "Japanese"), | ||
("ka", "Georgian"), | ||
("kab", "Kabyle"), | ||
("kk", "Kazakh"), | ||
("km", "Khmer"), | ||
("kn", "Kannada"), | ||
("ko", "Korean"), | ||
("ky", "Kyrgyz"), | ||
("lb", "Luxembourgish"), | ||
("lt", "Lithuanian"), | ||
("lv", "Latvian"), | ||
("mk", "Macedonian"), | ||
("ml", "Malayalam"), | ||
("mn", "Mongolian"), | ||
("mr", "Marathi"), | ||
("ms", "Malay"), | ||
("my", "Burmese"), | ||
("nb", "Norwegian Bokmål"), | ||
("ne", "Nepali"), | ||
("nl", "Dutch"), | ||
("nn", "Norwegian Nynorsk"), | ||
("os", "Ossetic"), | ||
("pa", "Punjabi"), | ||
("pl", "Polish"), | ||
("pt", "Portuguese"), | ||
("pt-br", "Brazilian Portuguese"), | ||
("ro", "Romanian"), | ||
("ru", "Russian"), | ||
("sk", "Slovak"), | ||
("sl", "Slovenian"), | ||
("sq", "Albanian"), | ||
("sr", "Serbian"), | ||
("sr-latn", "Serbian Latin"), | ||
("sv", "Swedish"), | ||
("sw", "Swahili"), | ||
("ta", "Tamil"), | ||
("te", "Telugu"), | ||
("tg", "Tajik"), | ||
("th", "Thai"), | ||
("tk", "Turkmen"), | ||
("tr", "Turkish"), | ||
("tt", "Tatar"), | ||
("udm", "Udmurt"), | ||
("ug", "Uyghur"), | ||
("uk", "Ukrainian"), | ||
("ur", "Urdu"), | ||
("uz", "Uzbek"), | ||
("vi", "Vietnamese"), | ||
("zh-hans", "Simplified Chinese"), | ||
("zh-hant", "Traditional Chinese"), | ||
], | ||
max_length=7, | ||
verbose_name="language code", | ||
), | ||
), | ||
("name", models.CharField(max_length=255, verbose_name="name translation")), | ||
("package", models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to="common.sio3package")), | ||
], | ||
options={ | ||
"verbose_name": "sio3pack's name translation", | ||
"verbose_name_plural": "sio3pack's name translations", | ||
"unique_together": {("package", "language")}, | ||
}, | ||
), | ||
] |
Empty file.
Oops, something went wrong.