diff --git a/Dockerfile_django b/Dockerfile_django index bec45fab..859def77 100644 --- a/Dockerfile_django +++ b/Dockerfile_django @@ -25,4 +25,4 @@ ENV DJANGO_ENV=production RUN python manage.py compilemessages EXPOSE 8000 -CMD ["daphne", "--bind", "0.0.0.0", "--port", "8000", "--proxy-headers", "spoonbill_web.asgi:application"] +CMD ["daphne", "--bind", "0.0.0.0", "--port", "8000", "--proxy-headers", "core.asgi:application"] diff --git a/README.md b/README.md index 380b12bd..bfec83ed 100644 --- a/README.md +++ b/README.md @@ -43,13 +43,13 @@ npx vue-cli-service serve Start celery worker: ```shell -celery -A spoonbill_web worker -l INFO --concurrency=2 +celery -A core worker -l INFO --concurrency=2 ``` Start celery beat: ```shell -celery -A spoonbill_web beat -l INFO --scheduler django_celery_beat.schedulers:DatabaseScheduler +celery -A core beat -l INFO --scheduler django_celery_beat.schedulers:DatabaseScheduler ``` ## Internationalization diff --git a/core/__init__.py b/core/__init__.py index e69de29b..8cbdabc5 100644 --- a/core/__init__.py +++ b/core/__init__.py @@ -0,0 +1,4 @@ +# https://docs.celeryq.dev/en/stable/django/first-steps-with-django.html +from core.celery import app as celery_app + +__all__ = ("celery_app",) diff --git a/core/apps.py b/core/apps.py deleted file mode 100644 index 5ef1d600..00000000 --- a/core/apps.py +++ /dev/null @@ -1,5 +0,0 @@ -from django.apps import AppConfig - - -class CoreConfig(AppConfig): - name = "core" diff --git a/spoonbill_web/asgi.py b/core/asgi.py similarity index 66% rename from spoonbill_web/asgi.py rename to core/asgi.py index a646c20c..60c3d476 100644 --- a/spoonbill_web/asgi.py +++ b/core/asgi.py @@ -1,5 +1,5 @@ """ -ASGI config for spoonbill_web project. +ASGI config for core project. It exposes the ASGI callable as a module-level variable named ``application``. @@ -13,14 +13,14 @@ from channels.routing import ProtocolTypeRouter, URLRouter from django.core.asgi import get_asgi_application -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "spoonbill_web.settings") +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "core.settings") django.setup() -import core.routing # noqa: E402 +import spoonbill_web.routing # noqa: E402 application = ProtocolTypeRouter( { "http": get_asgi_application(), - "websocket": URLRouter(core.routing.websocket_urlpatterns), + "websocket": URLRouter(spoonbill_web.routing.websocket_urlpatterns), } ) diff --git a/spoonbill_web/celery.py b/core/celery.py similarity index 73% rename from spoonbill_web/celery.py rename to core/celery.py index 57f9410c..70540ba4 100644 --- a/spoonbill_web/celery.py +++ b/core/celery.py @@ -2,10 +2,10 @@ from celery import Celery -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "spoonbill_web.settings") +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "core.settings") app = Celery( - "spoonbill_web", + "core", broker_connection_retry=False, broker_connection_retry_on_startup=True, broker_channel_error_retry=True, diff --git a/core/locale/en_US/LC_MESSAGES/django.po b/core/locale/en_US/LC_MESSAGES/django.po index d9b51c56..a49c2e1d 100644 --- a/core/locale/en_US/LC_MESSAGES/django.po +++ b/core/locale/en_US/LC_MESSAGES/django.po @@ -3,17 +3,13 @@ # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # -# Translators: -# Zoriana Zaiats, 2021 -# #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-04-04 19:59+0000\n" -"PO-Revision-Date: 2021-04-13 13:02+0000\n" -"Last-Translator: Zoriana Zaiats, 2021\n" +"PO-Revision-Date: 2021-04-06 08:03+0000\n" "Language-Team: English (United States) (https://www.transifex.com/open-contracting-partnership-1/teams/117704/en_US/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,783 +17,10 @@ msgstr "" "Language: en_US\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: core/column_headings.py:4 -msgid "Amendment Amended Release (identifier)" -msgstr "Amendment Amended Release (identifier)" - -#: core/column_headings.py:5 -msgid "Amendment Date" -msgstr "Amendment Date" - -#: core/column_headings.py:6 -msgid "Amendment Description" -msgstr "Amendment Description" - -#: core/column_headings.py:7 -msgid "Amendment Id" -msgstr "" - -#: core/column_headings.py:8 -msgid "Amendment Rationale" -msgstr "" - -#: core/column_headings.py:9 -msgid "Amendment Amending Release (identifier)" -msgstr "" - -#: core/column_headings.py:10 core/column_headings.py:197 -msgid "Contract Period Duration (days)" -msgstr "" - -#: core/column_headings.py:11 core/column_headings.py:198 -msgid "Contract Period End Date" -msgstr "" - -#: core/column_headings.py:12 core/column_headings.py:199 -msgid "Contract Period Maximum Extent" -msgstr "" - -#: core/column_headings.py:13 core/column_headings.py:200 -msgid "Contract Period Start Date" -msgstr "" - -#: core/column_headings.py:14 -msgid "Award Date" -msgstr "" - -#: core/column_headings.py:15 -msgid "Award Description" -msgstr "" - -#: core/column_headings.py:16 -msgid "Award Id" -msgstr "" - -#: core/column_headings.py:17 core/column_headings.py:21 -#: core/column_headings.py:34 core/column_headings.py:38 -#: core/column_headings.py:83 core/column_headings.py:87 -#: core/column_headings.py:100 core/column_headings.py:104 -#: core/column_headings.py:209 core/column_headings.py:213 -#: core/column_headings.py:226 core/column_headings.py:230 -msgid "Classification Description" -msgstr "" - -#: core/column_headings.py:18 core/column_headings.py:22 -#: core/column_headings.py:35 core/column_headings.py:39 -#: core/column_headings.py:84 core/column_headings.py:88 -#: core/column_headings.py:101 core/column_headings.py:105 -#: core/column_headings.py:210 core/column_headings.py:214 -#: core/column_headings.py:227 core/column_headings.py:231 -msgid "Classification Id" -msgstr "" - -#: core/column_headings.py:19 core/column_headings.py:23 -#: core/column_headings.py:36 core/column_headings.py:40 -#: core/column_headings.py:85 core/column_headings.py:89 -#: core/column_headings.py:102 core/column_headings.py:106 -#: core/column_headings.py:211 core/column_headings.py:215 -#: core/column_headings.py:228 core/column_headings.py:232 -msgid "Classification Scheme" -msgstr "" - -#: core/column_headings.py:20 core/column_headings.py:24 -#: core/column_headings.py:37 core/column_headings.py:41 -#: core/column_headings.py:86 core/column_headings.py:90 -#: core/column_headings.py:103 core/column_headings.py:107 -#: core/column_headings.py:212 core/column_headings.py:216 -#: core/column_headings.py:229 core/column_headings.py:233 -msgid "Classification Uri" -msgstr "" - -#: core/column_headings.py:25 core/column_headings.py:42 -#: core/column_headings.py:91 core/column_headings.py:108 -#: core/column_headings.py:217 core/column_headings.py:234 -msgid "Item Description" -msgstr "" - -#: core/column_headings.py:26 core/column_headings.py:43 -#: core/column_headings.py:92 core/column_headings.py:109 -#: core/column_headings.py:218 core/column_headings.py:235 -msgid "Item Id" -msgstr "" - -#: core/column_headings.py:27 core/column_headings.py:44 -#: core/column_headings.py:93 core/column_headings.py:110 -#: core/column_headings.py:219 core/column_headings.py:236 -msgid "Item Quantity" -msgstr "" - -#: core/column_headings.py:28 core/column_headings.py:45 -#: core/column_headings.py:94 core/column_headings.py:111 -#: core/column_headings.py:220 core/column_headings.py:237 -msgid "Unit Id" -msgstr "" - -#: core/column_headings.py:29 core/column_headings.py:46 -#: core/column_headings.py:95 core/column_headings.py:112 -#: core/column_headings.py:221 core/column_headings.py:238 -msgid "Unit Name" -msgstr "" - -#: core/column_headings.py:30 core/column_headings.py:47 -#: core/column_headings.py:96 core/column_headings.py:113 -#: core/column_headings.py:222 core/column_headings.py:239 -msgid "Unit Scheme" -msgstr "" - -#: core/column_headings.py:31 core/column_headings.py:48 -#: core/column_headings.py:97 core/column_headings.py:114 -#: core/column_headings.py:223 core/column_headings.py:240 -msgid "Unit Uri" -msgstr "" - -#: core/column_headings.py:32 core/column_headings.py:49 -#: core/column_headings.py:57 core/column_headings.py:71 -#: core/column_headings.py:81 core/column_headings.py:98 -#: core/column_headings.py:115 core/column_headings.py:135 -#: core/column_headings.py:224 core/column_headings.py:241 -#: core/column_headings.py:265 -msgid "Value Amount" -msgstr "" - -#: core/column_headings.py:33 core/column_headings.py:50 -#: core/column_headings.py:58 core/column_headings.py:72 -#: core/column_headings.py:82 core/column_headings.py:99 -#: core/column_headings.py:116 core/column_headings.py:136 -#: core/column_headings.py:225 core/column_headings.py:242 -#: core/column_headings.py:266 -msgid "Value Currency" -msgstr "" - -#: core/column_headings.py:51 -msgid "Award Status" -msgstr "" - -#: core/column_headings.py:52 core/column_headings.py:54 -#: core/column_headings.py:256 core/column_headings.py:258 -msgid "Organization Reference Id" -msgstr "" - -#: core/column_headings.py:53 core/column_headings.py:55 -#: core/column_headings.py:257 core/column_headings.py:259 -msgid "Organization Reference Name" -msgstr "" - -#: core/column_headings.py:56 -msgid "Award Title" -msgstr "" - -#: core/column_headings.py:59 -msgid "Contract Award Id" -msgstr "" - -#: core/column_headings.py:60 -msgid "Contract Date Signed" -msgstr "" - -#: core/column_headings.py:61 -msgid "Contract Description" -msgstr "" - -#: core/column_headings.py:62 -msgid "Contract Id" -msgstr "" - -#: core/column_headings.py:63 core/column_headings.py:73 -msgid "Transaction Information Date" -msgstr "" - -#: core/column_headings.py:64 core/column_headings.py:74 -msgid "Transaction Information Id" -msgstr "" - -#: core/column_headings.py:65 core/column_headings.py:75 -msgid "Payee Organization Id" -msgstr "" - -#: core/column_headings.py:66 core/column_headings.py:76 -msgid "Payee Organization Name" -msgstr "" - -#: core/column_headings.py:67 core/column_headings.py:77 -msgid "Payer Organization Id" -msgstr "" - -#: core/column_headings.py:68 core/column_headings.py:78 -msgid "Payer Organization Name" -msgstr "" - -#: core/column_headings.py:69 core/column_headings.py:79 -msgid "Transaction Information Data Source" -msgstr "" - -#: core/column_headings.py:70 core/column_headings.py:80 -msgid "Transaction Information Linked Spending" -msgstr "" - -#: core/column_headings.py:117 -msgid "Period Duration (days)" -msgstr "" - -#: core/column_headings.py:118 -msgid "Period End Date" -msgstr "" - -#: core/column_headings.py:119 -msgid "Period Maximum Extent" -msgstr "" - -#: core/column_headings.py:120 -msgid "Period Start Date" -msgstr "" - -#: core/column_headings.py:121 core/column_headings.py:127 -msgid "Related Process Relationship Id" -msgstr "" - -#: core/column_headings.py:122 core/column_headings.py:128 -msgid "Related Process Identifier" -msgstr "" - -#: core/column_headings.py:123 core/column_headings.py:129 -msgid "Related Process Relationship" -msgstr "" - -#: core/column_headings.py:124 core/column_headings.py:130 -msgid "Related Process Scheme" -msgstr "" - -#: core/column_headings.py:125 core/column_headings.py:131 -msgid "Related Process Title" -msgstr "" - -#: core/column_headings.py:126 core/column_headings.py:132 -msgid "Related Process Uri" -msgstr "" - -#: core/column_headings.py:133 -msgid "Contract Status" -msgstr "" - -#: core/column_headings.py:134 -msgid "Contract Title" -msgstr "" - -#: core/column_headings.py:137 -msgid "Document Date Modified" -msgstr "" - -#: core/column_headings.py:138 -msgid "Document Date Published" -msgstr "" - -#: core/column_headings.py:139 -msgid "Document Description" -msgstr "" - -#: core/column_headings.py:140 -msgid "Document Type" -msgstr "" - -#: core/column_headings.py:141 -msgid "Document Format" -msgstr "" - -#: core/column_headings.py:142 -msgid "Document Id" -msgstr "" - -#: core/column_headings.py:143 -msgid "Document Language" -msgstr "" - -#: core/column_headings.py:144 -msgid "Document Title" -msgstr "" - -#: core/column_headings.py:145 -msgid "Document Url" -msgstr "" - -#: core/column_headings.py:146 -msgid "Milestone Code" -msgstr "" - -#: core/column_headings.py:147 -msgid "Milestone Date Met" -msgstr "" - -#: core/column_headings.py:148 -msgid "Milestone Date Modified" -msgstr "" - -#: core/column_headings.py:149 -msgid "Milestone Description" -msgstr "" - -#: core/column_headings.py:150 -msgid "Milestone Due Date" -msgstr "" - -#: core/column_headings.py:151 -msgid "Milestone Id" -msgstr "" - -#: core/column_headings.py:152 -msgid "Milestone Status" -msgstr "" - -#: core/column_headings.py:153 -msgid "Milestone Title" -msgstr "" - -#: core/column_headings.py:154 -msgid "Milestone Type" -msgstr "" - -#: core/column_headings.py:155 core/column_headings.py:159 -msgid "Identifier Id" -msgstr "" - -#: core/column_headings.py:156 core/column_headings.py:160 -msgid "Identifier Legal Name" -msgstr "" - -#: core/column_headings.py:157 core/column_headings.py:161 -msgid "Identifier Scheme" -msgstr "" - -#: core/column_headings.py:158 core/column_headings.py:162 -msgid "Identifier Uri" -msgstr "" - -#: core/column_headings.py:163 -msgid "Address Country Name" -msgstr "" - -#: core/column_headings.py:164 -msgid "Address Locality" -msgstr "" - -#: core/column_headings.py:165 -msgid "Address Postal Code" -msgstr "" - -#: core/column_headings.py:166 -msgid "Address Region" -msgstr "" - -#: core/column_headings.py:167 -msgid "Address Street" -msgstr "" - -#: core/column_headings.py:168 -msgid "Contact Point Email" -msgstr "" - -#: core/column_headings.py:169 -msgid "Contact Point Fax Number" -msgstr "" - -#: core/column_headings.py:170 -msgid "Contact Point Name" -msgstr "" - -#: core/column_headings.py:171 -msgid "Contact Point Telephone" -msgstr "" - -#: core/column_headings.py:172 -msgid "Contact Point Url" -msgstr "" - -#: core/column_headings.py:173 -msgid "Organization Entity Id" -msgstr "" - -#: core/column_headings.py:174 -msgid "Primary Identifier Id" -msgstr "" - -#: core/column_headings.py:175 -msgid "Primary Identifier Legal Name" -msgstr "" - -#: core/column_headings.py:176 -msgid "Primary Identifier Scheme" -msgstr "" - -#: core/column_headings.py:177 -msgid "Primary Identifier Uri" -msgstr "" - -#: core/column_headings.py:178 -msgid "Organization Common Name" -msgstr "" - -#: core/column_headings.py:179 core/column_headings.py:180 -msgid "Organization Party Roles" -msgstr "" - -#: core/column_headings.py:181 -msgid "Amount" -msgstr "" - -#: core/column_headings.py:182 -msgid "Amount Currency" -msgstr "" - -#: core/column_headings.py:183 -msgid "Budget Source" -msgstr "" - -#: core/column_headings.py:184 -msgid "Budget Id" -msgstr "" - -#: core/column_headings.py:185 -msgid "Budget Project Title" -msgstr "" - -#: core/column_headings.py:186 -msgid "Budget Project Identifier" -msgstr "" - -#: core/column_headings.py:187 -msgid "Budget Linked Information" -msgstr "" - -#: core/column_headings.py:188 -msgid "Planning Rationale" -msgstr "" - -#: core/column_headings.py:189 core/column_headings.py:190 -msgid "Tender Additional Procurement Categories" -msgstr "" - -#: core/column_headings.py:191 -msgid "Tender Award Criteria" -msgstr "" - -#: core/column_headings.py:192 -msgid "Tender Award Criteria Details" -msgstr "" - -#: core/column_headings.py:193 -msgid "Evaluation And Award Period Duration (days)" -msgstr "" - -#: core/column_headings.py:194 -msgid "Evaluation And Award Period End Date" -msgstr "" - -#: core/column_headings.py:195 -msgid "Evaluation And Award Period Maximum Extent" -msgstr "" - -#: core/column_headings.py:196 -msgid "Evaluation And Award Period Start Date" -msgstr "" - -#: core/column_headings.py:201 -msgid "Tender Description" -msgstr "" - -#: core/column_headings.py:202 -msgid "Tender Eligibility Criteria" -msgstr "" - -#: core/column_headings.py:203 -msgid "Enquiry Period Duration (days)" -msgstr "" - -#: core/column_headings.py:204 -msgid "Enquiry Period End Date" -msgstr "" - -#: core/column_headings.py:205 -msgid "Enquiry Period Maximum Extent" -msgstr "" - -#: core/column_headings.py:206 -msgid "Enquiry Period Start Date" -msgstr "" - -#: core/column_headings.py:207 -msgid "Tender Has Enquiries?" -msgstr "" - -#: core/column_headings.py:208 -msgid "Tender Id" -msgstr "" - -#: core/column_headings.py:243 -msgid "Tender Main Procurement Category" -msgstr "" - -#: core/column_headings.py:244 -msgid "Minimum Value Amount" -msgstr "" - -#: core/column_headings.py:245 -msgid "Minimum Value Currency" -msgstr "" - -#: core/column_headings.py:246 -msgid "Tender Number Of Tenderers" -msgstr "" - -#: core/column_headings.py:247 -msgid "Tender Procurement Method" -msgstr "" - -#: core/column_headings.py:248 -msgid "Tender Procurement Method Details" -msgstr "" - -#: core/column_headings.py:249 -msgid "Tender Procurement Method Rationale" -msgstr "" - -#: core/column_headings.py:250 -msgid "Procuring Entity Organization Id" -msgstr "" - -#: core/column_headings.py:251 -msgid "Procuring Entity Organization Name" -msgstr "" - -#: core/column_headings.py:252 -msgid "Tender Status" -msgstr "" - -#: core/column_headings.py:253 core/column_headings.py:254 -msgid "Tender Submission Method" -msgstr "" - -#: core/column_headings.py:255 -msgid "Tender Submission Method Details" -msgstr "" - -#: core/column_headings.py:260 -msgid "Tender Period Duration (days)" -msgstr "" - -#: core/column_headings.py:261 -msgid "Tender Period End Date" -msgstr "" - -#: core/column_headings.py:262 -msgid "Tender Period Maximum Extent" -msgstr "" - -#: core/column_headings.py:263 -msgid "Tender Period Start Date" -msgstr "" - -#: core/column_headings.py:264 -msgid "Tender Title" -msgstr "" - -#: core/column_headings.py:267 -msgid "id" -msgstr "" - -#: core/column_headings.py:268 -msgid "ocid" -msgstr "" - -#: core/column_headings.py:269 -msgid "parentID" -msgstr "" - -#: core/column_headings.py:270 -msgid "rowID" -msgstr "" - -#: core/models.py:31 core/models.py:47 core/models.py:85 -msgid "Validation" -msgstr "" - -#: core/models.py:32 -msgid "Validations" -msgstr "" - -#: core/models.py:46 core/models.py:84 -msgid "Queued validation" -msgstr "" - -#: core/models.py:65 -msgid "Upload" -msgstr "" - -#: core/models.py:66 -msgid "Uploads" -msgstr "" - -#: core/models.py:81 -msgid "Queued download" -msgstr "" - -#: core/models.py:82 -msgid "Downloading analyzed data" -msgstr "" - -#: core/models.py:83 -msgid "Downloading" -msgstr "" - -#: core/models.py:86 core/models.py:187 -msgid "Failed" -msgstr "" - -#: core/models.py:116 -msgid "Url" -msgstr "" - -#: core/models.py:117 -msgid "Urls" -msgstr "" - -#: core/models.py:132 -msgid "Custom" -msgstr "" - -#: core/models.py:132 -msgid "OCDS Lite" -msgstr "" - -#: core/models.py:134 -msgid "Apply OCDS headings only" -msgstr "" - -#: core/models.py:135 -msgid "Apply English user friendly headings to all tables" -msgstr "" - -#: core/models.py:136 -msgid "Apply English R friendly headings to all tables" -msgstr "" - -#: core/models.py:137 -msgid "Apply Spanish user friendly headings to all tables" -msgstr "" - -#: core/models.py:138 -msgid "Apply Spanish R friendly headings to all tables" -msgstr "" - -#: core/models.py:148 -msgid "Data Selection" -msgstr "" - -#: core/models.py:149 -msgid "Data Selections" -msgstr "" - -#: core/models.py:179 -msgid "A comma-separated values (CSV) file" -msgstr "" - -#: core/models.py:179 -msgid "XLSX (Excel) file format" -msgstr "" - -#: core/models.py:186 -msgid "Completed" -msgstr "" - -#: core/models.py:188 -msgid "Processing" -msgstr "Processing" - -#: core/models.py:189 -msgid "Scheduled" -msgstr "Scheduled" - -#: core/models.py:207 -msgid "File" -msgstr "" - -#: core/models.py:208 -msgid "Files" -msgstr "" - -#: core/tasks.py:81 core/tasks.py:267 -#, python-format -msgid "Model %s for datasource not found" -msgstr "" - -#: core/tasks.py:157 core/tasks.py:440 -#, python-format -msgid "Datasource %s not found" -msgstr "" - -#: core/tasks.py:170 core/tasks.py:212 -#, python-format -msgid "Error while validating data `%s`" -msgstr "" - -#: core/tasks.py:190 core/tasks.py:460 core/tasks.py:594 core/views.py:99 -#: core/views.py:485 core/views.py:609 -msgid "Currently, the space limit was reached. Please try again later." -msgstr "" - -#: core/tasks.py:192 core/tasks.py:596 -msgid "" -"Something went wrong during processing of your file, please contact support" -msgstr "" - -#: core/tasks.py:309 core/tasks.py:370 -#, python-brace-format -msgid "{r.status_code}: {r.reason}" -msgstr "" - -#: core/views.py:56 -msgid "File is required" -msgstr "" - -#: core/views.py:59 -msgid "" -"Multi-upload feature is not available for file uploads yet. Stay tuned!" -msgstr "" - -#: core/views.py:105 -msgid "Error while receiving file. Contact our support service" -msgstr "" - -#: core/views.py:286 -msgid "Url is required" -msgstr "" - -#: core/views.py:344 -msgid "Datasource without available tables" -msgstr "" - -#: core/views.py:386 -#, python-format -msgid "Please use for column_heading value one of %s" -msgstr "" - -#: core/views.py:450 -#, python-brace-format -msgid "Cannot merge '{table.name}' - child arrays are too large" -msgstr "" - -#: core/views.py:475 core/views.py:599 -msgid "Datasource expired." -msgstr "" - -#: core/views.py:632 -msgid "Flatten request for this type already exists." -msgstr "" - -#: core/views.py:652 -#, python-format -msgid "You can't reschedule flatten in (%s) status" +#: spoonbill_web.settings.py:154 +msgid "English" msgstr "" -#: core/views.py:657 -#, python-format -msgid "You can set status to %s only" +#: spoonbill_web.settings.py:154 +msgid "Spanish" msgstr "" diff --git a/core/locale/es/LC_MESSAGES/django.po b/core/locale/es/LC_MESSAGES/django.po index 45c43cfb..c1aa2423 100644 --- a/core/locale/es/LC_MESSAGES/django.po +++ b/core/locale/es/LC_MESSAGES/django.po @@ -4,7 +4,7 @@ # FIRST AUTHOR , YEAR. # # Translators: -# Zoriana Zaiats, 2021 +# Vitalii Martyniak , 2021 # Yohanna Lisnichuk , 2021 # #, fuzzy @@ -13,7 +13,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-04-04 19:59+0000\n" -"PO-Revision-Date: 2021-04-13 13:02+0000\n" +"PO-Revision-Date: 2021-04-06 08:03+0000\n" "Last-Translator: Yohanna Lisnichuk , 2021\n" "Language-Team: Spanish (https://www.transifex.com/open-contracting-partnership-1/teams/117704/es/)\n" "MIME-Version: 1.0\n" @@ -22,788 +22,10 @@ msgstr "" "Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: core/column_headings.py:4 -msgid "Amendment Amended Release (identifier)" -msgstr "" - -#: core/column_headings.py:5 -msgid "Amendment Date" -msgstr "Enmienda Fecha" - -#: core/column_headings.py:6 -msgid "Amendment Description" -msgstr "Descripción de la enmienda" - -#: core/column_headings.py:7 -msgid "Amendment Id" -msgstr "ID de enmienda" - -#: core/column_headings.py:8 -msgid "Amendment Rationale" -msgstr "Justificación de la enmienda" - -#: core/column_headings.py:9 -msgid "Amendment Amending Release (identifier)" -msgstr "" - -#: core/column_headings.py:10 core/column_headings.py:197 -msgid "Contract Period Duration (days)" -msgstr "Duración del período de contrato (días)" - -#: core/column_headings.py:11 core/column_headings.py:198 -msgid "Contract Period End Date" -msgstr "Fecha de finalización del período del contrato" - -#: core/column_headings.py:12 core/column_headings.py:199 -msgid "Contract Period Maximum Extent" -msgstr "Extensión máxima del período del contrato" - -#: core/column_headings.py:13 core/column_headings.py:200 -msgid "Contract Period Start Date" -msgstr "Fecha de inicio del período del contrato" - -#: core/column_headings.py:14 -msgid "Award Date" -msgstr "Fecha de adjudicación" - -#: core/column_headings.py:15 -msgid "Award Description" -msgstr "Descripción" - -#: core/column_headings.py:16 -msgid "Award Id" -msgstr "ID de Adjudicación" - -#: core/column_headings.py:17 core/column_headings.py:21 -#: core/column_headings.py:34 core/column_headings.py:38 -#: core/column_headings.py:83 core/column_headings.py:87 -#: core/column_headings.py:100 core/column_headings.py:104 -#: core/column_headings.py:209 core/column_headings.py:213 -#: core/column_headings.py:226 core/column_headings.py:230 -msgid "Classification Description" -msgstr "Descripción de la clasificación" - -#: core/column_headings.py:18 core/column_headings.py:22 -#: core/column_headings.py:35 core/column_headings.py:39 -#: core/column_headings.py:84 core/column_headings.py:88 -#: core/column_headings.py:101 core/column_headings.py:105 -#: core/column_headings.py:210 core/column_headings.py:214 -#: core/column_headings.py:227 core/column_headings.py:231 -msgid "Classification Id" -msgstr "ID de clasificación" - -#: core/column_headings.py:19 core/column_headings.py:23 -#: core/column_headings.py:36 core/column_headings.py:40 -#: core/column_headings.py:85 core/column_headings.py:89 -#: core/column_headings.py:102 core/column_headings.py:106 -#: core/column_headings.py:211 core/column_headings.py:215 -#: core/column_headings.py:228 core/column_headings.py:232 -msgid "Classification Scheme" -msgstr "Esquema de clasificación" - -#: core/column_headings.py:20 core/column_headings.py:24 -#: core/column_headings.py:37 core/column_headings.py:41 -#: core/column_headings.py:86 core/column_headings.py:90 -#: core/column_headings.py:103 core/column_headings.py:107 -#: core/column_headings.py:212 core/column_headings.py:216 -#: core/column_headings.py:229 core/column_headings.py:233 -msgid "Classification Uri" -msgstr "Clasificación Uri" - -#: core/column_headings.py:25 core/column_headings.py:42 -#: core/column_headings.py:91 core/column_headings.py:108 -#: core/column_headings.py:217 core/column_headings.py:234 -msgid "Item Description" -msgstr "Descripción del Artículo" - -#: core/column_headings.py:26 core/column_headings.py:43 -#: core/column_headings.py:92 core/column_headings.py:109 -#: core/column_headings.py:218 core/column_headings.py:235 -msgid "Item Id" -msgstr "Identificación del artículo" - -#: core/column_headings.py:27 core/column_headings.py:44 -#: core/column_headings.py:93 core/column_headings.py:110 -#: core/column_headings.py:219 core/column_headings.py:236 -msgid "Item Quantity" -msgstr "Cantidad de articulos" - -#: core/column_headings.py:28 core/column_headings.py:45 -#: core/column_headings.py:94 core/column_headings.py:111 -#: core/column_headings.py:220 core/column_headings.py:237 -msgid "Unit Id" -msgstr "" - -#: core/column_headings.py:29 core/column_headings.py:46 -#: core/column_headings.py:95 core/column_headings.py:112 -#: core/column_headings.py:221 core/column_headings.py:238 -msgid "Unit Name" -msgstr "" - -#: core/column_headings.py:30 core/column_headings.py:47 -#: core/column_headings.py:96 core/column_headings.py:113 -#: core/column_headings.py:222 core/column_headings.py:239 -msgid "Unit Scheme" -msgstr "" - -#: core/column_headings.py:31 core/column_headings.py:48 -#: core/column_headings.py:97 core/column_headings.py:114 -#: core/column_headings.py:223 core/column_headings.py:240 -msgid "Unit Uri" -msgstr "" - -#: core/column_headings.py:32 core/column_headings.py:49 -#: core/column_headings.py:57 core/column_headings.py:71 -#: core/column_headings.py:81 core/column_headings.py:98 -#: core/column_headings.py:115 core/column_headings.py:135 -#: core/column_headings.py:224 core/column_headings.py:241 -#: core/column_headings.py:265 -msgid "Value Amount" -msgstr "" - -#: core/column_headings.py:33 core/column_headings.py:50 -#: core/column_headings.py:58 core/column_headings.py:72 -#: core/column_headings.py:82 core/column_headings.py:99 -#: core/column_headings.py:116 core/column_headings.py:136 -#: core/column_headings.py:225 core/column_headings.py:242 -#: core/column_headings.py:266 -msgid "Value Currency" -msgstr "" - -#: core/column_headings.py:51 -msgid "Award Status" -msgstr "" - -#: core/column_headings.py:52 core/column_headings.py:54 -#: core/column_headings.py:256 core/column_headings.py:258 -msgid "Organization Reference Id" -msgstr "" - -#: core/column_headings.py:53 core/column_headings.py:55 -#: core/column_headings.py:257 core/column_headings.py:259 -msgid "Organization Reference Name" -msgstr "" - -#: core/column_headings.py:56 -msgid "Award Title" -msgstr "" - -#: core/column_headings.py:59 -msgid "Contract Award Id" -msgstr "" - -#: core/column_headings.py:60 -msgid "Contract Date Signed" -msgstr "" - -#: core/column_headings.py:61 -msgid "Contract Description" -msgstr "" - -#: core/column_headings.py:62 -msgid "Contract Id" -msgstr "" - -#: core/column_headings.py:63 core/column_headings.py:73 -msgid "Transaction Information Date" -msgstr "" - -#: core/column_headings.py:64 core/column_headings.py:74 -msgid "Transaction Information Id" -msgstr "" - -#: core/column_headings.py:65 core/column_headings.py:75 -msgid "Payee Organization Id" -msgstr "" - -#: core/column_headings.py:66 core/column_headings.py:76 -msgid "Payee Organization Name" -msgstr "" - -#: core/column_headings.py:67 core/column_headings.py:77 -msgid "Payer Organization Id" -msgstr "" - -#: core/column_headings.py:68 core/column_headings.py:78 -msgid "Payer Organization Name" -msgstr "" - -#: core/column_headings.py:69 core/column_headings.py:79 -msgid "Transaction Information Data Source" -msgstr "" - -#: core/column_headings.py:70 core/column_headings.py:80 -msgid "Transaction Information Linked Spending" -msgstr "" - -#: core/column_headings.py:117 -msgid "Period Duration (days)" -msgstr "" - -#: core/column_headings.py:118 -msgid "Period End Date" -msgstr "" - -#: core/column_headings.py:119 -msgid "Period Maximum Extent" -msgstr "" - -#: core/column_headings.py:120 -msgid "Period Start Date" -msgstr "" - -#: core/column_headings.py:121 core/column_headings.py:127 -msgid "Related Process Relationship Id" -msgstr "" - -#: core/column_headings.py:122 core/column_headings.py:128 -msgid "Related Process Identifier" -msgstr "" - -#: core/column_headings.py:123 core/column_headings.py:129 -msgid "Related Process Relationship" -msgstr "" - -#: core/column_headings.py:124 core/column_headings.py:130 -msgid "Related Process Scheme" -msgstr "" - -#: core/column_headings.py:125 core/column_headings.py:131 -msgid "Related Process Title" -msgstr "" - -#: core/column_headings.py:126 core/column_headings.py:132 -msgid "Related Process Uri" -msgstr "" - -#: core/column_headings.py:133 -msgid "Contract Status" -msgstr "" - -#: core/column_headings.py:134 -msgid "Contract Title" -msgstr "" - -#: core/column_headings.py:137 -msgid "Document Date Modified" -msgstr "" - -#: core/column_headings.py:138 -msgid "Document Date Published" -msgstr "" - -#: core/column_headings.py:139 -msgid "Document Description" -msgstr "" - -#: core/column_headings.py:140 -msgid "Document Type" -msgstr "Tipo de Documento" - -#: core/column_headings.py:141 -msgid "Document Format" -msgstr "Formato" - -#: core/column_headings.py:142 -msgid "Document Id" -msgstr "ID de Documento" - -#: core/column_headings.py:143 -msgid "Document Language" -msgstr "" - -#: core/column_headings.py:144 -msgid "Document Title" -msgstr "" - -#: core/column_headings.py:145 -msgid "Document Url" -msgstr "" - -#: core/column_headings.py:146 -msgid "Milestone Code" -msgstr "" - -#: core/column_headings.py:147 -msgid "Milestone Date Met" -msgstr "" - -#: core/column_headings.py:148 -msgid "Milestone Date Modified" -msgstr "" - -#: core/column_headings.py:149 -msgid "Milestone Description" -msgstr "" - -#: core/column_headings.py:150 -msgid "Milestone Due Date" -msgstr "" - -#: core/column_headings.py:151 -msgid "Milestone Id" -msgstr "" - -#: core/column_headings.py:152 -msgid "Milestone Status" -msgstr "" - -#: core/column_headings.py:153 -msgid "Milestone Title" -msgstr "" - -#: core/column_headings.py:154 -msgid "Milestone Type" -msgstr "" - -#: core/column_headings.py:155 core/column_headings.py:159 -msgid "Identifier Id" -msgstr "" - -#: core/column_headings.py:156 core/column_headings.py:160 -msgid "Identifier Legal Name" -msgstr "" - -#: core/column_headings.py:157 core/column_headings.py:161 -msgid "Identifier Scheme" -msgstr "" - -#: core/column_headings.py:158 core/column_headings.py:162 -msgid "Identifier Uri" -msgstr "" - -#: core/column_headings.py:163 -msgid "Address Country Name" -msgstr "" - -#: core/column_headings.py:164 -msgid "Address Locality" -msgstr "" - -#: core/column_headings.py:165 -msgid "Address Postal Code" -msgstr "" - -#: core/column_headings.py:166 -msgid "Address Region" -msgstr "" - -#: core/column_headings.py:167 -msgid "Address Street" -msgstr "" - -#: core/column_headings.py:168 -msgid "Contact Point Email" -msgstr "" - -#: core/column_headings.py:169 -msgid "Contact Point Fax Number" -msgstr "" - -#: core/column_headings.py:170 -msgid "Contact Point Name" -msgstr "" - -#: core/column_headings.py:171 -msgid "Contact Point Telephone" -msgstr "" - -#: core/column_headings.py:172 -msgid "Contact Point Url" -msgstr "" - -#: core/column_headings.py:173 -msgid "Organization Entity Id" -msgstr "" - -#: core/column_headings.py:174 -msgid "Primary Identifier Id" -msgstr "" - -#: core/column_headings.py:175 -msgid "Primary Identifier Legal Name" -msgstr "" - -#: core/column_headings.py:176 -msgid "Primary Identifier Scheme" -msgstr "" - -#: core/column_headings.py:177 -msgid "Primary Identifier Uri" -msgstr "" - -#: core/column_headings.py:178 -msgid "Organization Common Name" -msgstr "" - -#: core/column_headings.py:179 core/column_headings.py:180 -msgid "Organization Party Roles" -msgstr "" - -#: core/column_headings.py:181 -msgid "Amount" -msgstr "Monto" - -#: core/column_headings.py:182 -msgid "Amount Currency" -msgstr "Moneda" - -#: core/column_headings.py:183 -msgid "Budget Source" -msgstr "Fuente de los Datos" - -#: core/column_headings.py:184 -msgid "Budget Id" -msgstr "" - -#: core/column_headings.py:185 -msgid "Budget Project Title" -msgstr "" - -#: core/column_headings.py:186 -msgid "Budget Project Identifier" -msgstr "" - -#: core/column_headings.py:187 -msgid "Budget Linked Information" -msgstr "" - -#: core/column_headings.py:188 -msgid "Planning Rationale" -msgstr "" - -#: core/column_headings.py:189 core/column_headings.py:190 -msgid "Tender Additional Procurement Categories" -msgstr "" - -#: core/column_headings.py:191 -msgid "Tender Award Criteria" -msgstr "" - -#: core/column_headings.py:192 -msgid "Tender Award Criteria Details" -msgstr "" - -#: core/column_headings.py:193 -msgid "Evaluation And Award Period Duration (days)" -msgstr "" - -#: core/column_headings.py:194 -msgid "Evaluation And Award Period End Date" -msgstr "" - -#: core/column_headings.py:195 -msgid "Evaluation And Award Period Maximum Extent" -msgstr "" - -#: core/column_headings.py:196 -msgid "Evaluation And Award Period Start Date" -msgstr "" - -#: core/column_headings.py:201 -msgid "Tender Description" -msgstr "" - -#: core/column_headings.py:202 -msgid "Tender Eligibility Criteria" -msgstr "" - -#: core/column_headings.py:203 -msgid "Enquiry Period Duration (days)" -msgstr "" - -#: core/column_headings.py:204 -msgid "Enquiry Period End Date" -msgstr "" - -#: core/column_headings.py:205 -msgid "Enquiry Period Maximum Extent" -msgstr "" - -#: core/column_headings.py:206 -msgid "Enquiry Period Start Date" -msgstr "" - -#: core/column_headings.py:207 -msgid "Tender Has Enquiries?" -msgstr "" - -#: core/column_headings.py:208 -msgid "Tender Id" -msgstr "Licitación ID" - -#: core/column_headings.py:243 -msgid "Tender Main Procurement Category" -msgstr "" - -#: core/column_headings.py:244 -msgid "Minimum Value Amount" -msgstr "" - -#: core/column_headings.py:245 -msgid "Minimum Value Currency" -msgstr "" - -#: core/column_headings.py:246 -msgid "Tender Number Of Tenderers" -msgstr "" - -#: core/column_headings.py:247 -msgid "Tender Procurement Method" -msgstr "" - -#: core/column_headings.py:248 -msgid "Tender Procurement Method Details" -msgstr "" - -#: core/column_headings.py:249 -msgid "Tender Procurement Method Rationale" -msgstr "" - -#: core/column_headings.py:250 -msgid "Procuring Entity Organization Id" -msgstr "" - -#: core/column_headings.py:251 -msgid "Procuring Entity Organization Name" -msgstr "" - -#: core/column_headings.py:252 -msgid "Tender Status" -msgstr "" - -#: core/column_headings.py:253 core/column_headings.py:254 -msgid "Tender Submission Method" -msgstr "" - -#: core/column_headings.py:255 -msgid "Tender Submission Method Details" -msgstr "" - -#: core/column_headings.py:260 -msgid "Tender Period Duration (days)" -msgstr "" - -#: core/column_headings.py:261 -msgid "Tender Period End Date" -msgstr "" - -#: core/column_headings.py:262 -msgid "Tender Period Maximum Extent" -msgstr "" - -#: core/column_headings.py:263 -msgid "Tender Period Start Date" -msgstr "" - -#: core/column_headings.py:264 -msgid "Tender Title" -msgstr "Título de la licitación" - -#: core/column_headings.py:267 -msgid "id" -msgstr "" - -#: core/column_headings.py:268 -msgid "ocid" -msgstr "" - -#: core/column_headings.py:269 -msgid "parentID" -msgstr "" - -#: core/column_headings.py:270 -msgid "rowID" -msgstr "" - -#: core/models.py:31 core/models.py:47 core/models.py:85 -msgid "Validation" -msgstr "Validación" - -#: core/models.py:32 -msgid "Validations" -msgstr "Validaciones" - -#: core/models.py:46 core/models.py:84 -msgid "Queued validation" -msgstr "Validación en cola" - -#: core/models.py:65 -msgid "Upload" -msgstr "Cargar" - -#: core/models.py:66 -msgid "Uploads" -msgstr "Subidas" - -#: core/models.py:81 -msgid "Queued download" -msgstr "Descarga en cola" - -#: core/models.py:82 -msgid "Downloading analyzed data" -msgstr "Descarga de datos analizados" - -#: core/models.py:83 -msgid "Downloading" -msgstr "Descargando" - -#: core/models.py:86 core/models.py:187 -msgid "Failed" -msgstr "Fallido" - -#: core/models.py:116 -msgid "Url" -msgstr "Url" - -#: core/models.py:117 -msgid "Urls" -msgstr "Urls" - -#: core/models.py:132 -msgid "Custom" -msgstr "Personalizado" - -#: core/models.py:132 -msgid "OCDS Lite" -msgstr "OCDS Lite" - -#: core/models.py:134 -msgid "Apply OCDS headings only" -msgstr "Aplicar solo encabezados OCDS" - -#: core/models.py:135 -msgid "Apply English user friendly headings to all tables" -msgstr "Aplicar encabezados amigables en inglés a todas las tablas" - -#: core/models.py:136 -msgid "Apply English R friendly headings to all tables" -msgstr "Aplicar encabezados en formato R en inglés a todas las tablas" - -#: core/models.py:137 -msgid "Apply Spanish user friendly headings to all tables" -msgstr "Aplicar encabezados amigables en español a todas las tablas" - -#: core/models.py:138 -msgid "Apply Spanish R friendly headings to all tables" -msgstr "Aplicar encabezados en formato R en español a todas las tablas" - -#: core/models.py:148 -msgid "Data Selection" -msgstr "Selección de datos" - -#: core/models.py:149 -msgid "Data Selections" -msgstr "Selecciones de datos" - -#: core/models.py:179 -msgid "A comma-separated values (CSV) file" -msgstr "Un archivo de valores separados por comas (CSV)" - -#: core/models.py:179 -msgid "XLSX (Excel) file format" -msgstr "Un archivo en formato XLSX (Excel)" - -#: core/models.py:186 -msgid "Completed" -msgstr "Completado" - -#: core/models.py:188 -msgid "Processing" -msgstr "Procesando" - -#: core/models.py:189 -msgid "Scheduled" -msgstr "Programado" - -#: core/models.py:207 -msgid "File" -msgstr "" - -#: core/models.py:208 -msgid "Files" -msgstr "" - -#: core/tasks.py:81 core/tasks.py:267 -#, python-format -msgid "Model %s for datasource not found" -msgstr "Modelo %s no encontrado para el conjunto de datos" - -#: core/tasks.py:157 core/tasks.py:440 -#, python-format -msgid "Datasource %s not found" -msgstr "Conjunto de datos %s no encontrado" - -#: core/tasks.py:170 core/tasks.py:212 -#, python-format -msgid "Error while validating data `%s`" -msgstr "Error validando datos `%s`" - -#: core/tasks.py:190 core/tasks.py:460 core/tasks.py:594 core/views.py:99 -#: core/views.py:485 core/views.py:609 -msgid "Currently, the space limit was reached. Please try again later." -msgstr "" -"En este momento, se alcanzó el límite de espacio. Por favor, inténtelo de " -"nuevo más tarde." - -#: core/tasks.py:192 core/tasks.py:596 -msgid "" -"Something went wrong during processing of your file, please contact support" -msgstr "" - -#: core/tasks.py:309 core/tasks.py:370 -#, python-brace-format -msgid "{r.status_code}: {r.reason}" -msgstr "{r.status_code}: {r.reason}" - -#: core/views.py:56 -msgid "File is required" -msgstr "Se requiere un archivo" - -#: core/views.py:59 -msgid "" -"Multi-upload feature is not available for file uploads yet. Stay tuned!" -msgstr "" -"La carga de archivos múltiples no está disponible aún. Manténganse al tanto!" - -#: core/views.py:105 -msgid "Error while receiving file. Contact our support service" -msgstr "" -"Error al recibir el archivo. Póngase en contacto con nuestro servicio de " -"soporte" - -#: core/views.py:286 -msgid "Url is required" -msgstr "Se requiere una URL" - -#: core/views.py:344 -msgid "Datasource without available tables" -msgstr "Conjunto de datos sin tablas disponibles" - -#: core/views.py:386 -#, python-format -msgid "Please use for column_heading value one of %s" -msgstr "Por favor, use como valor de column_heading uno de %s" - -#: core/views.py:450 -#, python-brace-format -msgid "Cannot merge '{table.name}' - child arrays are too large" -msgstr "" - -#: core/views.py:475 core/views.py:599 -msgid "Datasource expired." -msgstr "Conjunto de datos expirado." - -#: core/views.py:632 -msgid "Flatten request for this type already exists." -msgstr "Ya existe una solicitud de aplanado de este tipo." - -#: core/views.py:652 -#, python-format -msgid "You can't reschedule flatten in (%s) status" -msgstr "No puede reprogramar un aplanado en el estado (%s)" +#: spoonbill_web.settings.py:154 +msgid "English" +msgstr "Inglés" -#: core/views.py:657 -#, python-format -msgid "You can set status to %s only" -msgstr "Puede establecer el estado solo a %s" +#: spoonbill_web.settings.py:154 +msgid "Spanish" +msgstr "Español" diff --git a/core/locale/ru/LC_MESSAGES/django.po b/core/locale/ru/LC_MESSAGES/django.po index f86390f5..6c74377f 100644 --- a/core/locale/ru/LC_MESSAGES/django.po +++ b/core/locale/ru/LC_MESSAGES/django.po @@ -3,13 +3,17 @@ # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # +# Translators: +# Viktor Nestulia , 2021 +# #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-04-04 19:59+0000\n" -"PO-Revision-Date: 2021-04-13 13:02+0000\n" +"PO-Revision-Date: 2021-04-06 08:03+0000\n" +"Last-Translator: Viktor Nestulia , 2021\n" "Language-Team: Russian (https://www.transifex.com/open-contracting-partnership-1/teams/117704/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -17,783 +21,10 @@ msgstr "" "Language: ru\n" "Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n" -#: core/column_headings.py:4 -msgid "Amendment Amended Release (identifier)" -msgstr "" - -#: core/column_headings.py:5 -msgid "Amendment Date" -msgstr "" - -#: core/column_headings.py:6 -msgid "Amendment Description" -msgstr "" - -#: core/column_headings.py:7 -msgid "Amendment Id" -msgstr "" - -#: core/column_headings.py:8 -msgid "Amendment Rationale" -msgstr "" - -#: core/column_headings.py:9 -msgid "Amendment Amending Release (identifier)" -msgstr "" - -#: core/column_headings.py:10 core/column_headings.py:197 -msgid "Contract Period Duration (days)" -msgstr "" - -#: core/column_headings.py:11 core/column_headings.py:198 -msgid "Contract Period End Date" -msgstr "" - -#: core/column_headings.py:12 core/column_headings.py:199 -msgid "Contract Period Maximum Extent" -msgstr "" - -#: core/column_headings.py:13 core/column_headings.py:200 -msgid "Contract Period Start Date" -msgstr "" - -#: core/column_headings.py:14 -msgid "Award Date" -msgstr "" - -#: core/column_headings.py:15 -msgid "Award Description" -msgstr "" - -#: core/column_headings.py:16 -msgid "Award Id" -msgstr "" - -#: core/column_headings.py:17 core/column_headings.py:21 -#: core/column_headings.py:34 core/column_headings.py:38 -#: core/column_headings.py:83 core/column_headings.py:87 -#: core/column_headings.py:100 core/column_headings.py:104 -#: core/column_headings.py:209 core/column_headings.py:213 -#: core/column_headings.py:226 core/column_headings.py:230 -msgid "Classification Description" -msgstr "" - -#: core/column_headings.py:18 core/column_headings.py:22 -#: core/column_headings.py:35 core/column_headings.py:39 -#: core/column_headings.py:84 core/column_headings.py:88 -#: core/column_headings.py:101 core/column_headings.py:105 -#: core/column_headings.py:210 core/column_headings.py:214 -#: core/column_headings.py:227 core/column_headings.py:231 -msgid "Classification Id" -msgstr "" - -#: core/column_headings.py:19 core/column_headings.py:23 -#: core/column_headings.py:36 core/column_headings.py:40 -#: core/column_headings.py:85 core/column_headings.py:89 -#: core/column_headings.py:102 core/column_headings.py:106 -#: core/column_headings.py:211 core/column_headings.py:215 -#: core/column_headings.py:228 core/column_headings.py:232 -msgid "Classification Scheme" -msgstr "" - -#: core/column_headings.py:20 core/column_headings.py:24 -#: core/column_headings.py:37 core/column_headings.py:41 -#: core/column_headings.py:86 core/column_headings.py:90 -#: core/column_headings.py:103 core/column_headings.py:107 -#: core/column_headings.py:212 core/column_headings.py:216 -#: core/column_headings.py:229 core/column_headings.py:233 -msgid "Classification Uri" -msgstr "" - -#: core/column_headings.py:25 core/column_headings.py:42 -#: core/column_headings.py:91 core/column_headings.py:108 -#: core/column_headings.py:217 core/column_headings.py:234 -msgid "Item Description" -msgstr "" - -#: core/column_headings.py:26 core/column_headings.py:43 -#: core/column_headings.py:92 core/column_headings.py:109 -#: core/column_headings.py:218 core/column_headings.py:235 -msgid "Item Id" -msgstr "" - -#: core/column_headings.py:27 core/column_headings.py:44 -#: core/column_headings.py:93 core/column_headings.py:110 -#: core/column_headings.py:219 core/column_headings.py:236 -msgid "Item Quantity" -msgstr "" - -#: core/column_headings.py:28 core/column_headings.py:45 -#: core/column_headings.py:94 core/column_headings.py:111 -#: core/column_headings.py:220 core/column_headings.py:237 -msgid "Unit Id" -msgstr "" - -#: core/column_headings.py:29 core/column_headings.py:46 -#: core/column_headings.py:95 core/column_headings.py:112 -#: core/column_headings.py:221 core/column_headings.py:238 -msgid "Unit Name" -msgstr "" - -#: core/column_headings.py:30 core/column_headings.py:47 -#: core/column_headings.py:96 core/column_headings.py:113 -#: core/column_headings.py:222 core/column_headings.py:239 -msgid "Unit Scheme" -msgstr "" - -#: core/column_headings.py:31 core/column_headings.py:48 -#: core/column_headings.py:97 core/column_headings.py:114 -#: core/column_headings.py:223 core/column_headings.py:240 -msgid "Unit Uri" -msgstr "" - -#: core/column_headings.py:32 core/column_headings.py:49 -#: core/column_headings.py:57 core/column_headings.py:71 -#: core/column_headings.py:81 core/column_headings.py:98 -#: core/column_headings.py:115 core/column_headings.py:135 -#: core/column_headings.py:224 core/column_headings.py:241 -#: core/column_headings.py:265 -msgid "Value Amount" -msgstr "" - -#: core/column_headings.py:33 core/column_headings.py:50 -#: core/column_headings.py:58 core/column_headings.py:72 -#: core/column_headings.py:82 core/column_headings.py:99 -#: core/column_headings.py:116 core/column_headings.py:136 -#: core/column_headings.py:225 core/column_headings.py:242 -#: core/column_headings.py:266 -msgid "Value Currency" -msgstr "" - -#: core/column_headings.py:51 -msgid "Award Status" -msgstr "" - -#: core/column_headings.py:52 core/column_headings.py:54 -#: core/column_headings.py:256 core/column_headings.py:258 -msgid "Organization Reference Id" -msgstr "" - -#: core/column_headings.py:53 core/column_headings.py:55 -#: core/column_headings.py:257 core/column_headings.py:259 -msgid "Organization Reference Name" -msgstr "" - -#: core/column_headings.py:56 -msgid "Award Title" -msgstr "" - -#: core/column_headings.py:59 -msgid "Contract Award Id" -msgstr "" - -#: core/column_headings.py:60 -msgid "Contract Date Signed" -msgstr "" - -#: core/column_headings.py:61 -msgid "Contract Description" -msgstr "" - -#: core/column_headings.py:62 -msgid "Contract Id" -msgstr "" - -#: core/column_headings.py:63 core/column_headings.py:73 -msgid "Transaction Information Date" -msgstr "" - -#: core/column_headings.py:64 core/column_headings.py:74 -msgid "Transaction Information Id" -msgstr "" - -#: core/column_headings.py:65 core/column_headings.py:75 -msgid "Payee Organization Id" -msgstr "" - -#: core/column_headings.py:66 core/column_headings.py:76 -msgid "Payee Organization Name" -msgstr "" - -#: core/column_headings.py:67 core/column_headings.py:77 -msgid "Payer Organization Id" -msgstr "" - -#: core/column_headings.py:68 core/column_headings.py:78 -msgid "Payer Organization Name" -msgstr "" - -#: core/column_headings.py:69 core/column_headings.py:79 -msgid "Transaction Information Data Source" -msgstr "" - -#: core/column_headings.py:70 core/column_headings.py:80 -msgid "Transaction Information Linked Spending" -msgstr "" - -#: core/column_headings.py:117 -msgid "Period Duration (days)" -msgstr "" - -#: core/column_headings.py:118 -msgid "Period End Date" -msgstr "" - -#: core/column_headings.py:119 -msgid "Period Maximum Extent" -msgstr "" - -#: core/column_headings.py:120 -msgid "Period Start Date" -msgstr "" - -#: core/column_headings.py:121 core/column_headings.py:127 -msgid "Related Process Relationship Id" -msgstr "" - -#: core/column_headings.py:122 core/column_headings.py:128 -msgid "Related Process Identifier" -msgstr "" - -#: core/column_headings.py:123 core/column_headings.py:129 -msgid "Related Process Relationship" -msgstr "" - -#: core/column_headings.py:124 core/column_headings.py:130 -msgid "Related Process Scheme" -msgstr "" - -#: core/column_headings.py:125 core/column_headings.py:131 -msgid "Related Process Title" -msgstr "" - -#: core/column_headings.py:126 core/column_headings.py:132 -msgid "Related Process Uri" -msgstr "" - -#: core/column_headings.py:133 -msgid "Contract Status" -msgstr "" - -#: core/column_headings.py:134 -msgid "Contract Title" -msgstr "" - -#: core/column_headings.py:137 -msgid "Document Date Modified" -msgstr "" - -#: core/column_headings.py:138 -msgid "Document Date Published" -msgstr "" - -#: core/column_headings.py:139 -msgid "Document Description" -msgstr "" - -#: core/column_headings.py:140 -msgid "Document Type" -msgstr "" - -#: core/column_headings.py:141 -msgid "Document Format" -msgstr "" - -#: core/column_headings.py:142 -msgid "Document Id" -msgstr "" - -#: core/column_headings.py:143 -msgid "Document Language" -msgstr "" - -#: core/column_headings.py:144 -msgid "Document Title" -msgstr "" - -#: core/column_headings.py:145 -msgid "Document Url" -msgstr "" - -#: core/column_headings.py:146 -msgid "Milestone Code" -msgstr "" - -#: core/column_headings.py:147 -msgid "Milestone Date Met" -msgstr "" - -#: core/column_headings.py:148 -msgid "Milestone Date Modified" -msgstr "" - -#: core/column_headings.py:149 -msgid "Milestone Description" -msgstr "" - -#: core/column_headings.py:150 -msgid "Milestone Due Date" -msgstr "" - -#: core/column_headings.py:151 -msgid "Milestone Id" -msgstr "" - -#: core/column_headings.py:152 -msgid "Milestone Status" -msgstr "" - -#: core/column_headings.py:153 -msgid "Milestone Title" -msgstr "" - -#: core/column_headings.py:154 -msgid "Milestone Type" -msgstr "" - -#: core/column_headings.py:155 core/column_headings.py:159 -msgid "Identifier Id" -msgstr "" - -#: core/column_headings.py:156 core/column_headings.py:160 -msgid "Identifier Legal Name" -msgstr "" - -#: core/column_headings.py:157 core/column_headings.py:161 -msgid "Identifier Scheme" -msgstr "" - -#: core/column_headings.py:158 core/column_headings.py:162 -msgid "Identifier Uri" -msgstr "" - -#: core/column_headings.py:163 -msgid "Address Country Name" -msgstr "" - -#: core/column_headings.py:164 -msgid "Address Locality" -msgstr "" - -#: core/column_headings.py:165 -msgid "Address Postal Code" -msgstr "" - -#: core/column_headings.py:166 -msgid "Address Region" -msgstr "" - -#: core/column_headings.py:167 -msgid "Address Street" -msgstr "" - -#: core/column_headings.py:168 -msgid "Contact Point Email" -msgstr "" - -#: core/column_headings.py:169 -msgid "Contact Point Fax Number" -msgstr "" - -#: core/column_headings.py:170 -msgid "Contact Point Name" -msgstr "" - -#: core/column_headings.py:171 -msgid "Contact Point Telephone" -msgstr "" - -#: core/column_headings.py:172 -msgid "Contact Point Url" -msgstr "" - -#: core/column_headings.py:173 -msgid "Organization Entity Id" -msgstr "" - -#: core/column_headings.py:174 -msgid "Primary Identifier Id" -msgstr "" - -#: core/column_headings.py:175 -msgid "Primary Identifier Legal Name" -msgstr "" - -#: core/column_headings.py:176 -msgid "Primary Identifier Scheme" -msgstr "" - -#: core/column_headings.py:177 -msgid "Primary Identifier Uri" -msgstr "" +#: spoonbill_web.settings.py:154 +msgid "English" +msgstr "Английский" -#: core/column_headings.py:178 -msgid "Organization Common Name" -msgstr "" - -#: core/column_headings.py:179 core/column_headings.py:180 -msgid "Organization Party Roles" -msgstr "" - -#: core/column_headings.py:181 -msgid "Amount" -msgstr "" - -#: core/column_headings.py:182 -msgid "Amount Currency" -msgstr "" - -#: core/column_headings.py:183 -msgid "Budget Source" -msgstr "" - -#: core/column_headings.py:184 -msgid "Budget Id" -msgstr "" - -#: core/column_headings.py:185 -msgid "Budget Project Title" -msgstr "" - -#: core/column_headings.py:186 -msgid "Budget Project Identifier" -msgstr "" - -#: core/column_headings.py:187 -msgid "Budget Linked Information" -msgstr "" - -#: core/column_headings.py:188 -msgid "Planning Rationale" -msgstr "" - -#: core/column_headings.py:189 core/column_headings.py:190 -msgid "Tender Additional Procurement Categories" -msgstr "" - -#: core/column_headings.py:191 -msgid "Tender Award Criteria" -msgstr "" - -#: core/column_headings.py:192 -msgid "Tender Award Criteria Details" -msgstr "" - -#: core/column_headings.py:193 -msgid "Evaluation And Award Period Duration (days)" -msgstr "" - -#: core/column_headings.py:194 -msgid "Evaluation And Award Period End Date" -msgstr "" - -#: core/column_headings.py:195 -msgid "Evaluation And Award Period Maximum Extent" -msgstr "" - -#: core/column_headings.py:196 -msgid "Evaluation And Award Period Start Date" -msgstr "" - -#: core/column_headings.py:201 -msgid "Tender Description" -msgstr "" - -#: core/column_headings.py:202 -msgid "Tender Eligibility Criteria" -msgstr "" - -#: core/column_headings.py:203 -msgid "Enquiry Period Duration (days)" -msgstr "" - -#: core/column_headings.py:204 -msgid "Enquiry Period End Date" -msgstr "" - -#: core/column_headings.py:205 -msgid "Enquiry Period Maximum Extent" -msgstr "" - -#: core/column_headings.py:206 -msgid "Enquiry Period Start Date" -msgstr "" - -#: core/column_headings.py:207 -msgid "Tender Has Enquiries?" -msgstr "" - -#: core/column_headings.py:208 -msgid "Tender Id" -msgstr "" - -#: core/column_headings.py:243 -msgid "Tender Main Procurement Category" -msgstr "" - -#: core/column_headings.py:244 -msgid "Minimum Value Amount" -msgstr "" - -#: core/column_headings.py:245 -msgid "Minimum Value Currency" -msgstr "" - -#: core/column_headings.py:246 -msgid "Tender Number Of Tenderers" -msgstr "" - -#: core/column_headings.py:247 -msgid "Tender Procurement Method" -msgstr "" - -#: core/column_headings.py:248 -msgid "Tender Procurement Method Details" -msgstr "" - -#: core/column_headings.py:249 -msgid "Tender Procurement Method Rationale" -msgstr "" - -#: core/column_headings.py:250 -msgid "Procuring Entity Organization Id" -msgstr "" - -#: core/column_headings.py:251 -msgid "Procuring Entity Organization Name" -msgstr "" - -#: core/column_headings.py:252 -msgid "Tender Status" -msgstr "" - -#: core/column_headings.py:253 core/column_headings.py:254 -msgid "Tender Submission Method" -msgstr "" - -#: core/column_headings.py:255 -msgid "Tender Submission Method Details" -msgstr "" - -#: core/column_headings.py:260 -msgid "Tender Period Duration (days)" -msgstr "" - -#: core/column_headings.py:261 -msgid "Tender Period End Date" -msgstr "" - -#: core/column_headings.py:262 -msgid "Tender Period Maximum Extent" -msgstr "" - -#: core/column_headings.py:263 -msgid "Tender Period Start Date" -msgstr "" - -#: core/column_headings.py:264 -msgid "Tender Title" -msgstr "" - -#: core/column_headings.py:267 -msgid "id" -msgstr "" - -#: core/column_headings.py:268 -msgid "ocid" -msgstr "" - -#: core/column_headings.py:269 -msgid "parentID" -msgstr "" - -#: core/column_headings.py:270 -msgid "rowID" -msgstr "" - -#: core/models.py:31 core/models.py:47 core/models.py:85 -msgid "Validation" -msgstr "" - -#: core/models.py:32 -msgid "Validations" -msgstr "" - -#: core/models.py:46 core/models.py:84 -msgid "Queued validation" -msgstr "" - -#: core/models.py:65 -msgid "Upload" -msgstr "" - -#: core/models.py:66 -msgid "Uploads" -msgstr "" - -#: core/models.py:81 -msgid "Queued download" -msgstr "" - -#: core/models.py:82 -msgid "Downloading analyzed data" -msgstr "" - -#: core/models.py:83 -msgid "Downloading" -msgstr "" - -#: core/models.py:86 core/models.py:187 -msgid "Failed" -msgstr "" - -#: core/models.py:116 -msgid "Url" -msgstr "" - -#: core/models.py:117 -msgid "Urls" -msgstr "" - -#: core/models.py:132 -msgid "Custom" -msgstr "" - -#: core/models.py:132 -msgid "OCDS Lite" -msgstr "" - -#: core/models.py:134 -msgid "Apply OCDS headings only" -msgstr "" - -#: core/models.py:135 -msgid "Apply English user friendly headings to all tables" -msgstr "" - -#: core/models.py:136 -msgid "Apply English R friendly headings to all tables" -msgstr "" - -#: core/models.py:137 -msgid "Apply Spanish user friendly headings to all tables" -msgstr "" - -#: core/models.py:138 -msgid "Apply Spanish R friendly headings to all tables" -msgstr "" - -#: core/models.py:148 -msgid "Data Selection" -msgstr "" - -#: core/models.py:149 -msgid "Data Selections" -msgstr "" - -#: core/models.py:179 -msgid "A comma-separated values (CSV) file" -msgstr "" - -#: core/models.py:179 -msgid "XLSX (Excel) file format" -msgstr "" - -#: core/models.py:186 -msgid "Completed" -msgstr "" - -#: core/models.py:188 -msgid "Processing" -msgstr "" - -#: core/models.py:189 -msgid "Scheduled" -msgstr "" - -#: core/models.py:207 -msgid "File" -msgstr "" - -#: core/models.py:208 -msgid "Files" -msgstr "" - -#: core/tasks.py:81 core/tasks.py:267 -#, python-format -msgid "Model %s for datasource not found" -msgstr "" - -#: core/tasks.py:157 core/tasks.py:440 -#, python-format -msgid "Datasource %s not found" -msgstr "" - -#: core/tasks.py:170 core/tasks.py:212 -#, python-format -msgid "Error while validating data `%s`" -msgstr "" - -#: core/tasks.py:190 core/tasks.py:460 core/tasks.py:594 core/views.py:99 -#: core/views.py:485 core/views.py:609 -msgid "Currently, the space limit was reached. Please try again later." -msgstr "" - -#: core/tasks.py:192 core/tasks.py:596 -msgid "" -"Something went wrong during processing of your file, please contact support" -msgstr "" - -#: core/tasks.py:309 core/tasks.py:370 -#, python-brace-format -msgid "{r.status_code}: {r.reason}" -msgstr "" - -#: core/views.py:56 -msgid "File is required" -msgstr "" - -#: core/views.py:59 -msgid "" -"Multi-upload feature is not available for file uploads yet. Stay tuned!" -msgstr "" - -#: core/views.py:105 -msgid "Error while receiving file. Contact our support service" -msgstr "" - -#: core/views.py:286 -msgid "Url is required" -msgstr "" - -#: core/views.py:344 -msgid "Datasource without available tables" -msgstr "" - -#: core/views.py:386 -#, python-format -msgid "Please use for column_heading value one of %s" -msgstr "" - -#: core/views.py:450 -#, python-brace-format -msgid "Cannot merge '{table.name}' - child arrays are too large" -msgstr "" - -#: core/views.py:475 core/views.py:599 -msgid "Datasource expired." -msgstr "" - -#: core/views.py:632 -msgid "Flatten request for this type already exists." -msgstr "" - -#: core/views.py:652 -#, python-format -msgid "You can't reschedule flatten in (%s) status" -msgstr "" - -#: core/views.py:657 -#, python-format -msgid "You can set status to %s only" -msgstr "" +#: spoonbill_web.settings.py:154 +msgid "Spanish" +msgstr "Испанский" diff --git a/spoonbill_web/settings.py b/core/settings.py similarity index 96% rename from spoonbill_web/settings.py rename to core/settings.py index 65f408ae..054180e5 100644 --- a/spoonbill_web/settings.py +++ b/core/settings.py @@ -57,7 +57,7 @@ "django_celery_beat", "django_celery_results", "corsheaders", - "core", + "spoonbill_web", ] MIDDLEWARE = [ @@ -73,7 +73,7 @@ "django_transfer.TransferMiddleware", ] -ROOT_URLCONF = "spoonbill_web.urls" +ROOT_URLCONF = "core.urls" TEMPLATES = [ { @@ -91,7 +91,7 @@ }, ] -WSGI_APPLICATION = "spoonbill_web.wsgi.application" +WSGI_APPLICATION = "core.wsgi.application" # Database @@ -191,7 +191,7 @@ "level": "ERROR", "propagate": False, }, - "core": { + "spoonbill_web": { "handlers": ["console"], "level": "DEBUG", "propagate": False, @@ -237,7 +237,7 @@ FILE_UPLOAD_MAX_MEMORY_SIZE = 2621440 # 2.5 MiB FILE_UPLOAD_TEMP_DIR = os.getenv("FILE_UPLOAD_TEMP_DIR", "/data/tmp/" if production else BASE_DIR / "tmp/") -ASGI_APPLICATION = "spoonbill_web.asgi.application" +ASGI_APPLICATION = "core.asgi.application" # Dependency configuration @@ -303,6 +303,8 @@ DATAREGISTRY_JAIL = os.getenv("DATAREGISTRY_JAIL", "True") != "False" # The path relative to which Data Registry paths are submitted. -DATAREGISTRY_MEDIA_ROOT = os.getenv("DATAREGISTRY_MEDIA_ROOT", "/data/exporter") +DATAREGISTRY_MEDIA_ROOT = os.getenv( + "DATAREGISTRY_MEDIA_ROOT", "/data/exporter" if production else BASE_DIR / "data" / "exporter" +) if DATAREGISTRY_MEDIA_ROOT: DATAREGISTRY_MEDIA_ROOT = Path(DATAREGISTRY_MEDIA_ROOT) diff --git a/core/urls.py b/core/urls.py index b7f67b39..baa0ca56 100644 --- a/core/urls.py +++ b/core/urls.py @@ -1,21 +1,8 @@ +from django.conf import settings +from django.conf.urls.static import static from django.urls import include, path -from core.routing import ( - router, - upload_preview_router, - upload_selection_router, - upload_table_router, - url_preview_router, - url_selection_router, - url_table_router, -) - urlpatterns = [ - path("", include(router.urls)), - path("", include(upload_selection_router.urls)), - path("", include(upload_table_router.urls)), - path("", include(url_selection_router.urls)), - path("", include(url_table_router.urls)), - path("", include(upload_preview_router.urls)), - path("", include(url_preview_router.urls)), + path("api/", include("spoonbill_web.urls")), + *static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT), ] diff --git a/spoonbill_web/wsgi.py b/core/wsgi.py similarity index 71% rename from spoonbill_web/wsgi.py rename to core/wsgi.py index 76707684..a08c895d 100644 --- a/spoonbill_web/wsgi.py +++ b/core/wsgi.py @@ -1,5 +1,5 @@ """ -WSGI config for spoonbill_web project. +WSGI config for core project. It exposes the WSGI callable as a module-level variable named ``application``. @@ -11,6 +11,6 @@ from django.core.wsgi import get_wsgi_application -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "spoonbill_web.settings") +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "core.settings") application = get_wsgi_application() diff --git a/docker-compose.test.yaml b/docker-compose.test.yaml index 5d8f054a..25775119 100644 --- a/docker-compose.test.yaml +++ b/docker-compose.test.yaml @@ -54,10 +54,10 @@ services: - 'traefik.http.routers.app.rule=PathPrefix(`/api/`)' celery_worker: <<: *django - command: celery -A spoonbill_web worker -l INFO --concurrency=4 + command: celery -A core worker -l INFO --concurrency=4 celery_beat: <<: *django - command: celery -A spoonbill_web beat -l INFO --scheduler django_celery_beat.schedulers:DatabaseScheduler + command: celery -A core beat -l INFO --scheduler django_celery_beat.schedulers:DatabaseScheduler static: image: static build: diff --git a/manage.py b/manage.py index e70f1369..bd9928d2 100755 --- a/manage.py +++ b/manage.py @@ -7,7 +7,7 @@ def main(): """Run administrative tasks.""" - os.environ.setdefault("DJANGO_SETTINGS_MODULE", "spoonbill_web.settings") + os.environ.setdefault("DJANGO_SETTINGS_MODULE", "core.settings") from django.core.management import execute_from_command_line diff --git a/pyproject.toml b/pyproject.toml index 9fedf2f8..7e9aba69 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -26,21 +26,19 @@ ignore-variadic-names = true "{*/signals,*/views,*/migrations/*}.py" = ["ARG001"] "{*/admin,*/routers,*/views,*/commands/*}.py" = ["ARG002"] "{*/admin,*/forms,*/models,*/routers,*/migrations/*,tests/*}.py" = ["RUF012"] +"*/{serializers,views}.py" = ["RUF012"] "*/migrations/*" = ["E501"] "tests/*" = [ "D", "FBT003", "INP001", "PLR2004", "PT", "S", "TRY003", "ARG001", # mock "ARG002", # mock ] -"*/views.py" = [ - "RUF012", # djangorestframework -] [tool.coverage.run] omit = ["*/migrations/*"] [tool.pytest.ini_options] -DJANGO_SETTINGS_MODULE = "spoonbill_web.settings" +DJANGO_SETTINGS_MODULE = 'core.settings' [tool.uv.pip] python-platform = "linux" # greenlet diff --git a/spoonbill_web/__init__.py b/spoonbill_web/__init__.py index 53f4ccb1..e69de29b 100644 --- a/spoonbill_web/__init__.py +++ b/spoonbill_web/__init__.py @@ -1,3 +0,0 @@ -from .celery import app as celery_app - -__all__ = ("celery_app",) diff --git a/spoonbill_web/apps.py b/spoonbill_web/apps.py new file mode 100644 index 00000000..5b1393cd --- /dev/null +++ b/spoonbill_web/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class SpoonbillWebConfig(AppConfig): + name = "spoonbill_web" diff --git a/core/column_headings.py b/spoonbill_web/column_headings.py similarity index 100% rename from core/column_headings.py rename to spoonbill_web/column_headings.py diff --git a/core/constants.py b/spoonbill_web/constants.py similarity index 100% rename from core/constants.py rename to spoonbill_web/constants.py diff --git a/core/consumers.py b/spoonbill_web/consumers.py similarity index 100% rename from core/consumers.py rename to spoonbill_web/consumers.py diff --git a/core/data/ocds_lite_config.json b/spoonbill_web/data/ocds_lite_config.json similarity index 100% rename from core/data/ocds_lite_config.json rename to spoonbill_web/data/ocds_lite_config.json diff --git a/core/data/schema.json b/spoonbill_web/data/schema.json similarity index 100% rename from core/data/schema.json rename to spoonbill_web/data/schema.json diff --git a/core/file_storage.py b/spoonbill_web/file_storage.py similarity index 96% rename from core/file_storage.py rename to spoonbill_web/file_storage.py index 3ff6f43b..89066759 100644 --- a/core/file_storage.py +++ b/spoonbill_web/file_storage.py @@ -5,7 +5,7 @@ from django.core.exceptions import SuspiciousFileOperation from django.core.files.storage import FileSystemStorage -from core.utils import dataregistry_path_resolver +from spoonbill_web.utils import dataregistry_path_resolver def safe_join(base, *paths): diff --git a/spoonbill_web/locale/en_US/LC_MESSAGES/django.po b/spoonbill_web/locale/en_US/LC_MESSAGES/django.po index a49c2e1d..d9b51c56 100644 --- a/spoonbill_web/locale/en_US/LC_MESSAGES/django.po +++ b/spoonbill_web/locale/en_US/LC_MESSAGES/django.po @@ -3,13 +3,17 @@ # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # +# Translators: +# Zoriana Zaiats, 2021 +# #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-04-04 19:59+0000\n" -"PO-Revision-Date: 2021-04-06 08:03+0000\n" +"PO-Revision-Date: 2021-04-13 13:02+0000\n" +"Last-Translator: Zoriana Zaiats, 2021\n" "Language-Team: English (United States) (https://www.transifex.com/open-contracting-partnership-1/teams/117704/en_US/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -17,10 +21,783 @@ msgstr "" "Language: en_US\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: spoonbill_web.settings.py:154 -msgid "English" +#: core/column_headings.py:4 +msgid "Amendment Amended Release (identifier)" +msgstr "Amendment Amended Release (identifier)" + +#: core/column_headings.py:5 +msgid "Amendment Date" +msgstr "Amendment Date" + +#: core/column_headings.py:6 +msgid "Amendment Description" +msgstr "Amendment Description" + +#: core/column_headings.py:7 +msgid "Amendment Id" +msgstr "" + +#: core/column_headings.py:8 +msgid "Amendment Rationale" +msgstr "" + +#: core/column_headings.py:9 +msgid "Amendment Amending Release (identifier)" +msgstr "" + +#: core/column_headings.py:10 core/column_headings.py:197 +msgid "Contract Period Duration (days)" +msgstr "" + +#: core/column_headings.py:11 core/column_headings.py:198 +msgid "Contract Period End Date" +msgstr "" + +#: core/column_headings.py:12 core/column_headings.py:199 +msgid "Contract Period Maximum Extent" +msgstr "" + +#: core/column_headings.py:13 core/column_headings.py:200 +msgid "Contract Period Start Date" +msgstr "" + +#: core/column_headings.py:14 +msgid "Award Date" +msgstr "" + +#: core/column_headings.py:15 +msgid "Award Description" +msgstr "" + +#: core/column_headings.py:16 +msgid "Award Id" +msgstr "" + +#: core/column_headings.py:17 core/column_headings.py:21 +#: core/column_headings.py:34 core/column_headings.py:38 +#: core/column_headings.py:83 core/column_headings.py:87 +#: core/column_headings.py:100 core/column_headings.py:104 +#: core/column_headings.py:209 core/column_headings.py:213 +#: core/column_headings.py:226 core/column_headings.py:230 +msgid "Classification Description" +msgstr "" + +#: core/column_headings.py:18 core/column_headings.py:22 +#: core/column_headings.py:35 core/column_headings.py:39 +#: core/column_headings.py:84 core/column_headings.py:88 +#: core/column_headings.py:101 core/column_headings.py:105 +#: core/column_headings.py:210 core/column_headings.py:214 +#: core/column_headings.py:227 core/column_headings.py:231 +msgid "Classification Id" +msgstr "" + +#: core/column_headings.py:19 core/column_headings.py:23 +#: core/column_headings.py:36 core/column_headings.py:40 +#: core/column_headings.py:85 core/column_headings.py:89 +#: core/column_headings.py:102 core/column_headings.py:106 +#: core/column_headings.py:211 core/column_headings.py:215 +#: core/column_headings.py:228 core/column_headings.py:232 +msgid "Classification Scheme" +msgstr "" + +#: core/column_headings.py:20 core/column_headings.py:24 +#: core/column_headings.py:37 core/column_headings.py:41 +#: core/column_headings.py:86 core/column_headings.py:90 +#: core/column_headings.py:103 core/column_headings.py:107 +#: core/column_headings.py:212 core/column_headings.py:216 +#: core/column_headings.py:229 core/column_headings.py:233 +msgid "Classification Uri" +msgstr "" + +#: core/column_headings.py:25 core/column_headings.py:42 +#: core/column_headings.py:91 core/column_headings.py:108 +#: core/column_headings.py:217 core/column_headings.py:234 +msgid "Item Description" +msgstr "" + +#: core/column_headings.py:26 core/column_headings.py:43 +#: core/column_headings.py:92 core/column_headings.py:109 +#: core/column_headings.py:218 core/column_headings.py:235 +msgid "Item Id" +msgstr "" + +#: core/column_headings.py:27 core/column_headings.py:44 +#: core/column_headings.py:93 core/column_headings.py:110 +#: core/column_headings.py:219 core/column_headings.py:236 +msgid "Item Quantity" +msgstr "" + +#: core/column_headings.py:28 core/column_headings.py:45 +#: core/column_headings.py:94 core/column_headings.py:111 +#: core/column_headings.py:220 core/column_headings.py:237 +msgid "Unit Id" +msgstr "" + +#: core/column_headings.py:29 core/column_headings.py:46 +#: core/column_headings.py:95 core/column_headings.py:112 +#: core/column_headings.py:221 core/column_headings.py:238 +msgid "Unit Name" +msgstr "" + +#: core/column_headings.py:30 core/column_headings.py:47 +#: core/column_headings.py:96 core/column_headings.py:113 +#: core/column_headings.py:222 core/column_headings.py:239 +msgid "Unit Scheme" +msgstr "" + +#: core/column_headings.py:31 core/column_headings.py:48 +#: core/column_headings.py:97 core/column_headings.py:114 +#: core/column_headings.py:223 core/column_headings.py:240 +msgid "Unit Uri" +msgstr "" + +#: core/column_headings.py:32 core/column_headings.py:49 +#: core/column_headings.py:57 core/column_headings.py:71 +#: core/column_headings.py:81 core/column_headings.py:98 +#: core/column_headings.py:115 core/column_headings.py:135 +#: core/column_headings.py:224 core/column_headings.py:241 +#: core/column_headings.py:265 +msgid "Value Amount" +msgstr "" + +#: core/column_headings.py:33 core/column_headings.py:50 +#: core/column_headings.py:58 core/column_headings.py:72 +#: core/column_headings.py:82 core/column_headings.py:99 +#: core/column_headings.py:116 core/column_headings.py:136 +#: core/column_headings.py:225 core/column_headings.py:242 +#: core/column_headings.py:266 +msgid "Value Currency" +msgstr "" + +#: core/column_headings.py:51 +msgid "Award Status" +msgstr "" + +#: core/column_headings.py:52 core/column_headings.py:54 +#: core/column_headings.py:256 core/column_headings.py:258 +msgid "Organization Reference Id" +msgstr "" + +#: core/column_headings.py:53 core/column_headings.py:55 +#: core/column_headings.py:257 core/column_headings.py:259 +msgid "Organization Reference Name" +msgstr "" + +#: core/column_headings.py:56 +msgid "Award Title" +msgstr "" + +#: core/column_headings.py:59 +msgid "Contract Award Id" +msgstr "" + +#: core/column_headings.py:60 +msgid "Contract Date Signed" +msgstr "" + +#: core/column_headings.py:61 +msgid "Contract Description" +msgstr "" + +#: core/column_headings.py:62 +msgid "Contract Id" +msgstr "" + +#: core/column_headings.py:63 core/column_headings.py:73 +msgid "Transaction Information Date" +msgstr "" + +#: core/column_headings.py:64 core/column_headings.py:74 +msgid "Transaction Information Id" +msgstr "" + +#: core/column_headings.py:65 core/column_headings.py:75 +msgid "Payee Organization Id" +msgstr "" + +#: core/column_headings.py:66 core/column_headings.py:76 +msgid "Payee Organization Name" +msgstr "" + +#: core/column_headings.py:67 core/column_headings.py:77 +msgid "Payer Organization Id" +msgstr "" + +#: core/column_headings.py:68 core/column_headings.py:78 +msgid "Payer Organization Name" +msgstr "" + +#: core/column_headings.py:69 core/column_headings.py:79 +msgid "Transaction Information Data Source" +msgstr "" + +#: core/column_headings.py:70 core/column_headings.py:80 +msgid "Transaction Information Linked Spending" +msgstr "" + +#: core/column_headings.py:117 +msgid "Period Duration (days)" +msgstr "" + +#: core/column_headings.py:118 +msgid "Period End Date" +msgstr "" + +#: core/column_headings.py:119 +msgid "Period Maximum Extent" +msgstr "" + +#: core/column_headings.py:120 +msgid "Period Start Date" +msgstr "" + +#: core/column_headings.py:121 core/column_headings.py:127 +msgid "Related Process Relationship Id" +msgstr "" + +#: core/column_headings.py:122 core/column_headings.py:128 +msgid "Related Process Identifier" +msgstr "" + +#: core/column_headings.py:123 core/column_headings.py:129 +msgid "Related Process Relationship" +msgstr "" + +#: core/column_headings.py:124 core/column_headings.py:130 +msgid "Related Process Scheme" +msgstr "" + +#: core/column_headings.py:125 core/column_headings.py:131 +msgid "Related Process Title" +msgstr "" + +#: core/column_headings.py:126 core/column_headings.py:132 +msgid "Related Process Uri" +msgstr "" + +#: core/column_headings.py:133 +msgid "Contract Status" +msgstr "" + +#: core/column_headings.py:134 +msgid "Contract Title" +msgstr "" + +#: core/column_headings.py:137 +msgid "Document Date Modified" +msgstr "" + +#: core/column_headings.py:138 +msgid "Document Date Published" +msgstr "" + +#: core/column_headings.py:139 +msgid "Document Description" +msgstr "" + +#: core/column_headings.py:140 +msgid "Document Type" +msgstr "" + +#: core/column_headings.py:141 +msgid "Document Format" +msgstr "" + +#: core/column_headings.py:142 +msgid "Document Id" +msgstr "" + +#: core/column_headings.py:143 +msgid "Document Language" +msgstr "" + +#: core/column_headings.py:144 +msgid "Document Title" +msgstr "" + +#: core/column_headings.py:145 +msgid "Document Url" +msgstr "" + +#: core/column_headings.py:146 +msgid "Milestone Code" +msgstr "" + +#: core/column_headings.py:147 +msgid "Milestone Date Met" +msgstr "" + +#: core/column_headings.py:148 +msgid "Milestone Date Modified" +msgstr "" + +#: core/column_headings.py:149 +msgid "Milestone Description" +msgstr "" + +#: core/column_headings.py:150 +msgid "Milestone Due Date" +msgstr "" + +#: core/column_headings.py:151 +msgid "Milestone Id" +msgstr "" + +#: core/column_headings.py:152 +msgid "Milestone Status" +msgstr "" + +#: core/column_headings.py:153 +msgid "Milestone Title" +msgstr "" + +#: core/column_headings.py:154 +msgid "Milestone Type" +msgstr "" + +#: core/column_headings.py:155 core/column_headings.py:159 +msgid "Identifier Id" +msgstr "" + +#: core/column_headings.py:156 core/column_headings.py:160 +msgid "Identifier Legal Name" +msgstr "" + +#: core/column_headings.py:157 core/column_headings.py:161 +msgid "Identifier Scheme" +msgstr "" + +#: core/column_headings.py:158 core/column_headings.py:162 +msgid "Identifier Uri" +msgstr "" + +#: core/column_headings.py:163 +msgid "Address Country Name" +msgstr "" + +#: core/column_headings.py:164 +msgid "Address Locality" +msgstr "" + +#: core/column_headings.py:165 +msgid "Address Postal Code" +msgstr "" + +#: core/column_headings.py:166 +msgid "Address Region" +msgstr "" + +#: core/column_headings.py:167 +msgid "Address Street" +msgstr "" + +#: core/column_headings.py:168 +msgid "Contact Point Email" +msgstr "" + +#: core/column_headings.py:169 +msgid "Contact Point Fax Number" +msgstr "" + +#: core/column_headings.py:170 +msgid "Contact Point Name" +msgstr "" + +#: core/column_headings.py:171 +msgid "Contact Point Telephone" +msgstr "" + +#: core/column_headings.py:172 +msgid "Contact Point Url" +msgstr "" + +#: core/column_headings.py:173 +msgid "Organization Entity Id" +msgstr "" + +#: core/column_headings.py:174 +msgid "Primary Identifier Id" +msgstr "" + +#: core/column_headings.py:175 +msgid "Primary Identifier Legal Name" +msgstr "" + +#: core/column_headings.py:176 +msgid "Primary Identifier Scheme" +msgstr "" + +#: core/column_headings.py:177 +msgid "Primary Identifier Uri" +msgstr "" + +#: core/column_headings.py:178 +msgid "Organization Common Name" +msgstr "" + +#: core/column_headings.py:179 core/column_headings.py:180 +msgid "Organization Party Roles" +msgstr "" + +#: core/column_headings.py:181 +msgid "Amount" +msgstr "" + +#: core/column_headings.py:182 +msgid "Amount Currency" +msgstr "" + +#: core/column_headings.py:183 +msgid "Budget Source" +msgstr "" + +#: core/column_headings.py:184 +msgid "Budget Id" +msgstr "" + +#: core/column_headings.py:185 +msgid "Budget Project Title" +msgstr "" + +#: core/column_headings.py:186 +msgid "Budget Project Identifier" +msgstr "" + +#: core/column_headings.py:187 +msgid "Budget Linked Information" +msgstr "" + +#: core/column_headings.py:188 +msgid "Planning Rationale" +msgstr "" + +#: core/column_headings.py:189 core/column_headings.py:190 +msgid "Tender Additional Procurement Categories" +msgstr "" + +#: core/column_headings.py:191 +msgid "Tender Award Criteria" +msgstr "" + +#: core/column_headings.py:192 +msgid "Tender Award Criteria Details" +msgstr "" + +#: core/column_headings.py:193 +msgid "Evaluation And Award Period Duration (days)" +msgstr "" + +#: core/column_headings.py:194 +msgid "Evaluation And Award Period End Date" +msgstr "" + +#: core/column_headings.py:195 +msgid "Evaluation And Award Period Maximum Extent" +msgstr "" + +#: core/column_headings.py:196 +msgid "Evaluation And Award Period Start Date" +msgstr "" + +#: core/column_headings.py:201 +msgid "Tender Description" +msgstr "" + +#: core/column_headings.py:202 +msgid "Tender Eligibility Criteria" +msgstr "" + +#: core/column_headings.py:203 +msgid "Enquiry Period Duration (days)" +msgstr "" + +#: core/column_headings.py:204 +msgid "Enquiry Period End Date" +msgstr "" + +#: core/column_headings.py:205 +msgid "Enquiry Period Maximum Extent" +msgstr "" + +#: core/column_headings.py:206 +msgid "Enquiry Period Start Date" +msgstr "" + +#: core/column_headings.py:207 +msgid "Tender Has Enquiries?" +msgstr "" + +#: core/column_headings.py:208 +msgid "Tender Id" +msgstr "" + +#: core/column_headings.py:243 +msgid "Tender Main Procurement Category" +msgstr "" + +#: core/column_headings.py:244 +msgid "Minimum Value Amount" +msgstr "" + +#: core/column_headings.py:245 +msgid "Minimum Value Currency" +msgstr "" + +#: core/column_headings.py:246 +msgid "Tender Number Of Tenderers" +msgstr "" + +#: core/column_headings.py:247 +msgid "Tender Procurement Method" +msgstr "" + +#: core/column_headings.py:248 +msgid "Tender Procurement Method Details" +msgstr "" + +#: core/column_headings.py:249 +msgid "Tender Procurement Method Rationale" +msgstr "" + +#: core/column_headings.py:250 +msgid "Procuring Entity Organization Id" +msgstr "" + +#: core/column_headings.py:251 +msgid "Procuring Entity Organization Name" +msgstr "" + +#: core/column_headings.py:252 +msgid "Tender Status" +msgstr "" + +#: core/column_headings.py:253 core/column_headings.py:254 +msgid "Tender Submission Method" +msgstr "" + +#: core/column_headings.py:255 +msgid "Tender Submission Method Details" +msgstr "" + +#: core/column_headings.py:260 +msgid "Tender Period Duration (days)" +msgstr "" + +#: core/column_headings.py:261 +msgid "Tender Period End Date" +msgstr "" + +#: core/column_headings.py:262 +msgid "Tender Period Maximum Extent" +msgstr "" + +#: core/column_headings.py:263 +msgid "Tender Period Start Date" +msgstr "" + +#: core/column_headings.py:264 +msgid "Tender Title" +msgstr "" + +#: core/column_headings.py:267 +msgid "id" +msgstr "" + +#: core/column_headings.py:268 +msgid "ocid" +msgstr "" + +#: core/column_headings.py:269 +msgid "parentID" +msgstr "" + +#: core/column_headings.py:270 +msgid "rowID" +msgstr "" + +#: core/models.py:31 core/models.py:47 core/models.py:85 +msgid "Validation" +msgstr "" + +#: core/models.py:32 +msgid "Validations" +msgstr "" + +#: core/models.py:46 core/models.py:84 +msgid "Queued validation" +msgstr "" + +#: core/models.py:65 +msgid "Upload" +msgstr "" + +#: core/models.py:66 +msgid "Uploads" +msgstr "" + +#: core/models.py:81 +msgid "Queued download" +msgstr "" + +#: core/models.py:82 +msgid "Downloading analyzed data" +msgstr "" + +#: core/models.py:83 +msgid "Downloading" +msgstr "" + +#: core/models.py:86 core/models.py:187 +msgid "Failed" +msgstr "" + +#: core/models.py:116 +msgid "Url" +msgstr "" + +#: core/models.py:117 +msgid "Urls" +msgstr "" + +#: core/models.py:132 +msgid "Custom" +msgstr "" + +#: core/models.py:132 +msgid "OCDS Lite" +msgstr "" + +#: core/models.py:134 +msgid "Apply OCDS headings only" +msgstr "" + +#: core/models.py:135 +msgid "Apply English user friendly headings to all tables" +msgstr "" + +#: core/models.py:136 +msgid "Apply English R friendly headings to all tables" +msgstr "" + +#: core/models.py:137 +msgid "Apply Spanish user friendly headings to all tables" +msgstr "" + +#: core/models.py:138 +msgid "Apply Spanish R friendly headings to all tables" +msgstr "" + +#: core/models.py:148 +msgid "Data Selection" +msgstr "" + +#: core/models.py:149 +msgid "Data Selections" +msgstr "" + +#: core/models.py:179 +msgid "A comma-separated values (CSV) file" +msgstr "" + +#: core/models.py:179 +msgid "XLSX (Excel) file format" +msgstr "" + +#: core/models.py:186 +msgid "Completed" +msgstr "" + +#: core/models.py:188 +msgid "Processing" +msgstr "Processing" + +#: core/models.py:189 +msgid "Scheduled" +msgstr "Scheduled" + +#: core/models.py:207 +msgid "File" +msgstr "" + +#: core/models.py:208 +msgid "Files" +msgstr "" + +#: core/tasks.py:81 core/tasks.py:267 +#, python-format +msgid "Model %s for datasource not found" +msgstr "" + +#: core/tasks.py:157 core/tasks.py:440 +#, python-format +msgid "Datasource %s not found" +msgstr "" + +#: core/tasks.py:170 core/tasks.py:212 +#, python-format +msgid "Error while validating data `%s`" +msgstr "" + +#: core/tasks.py:190 core/tasks.py:460 core/tasks.py:594 core/views.py:99 +#: core/views.py:485 core/views.py:609 +msgid "Currently, the space limit was reached. Please try again later." +msgstr "" + +#: core/tasks.py:192 core/tasks.py:596 +msgid "" +"Something went wrong during processing of your file, please contact support" +msgstr "" + +#: core/tasks.py:309 core/tasks.py:370 +#, python-brace-format +msgid "{r.status_code}: {r.reason}" +msgstr "" + +#: core/views.py:56 +msgid "File is required" +msgstr "" + +#: core/views.py:59 +msgid "" +"Multi-upload feature is not available for file uploads yet. Stay tuned!" +msgstr "" + +#: core/views.py:105 +msgid "Error while receiving file. Contact our support service" +msgstr "" + +#: core/views.py:286 +msgid "Url is required" +msgstr "" + +#: core/views.py:344 +msgid "Datasource without available tables" +msgstr "" + +#: core/views.py:386 +#, python-format +msgid "Please use for column_heading value one of %s" +msgstr "" + +#: core/views.py:450 +#, python-brace-format +msgid "Cannot merge '{table.name}' - child arrays are too large" +msgstr "" + +#: core/views.py:475 core/views.py:599 +msgid "Datasource expired." +msgstr "" + +#: core/views.py:632 +msgid "Flatten request for this type already exists." +msgstr "" + +#: core/views.py:652 +#, python-format +msgid "You can't reschedule flatten in (%s) status" msgstr "" -#: spoonbill_web.settings.py:154 -msgid "Spanish" +#: core/views.py:657 +#, python-format +msgid "You can set status to %s only" msgstr "" diff --git a/spoonbill_web/locale/es/LC_MESSAGES/django.po b/spoonbill_web/locale/es/LC_MESSAGES/django.po index c1aa2423..45c43cfb 100644 --- a/spoonbill_web/locale/es/LC_MESSAGES/django.po +++ b/spoonbill_web/locale/es/LC_MESSAGES/django.po @@ -4,7 +4,7 @@ # FIRST AUTHOR , YEAR. # # Translators: -# Vitalii Martyniak , 2021 +# Zoriana Zaiats, 2021 # Yohanna Lisnichuk , 2021 # #, fuzzy @@ -13,7 +13,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-04-04 19:59+0000\n" -"PO-Revision-Date: 2021-04-06 08:03+0000\n" +"PO-Revision-Date: 2021-04-13 13:02+0000\n" "Last-Translator: Yohanna Lisnichuk , 2021\n" "Language-Team: Spanish (https://www.transifex.com/open-contracting-partnership-1/teams/117704/es/)\n" "MIME-Version: 1.0\n" @@ -22,10 +22,788 @@ msgstr "" "Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: spoonbill_web.settings.py:154 -msgid "English" -msgstr "Inglés" +#: core/column_headings.py:4 +msgid "Amendment Amended Release (identifier)" +msgstr "" + +#: core/column_headings.py:5 +msgid "Amendment Date" +msgstr "Enmienda Fecha" + +#: core/column_headings.py:6 +msgid "Amendment Description" +msgstr "Descripción de la enmienda" + +#: core/column_headings.py:7 +msgid "Amendment Id" +msgstr "ID de enmienda" + +#: core/column_headings.py:8 +msgid "Amendment Rationale" +msgstr "Justificación de la enmienda" + +#: core/column_headings.py:9 +msgid "Amendment Amending Release (identifier)" +msgstr "" + +#: core/column_headings.py:10 core/column_headings.py:197 +msgid "Contract Period Duration (days)" +msgstr "Duración del período de contrato (días)" + +#: core/column_headings.py:11 core/column_headings.py:198 +msgid "Contract Period End Date" +msgstr "Fecha de finalización del período del contrato" + +#: core/column_headings.py:12 core/column_headings.py:199 +msgid "Contract Period Maximum Extent" +msgstr "Extensión máxima del período del contrato" + +#: core/column_headings.py:13 core/column_headings.py:200 +msgid "Contract Period Start Date" +msgstr "Fecha de inicio del período del contrato" + +#: core/column_headings.py:14 +msgid "Award Date" +msgstr "Fecha de adjudicación" + +#: core/column_headings.py:15 +msgid "Award Description" +msgstr "Descripción" + +#: core/column_headings.py:16 +msgid "Award Id" +msgstr "ID de Adjudicación" + +#: core/column_headings.py:17 core/column_headings.py:21 +#: core/column_headings.py:34 core/column_headings.py:38 +#: core/column_headings.py:83 core/column_headings.py:87 +#: core/column_headings.py:100 core/column_headings.py:104 +#: core/column_headings.py:209 core/column_headings.py:213 +#: core/column_headings.py:226 core/column_headings.py:230 +msgid "Classification Description" +msgstr "Descripción de la clasificación" + +#: core/column_headings.py:18 core/column_headings.py:22 +#: core/column_headings.py:35 core/column_headings.py:39 +#: core/column_headings.py:84 core/column_headings.py:88 +#: core/column_headings.py:101 core/column_headings.py:105 +#: core/column_headings.py:210 core/column_headings.py:214 +#: core/column_headings.py:227 core/column_headings.py:231 +msgid "Classification Id" +msgstr "ID de clasificación" + +#: core/column_headings.py:19 core/column_headings.py:23 +#: core/column_headings.py:36 core/column_headings.py:40 +#: core/column_headings.py:85 core/column_headings.py:89 +#: core/column_headings.py:102 core/column_headings.py:106 +#: core/column_headings.py:211 core/column_headings.py:215 +#: core/column_headings.py:228 core/column_headings.py:232 +msgid "Classification Scheme" +msgstr "Esquema de clasificación" + +#: core/column_headings.py:20 core/column_headings.py:24 +#: core/column_headings.py:37 core/column_headings.py:41 +#: core/column_headings.py:86 core/column_headings.py:90 +#: core/column_headings.py:103 core/column_headings.py:107 +#: core/column_headings.py:212 core/column_headings.py:216 +#: core/column_headings.py:229 core/column_headings.py:233 +msgid "Classification Uri" +msgstr "Clasificación Uri" + +#: core/column_headings.py:25 core/column_headings.py:42 +#: core/column_headings.py:91 core/column_headings.py:108 +#: core/column_headings.py:217 core/column_headings.py:234 +msgid "Item Description" +msgstr "Descripción del Artículo" + +#: core/column_headings.py:26 core/column_headings.py:43 +#: core/column_headings.py:92 core/column_headings.py:109 +#: core/column_headings.py:218 core/column_headings.py:235 +msgid "Item Id" +msgstr "Identificación del artículo" + +#: core/column_headings.py:27 core/column_headings.py:44 +#: core/column_headings.py:93 core/column_headings.py:110 +#: core/column_headings.py:219 core/column_headings.py:236 +msgid "Item Quantity" +msgstr "Cantidad de articulos" + +#: core/column_headings.py:28 core/column_headings.py:45 +#: core/column_headings.py:94 core/column_headings.py:111 +#: core/column_headings.py:220 core/column_headings.py:237 +msgid "Unit Id" +msgstr "" + +#: core/column_headings.py:29 core/column_headings.py:46 +#: core/column_headings.py:95 core/column_headings.py:112 +#: core/column_headings.py:221 core/column_headings.py:238 +msgid "Unit Name" +msgstr "" + +#: core/column_headings.py:30 core/column_headings.py:47 +#: core/column_headings.py:96 core/column_headings.py:113 +#: core/column_headings.py:222 core/column_headings.py:239 +msgid "Unit Scheme" +msgstr "" + +#: core/column_headings.py:31 core/column_headings.py:48 +#: core/column_headings.py:97 core/column_headings.py:114 +#: core/column_headings.py:223 core/column_headings.py:240 +msgid "Unit Uri" +msgstr "" + +#: core/column_headings.py:32 core/column_headings.py:49 +#: core/column_headings.py:57 core/column_headings.py:71 +#: core/column_headings.py:81 core/column_headings.py:98 +#: core/column_headings.py:115 core/column_headings.py:135 +#: core/column_headings.py:224 core/column_headings.py:241 +#: core/column_headings.py:265 +msgid "Value Amount" +msgstr "" + +#: core/column_headings.py:33 core/column_headings.py:50 +#: core/column_headings.py:58 core/column_headings.py:72 +#: core/column_headings.py:82 core/column_headings.py:99 +#: core/column_headings.py:116 core/column_headings.py:136 +#: core/column_headings.py:225 core/column_headings.py:242 +#: core/column_headings.py:266 +msgid "Value Currency" +msgstr "" + +#: core/column_headings.py:51 +msgid "Award Status" +msgstr "" + +#: core/column_headings.py:52 core/column_headings.py:54 +#: core/column_headings.py:256 core/column_headings.py:258 +msgid "Organization Reference Id" +msgstr "" + +#: core/column_headings.py:53 core/column_headings.py:55 +#: core/column_headings.py:257 core/column_headings.py:259 +msgid "Organization Reference Name" +msgstr "" + +#: core/column_headings.py:56 +msgid "Award Title" +msgstr "" + +#: core/column_headings.py:59 +msgid "Contract Award Id" +msgstr "" + +#: core/column_headings.py:60 +msgid "Contract Date Signed" +msgstr "" + +#: core/column_headings.py:61 +msgid "Contract Description" +msgstr "" + +#: core/column_headings.py:62 +msgid "Contract Id" +msgstr "" + +#: core/column_headings.py:63 core/column_headings.py:73 +msgid "Transaction Information Date" +msgstr "" + +#: core/column_headings.py:64 core/column_headings.py:74 +msgid "Transaction Information Id" +msgstr "" + +#: core/column_headings.py:65 core/column_headings.py:75 +msgid "Payee Organization Id" +msgstr "" + +#: core/column_headings.py:66 core/column_headings.py:76 +msgid "Payee Organization Name" +msgstr "" + +#: core/column_headings.py:67 core/column_headings.py:77 +msgid "Payer Organization Id" +msgstr "" + +#: core/column_headings.py:68 core/column_headings.py:78 +msgid "Payer Organization Name" +msgstr "" + +#: core/column_headings.py:69 core/column_headings.py:79 +msgid "Transaction Information Data Source" +msgstr "" + +#: core/column_headings.py:70 core/column_headings.py:80 +msgid "Transaction Information Linked Spending" +msgstr "" + +#: core/column_headings.py:117 +msgid "Period Duration (days)" +msgstr "" + +#: core/column_headings.py:118 +msgid "Period End Date" +msgstr "" + +#: core/column_headings.py:119 +msgid "Period Maximum Extent" +msgstr "" + +#: core/column_headings.py:120 +msgid "Period Start Date" +msgstr "" + +#: core/column_headings.py:121 core/column_headings.py:127 +msgid "Related Process Relationship Id" +msgstr "" + +#: core/column_headings.py:122 core/column_headings.py:128 +msgid "Related Process Identifier" +msgstr "" + +#: core/column_headings.py:123 core/column_headings.py:129 +msgid "Related Process Relationship" +msgstr "" + +#: core/column_headings.py:124 core/column_headings.py:130 +msgid "Related Process Scheme" +msgstr "" + +#: core/column_headings.py:125 core/column_headings.py:131 +msgid "Related Process Title" +msgstr "" + +#: core/column_headings.py:126 core/column_headings.py:132 +msgid "Related Process Uri" +msgstr "" + +#: core/column_headings.py:133 +msgid "Contract Status" +msgstr "" + +#: core/column_headings.py:134 +msgid "Contract Title" +msgstr "" + +#: core/column_headings.py:137 +msgid "Document Date Modified" +msgstr "" + +#: core/column_headings.py:138 +msgid "Document Date Published" +msgstr "" + +#: core/column_headings.py:139 +msgid "Document Description" +msgstr "" + +#: core/column_headings.py:140 +msgid "Document Type" +msgstr "Tipo de Documento" + +#: core/column_headings.py:141 +msgid "Document Format" +msgstr "Formato" + +#: core/column_headings.py:142 +msgid "Document Id" +msgstr "ID de Documento" + +#: core/column_headings.py:143 +msgid "Document Language" +msgstr "" + +#: core/column_headings.py:144 +msgid "Document Title" +msgstr "" + +#: core/column_headings.py:145 +msgid "Document Url" +msgstr "" + +#: core/column_headings.py:146 +msgid "Milestone Code" +msgstr "" + +#: core/column_headings.py:147 +msgid "Milestone Date Met" +msgstr "" + +#: core/column_headings.py:148 +msgid "Milestone Date Modified" +msgstr "" + +#: core/column_headings.py:149 +msgid "Milestone Description" +msgstr "" + +#: core/column_headings.py:150 +msgid "Milestone Due Date" +msgstr "" + +#: core/column_headings.py:151 +msgid "Milestone Id" +msgstr "" + +#: core/column_headings.py:152 +msgid "Milestone Status" +msgstr "" + +#: core/column_headings.py:153 +msgid "Milestone Title" +msgstr "" + +#: core/column_headings.py:154 +msgid "Milestone Type" +msgstr "" + +#: core/column_headings.py:155 core/column_headings.py:159 +msgid "Identifier Id" +msgstr "" + +#: core/column_headings.py:156 core/column_headings.py:160 +msgid "Identifier Legal Name" +msgstr "" + +#: core/column_headings.py:157 core/column_headings.py:161 +msgid "Identifier Scheme" +msgstr "" + +#: core/column_headings.py:158 core/column_headings.py:162 +msgid "Identifier Uri" +msgstr "" + +#: core/column_headings.py:163 +msgid "Address Country Name" +msgstr "" + +#: core/column_headings.py:164 +msgid "Address Locality" +msgstr "" + +#: core/column_headings.py:165 +msgid "Address Postal Code" +msgstr "" + +#: core/column_headings.py:166 +msgid "Address Region" +msgstr "" + +#: core/column_headings.py:167 +msgid "Address Street" +msgstr "" + +#: core/column_headings.py:168 +msgid "Contact Point Email" +msgstr "" + +#: core/column_headings.py:169 +msgid "Contact Point Fax Number" +msgstr "" + +#: core/column_headings.py:170 +msgid "Contact Point Name" +msgstr "" + +#: core/column_headings.py:171 +msgid "Contact Point Telephone" +msgstr "" + +#: core/column_headings.py:172 +msgid "Contact Point Url" +msgstr "" + +#: core/column_headings.py:173 +msgid "Organization Entity Id" +msgstr "" + +#: core/column_headings.py:174 +msgid "Primary Identifier Id" +msgstr "" + +#: core/column_headings.py:175 +msgid "Primary Identifier Legal Name" +msgstr "" + +#: core/column_headings.py:176 +msgid "Primary Identifier Scheme" +msgstr "" + +#: core/column_headings.py:177 +msgid "Primary Identifier Uri" +msgstr "" + +#: core/column_headings.py:178 +msgid "Organization Common Name" +msgstr "" + +#: core/column_headings.py:179 core/column_headings.py:180 +msgid "Organization Party Roles" +msgstr "" + +#: core/column_headings.py:181 +msgid "Amount" +msgstr "Monto" + +#: core/column_headings.py:182 +msgid "Amount Currency" +msgstr "Moneda" + +#: core/column_headings.py:183 +msgid "Budget Source" +msgstr "Fuente de los Datos" + +#: core/column_headings.py:184 +msgid "Budget Id" +msgstr "" + +#: core/column_headings.py:185 +msgid "Budget Project Title" +msgstr "" + +#: core/column_headings.py:186 +msgid "Budget Project Identifier" +msgstr "" + +#: core/column_headings.py:187 +msgid "Budget Linked Information" +msgstr "" + +#: core/column_headings.py:188 +msgid "Planning Rationale" +msgstr "" + +#: core/column_headings.py:189 core/column_headings.py:190 +msgid "Tender Additional Procurement Categories" +msgstr "" + +#: core/column_headings.py:191 +msgid "Tender Award Criteria" +msgstr "" + +#: core/column_headings.py:192 +msgid "Tender Award Criteria Details" +msgstr "" + +#: core/column_headings.py:193 +msgid "Evaluation And Award Period Duration (days)" +msgstr "" + +#: core/column_headings.py:194 +msgid "Evaluation And Award Period End Date" +msgstr "" + +#: core/column_headings.py:195 +msgid "Evaluation And Award Period Maximum Extent" +msgstr "" + +#: core/column_headings.py:196 +msgid "Evaluation And Award Period Start Date" +msgstr "" + +#: core/column_headings.py:201 +msgid "Tender Description" +msgstr "" + +#: core/column_headings.py:202 +msgid "Tender Eligibility Criteria" +msgstr "" + +#: core/column_headings.py:203 +msgid "Enquiry Period Duration (days)" +msgstr "" + +#: core/column_headings.py:204 +msgid "Enquiry Period End Date" +msgstr "" + +#: core/column_headings.py:205 +msgid "Enquiry Period Maximum Extent" +msgstr "" + +#: core/column_headings.py:206 +msgid "Enquiry Period Start Date" +msgstr "" + +#: core/column_headings.py:207 +msgid "Tender Has Enquiries?" +msgstr "" + +#: core/column_headings.py:208 +msgid "Tender Id" +msgstr "Licitación ID" + +#: core/column_headings.py:243 +msgid "Tender Main Procurement Category" +msgstr "" + +#: core/column_headings.py:244 +msgid "Minimum Value Amount" +msgstr "" + +#: core/column_headings.py:245 +msgid "Minimum Value Currency" +msgstr "" + +#: core/column_headings.py:246 +msgid "Tender Number Of Tenderers" +msgstr "" + +#: core/column_headings.py:247 +msgid "Tender Procurement Method" +msgstr "" + +#: core/column_headings.py:248 +msgid "Tender Procurement Method Details" +msgstr "" + +#: core/column_headings.py:249 +msgid "Tender Procurement Method Rationale" +msgstr "" + +#: core/column_headings.py:250 +msgid "Procuring Entity Organization Id" +msgstr "" + +#: core/column_headings.py:251 +msgid "Procuring Entity Organization Name" +msgstr "" + +#: core/column_headings.py:252 +msgid "Tender Status" +msgstr "" + +#: core/column_headings.py:253 core/column_headings.py:254 +msgid "Tender Submission Method" +msgstr "" + +#: core/column_headings.py:255 +msgid "Tender Submission Method Details" +msgstr "" + +#: core/column_headings.py:260 +msgid "Tender Period Duration (days)" +msgstr "" + +#: core/column_headings.py:261 +msgid "Tender Period End Date" +msgstr "" + +#: core/column_headings.py:262 +msgid "Tender Period Maximum Extent" +msgstr "" + +#: core/column_headings.py:263 +msgid "Tender Period Start Date" +msgstr "" + +#: core/column_headings.py:264 +msgid "Tender Title" +msgstr "Título de la licitación" + +#: core/column_headings.py:267 +msgid "id" +msgstr "" + +#: core/column_headings.py:268 +msgid "ocid" +msgstr "" + +#: core/column_headings.py:269 +msgid "parentID" +msgstr "" + +#: core/column_headings.py:270 +msgid "rowID" +msgstr "" + +#: core/models.py:31 core/models.py:47 core/models.py:85 +msgid "Validation" +msgstr "Validación" + +#: core/models.py:32 +msgid "Validations" +msgstr "Validaciones" + +#: core/models.py:46 core/models.py:84 +msgid "Queued validation" +msgstr "Validación en cola" + +#: core/models.py:65 +msgid "Upload" +msgstr "Cargar" + +#: core/models.py:66 +msgid "Uploads" +msgstr "Subidas" + +#: core/models.py:81 +msgid "Queued download" +msgstr "Descarga en cola" + +#: core/models.py:82 +msgid "Downloading analyzed data" +msgstr "Descarga de datos analizados" + +#: core/models.py:83 +msgid "Downloading" +msgstr "Descargando" + +#: core/models.py:86 core/models.py:187 +msgid "Failed" +msgstr "Fallido" + +#: core/models.py:116 +msgid "Url" +msgstr "Url" + +#: core/models.py:117 +msgid "Urls" +msgstr "Urls" + +#: core/models.py:132 +msgid "Custom" +msgstr "Personalizado" + +#: core/models.py:132 +msgid "OCDS Lite" +msgstr "OCDS Lite" + +#: core/models.py:134 +msgid "Apply OCDS headings only" +msgstr "Aplicar solo encabezados OCDS" + +#: core/models.py:135 +msgid "Apply English user friendly headings to all tables" +msgstr "Aplicar encabezados amigables en inglés a todas las tablas" + +#: core/models.py:136 +msgid "Apply English R friendly headings to all tables" +msgstr "Aplicar encabezados en formato R en inglés a todas las tablas" + +#: core/models.py:137 +msgid "Apply Spanish user friendly headings to all tables" +msgstr "Aplicar encabezados amigables en español a todas las tablas" + +#: core/models.py:138 +msgid "Apply Spanish R friendly headings to all tables" +msgstr "Aplicar encabezados en formato R en español a todas las tablas" + +#: core/models.py:148 +msgid "Data Selection" +msgstr "Selección de datos" + +#: core/models.py:149 +msgid "Data Selections" +msgstr "Selecciones de datos" + +#: core/models.py:179 +msgid "A comma-separated values (CSV) file" +msgstr "Un archivo de valores separados por comas (CSV)" + +#: core/models.py:179 +msgid "XLSX (Excel) file format" +msgstr "Un archivo en formato XLSX (Excel)" + +#: core/models.py:186 +msgid "Completed" +msgstr "Completado" + +#: core/models.py:188 +msgid "Processing" +msgstr "Procesando" + +#: core/models.py:189 +msgid "Scheduled" +msgstr "Programado" + +#: core/models.py:207 +msgid "File" +msgstr "" + +#: core/models.py:208 +msgid "Files" +msgstr "" + +#: core/tasks.py:81 core/tasks.py:267 +#, python-format +msgid "Model %s for datasource not found" +msgstr "Modelo %s no encontrado para el conjunto de datos" + +#: core/tasks.py:157 core/tasks.py:440 +#, python-format +msgid "Datasource %s not found" +msgstr "Conjunto de datos %s no encontrado" + +#: core/tasks.py:170 core/tasks.py:212 +#, python-format +msgid "Error while validating data `%s`" +msgstr "Error validando datos `%s`" + +#: core/tasks.py:190 core/tasks.py:460 core/tasks.py:594 core/views.py:99 +#: core/views.py:485 core/views.py:609 +msgid "Currently, the space limit was reached. Please try again later." +msgstr "" +"En este momento, se alcanzó el límite de espacio. Por favor, inténtelo de " +"nuevo más tarde." + +#: core/tasks.py:192 core/tasks.py:596 +msgid "" +"Something went wrong during processing of your file, please contact support" +msgstr "" + +#: core/tasks.py:309 core/tasks.py:370 +#, python-brace-format +msgid "{r.status_code}: {r.reason}" +msgstr "{r.status_code}: {r.reason}" + +#: core/views.py:56 +msgid "File is required" +msgstr "Se requiere un archivo" + +#: core/views.py:59 +msgid "" +"Multi-upload feature is not available for file uploads yet. Stay tuned!" +msgstr "" +"La carga de archivos múltiples no está disponible aún. Manténganse al tanto!" + +#: core/views.py:105 +msgid "Error while receiving file. Contact our support service" +msgstr "" +"Error al recibir el archivo. Póngase en contacto con nuestro servicio de " +"soporte" + +#: core/views.py:286 +msgid "Url is required" +msgstr "Se requiere una URL" + +#: core/views.py:344 +msgid "Datasource without available tables" +msgstr "Conjunto de datos sin tablas disponibles" + +#: core/views.py:386 +#, python-format +msgid "Please use for column_heading value one of %s" +msgstr "Por favor, use como valor de column_heading uno de %s" + +#: core/views.py:450 +#, python-brace-format +msgid "Cannot merge '{table.name}' - child arrays are too large" +msgstr "" + +#: core/views.py:475 core/views.py:599 +msgid "Datasource expired." +msgstr "Conjunto de datos expirado." + +#: core/views.py:632 +msgid "Flatten request for this type already exists." +msgstr "Ya existe una solicitud de aplanado de este tipo." + +#: core/views.py:652 +#, python-format +msgid "You can't reschedule flatten in (%s) status" +msgstr "No puede reprogramar un aplanado en el estado (%s)" -#: spoonbill_web.settings.py:154 -msgid "Spanish" -msgstr "Español" +#: core/views.py:657 +#, python-format +msgid "You can set status to %s only" +msgstr "Puede establecer el estado solo a %s" diff --git a/spoonbill_web/locale/ru/LC_MESSAGES/django.po b/spoonbill_web/locale/ru/LC_MESSAGES/django.po index 6c74377f..f86390f5 100644 --- a/spoonbill_web/locale/ru/LC_MESSAGES/django.po +++ b/spoonbill_web/locale/ru/LC_MESSAGES/django.po @@ -3,17 +3,13 @@ # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # -# Translators: -# Viktor Nestulia , 2021 -# #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-04-04 19:59+0000\n" -"PO-Revision-Date: 2021-04-06 08:03+0000\n" -"Last-Translator: Viktor Nestulia , 2021\n" +"PO-Revision-Date: 2021-04-13 13:02+0000\n" "Language-Team: Russian (https://www.transifex.com/open-contracting-partnership-1/teams/117704/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,10 +17,783 @@ msgstr "" "Language: ru\n" "Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n" -#: spoonbill_web.settings.py:154 -msgid "English" -msgstr "Английский" +#: core/column_headings.py:4 +msgid "Amendment Amended Release (identifier)" +msgstr "" + +#: core/column_headings.py:5 +msgid "Amendment Date" +msgstr "" + +#: core/column_headings.py:6 +msgid "Amendment Description" +msgstr "" + +#: core/column_headings.py:7 +msgid "Amendment Id" +msgstr "" + +#: core/column_headings.py:8 +msgid "Amendment Rationale" +msgstr "" + +#: core/column_headings.py:9 +msgid "Amendment Amending Release (identifier)" +msgstr "" + +#: core/column_headings.py:10 core/column_headings.py:197 +msgid "Contract Period Duration (days)" +msgstr "" + +#: core/column_headings.py:11 core/column_headings.py:198 +msgid "Contract Period End Date" +msgstr "" + +#: core/column_headings.py:12 core/column_headings.py:199 +msgid "Contract Period Maximum Extent" +msgstr "" + +#: core/column_headings.py:13 core/column_headings.py:200 +msgid "Contract Period Start Date" +msgstr "" + +#: core/column_headings.py:14 +msgid "Award Date" +msgstr "" + +#: core/column_headings.py:15 +msgid "Award Description" +msgstr "" + +#: core/column_headings.py:16 +msgid "Award Id" +msgstr "" + +#: core/column_headings.py:17 core/column_headings.py:21 +#: core/column_headings.py:34 core/column_headings.py:38 +#: core/column_headings.py:83 core/column_headings.py:87 +#: core/column_headings.py:100 core/column_headings.py:104 +#: core/column_headings.py:209 core/column_headings.py:213 +#: core/column_headings.py:226 core/column_headings.py:230 +msgid "Classification Description" +msgstr "" + +#: core/column_headings.py:18 core/column_headings.py:22 +#: core/column_headings.py:35 core/column_headings.py:39 +#: core/column_headings.py:84 core/column_headings.py:88 +#: core/column_headings.py:101 core/column_headings.py:105 +#: core/column_headings.py:210 core/column_headings.py:214 +#: core/column_headings.py:227 core/column_headings.py:231 +msgid "Classification Id" +msgstr "" + +#: core/column_headings.py:19 core/column_headings.py:23 +#: core/column_headings.py:36 core/column_headings.py:40 +#: core/column_headings.py:85 core/column_headings.py:89 +#: core/column_headings.py:102 core/column_headings.py:106 +#: core/column_headings.py:211 core/column_headings.py:215 +#: core/column_headings.py:228 core/column_headings.py:232 +msgid "Classification Scheme" +msgstr "" + +#: core/column_headings.py:20 core/column_headings.py:24 +#: core/column_headings.py:37 core/column_headings.py:41 +#: core/column_headings.py:86 core/column_headings.py:90 +#: core/column_headings.py:103 core/column_headings.py:107 +#: core/column_headings.py:212 core/column_headings.py:216 +#: core/column_headings.py:229 core/column_headings.py:233 +msgid "Classification Uri" +msgstr "" + +#: core/column_headings.py:25 core/column_headings.py:42 +#: core/column_headings.py:91 core/column_headings.py:108 +#: core/column_headings.py:217 core/column_headings.py:234 +msgid "Item Description" +msgstr "" + +#: core/column_headings.py:26 core/column_headings.py:43 +#: core/column_headings.py:92 core/column_headings.py:109 +#: core/column_headings.py:218 core/column_headings.py:235 +msgid "Item Id" +msgstr "" + +#: core/column_headings.py:27 core/column_headings.py:44 +#: core/column_headings.py:93 core/column_headings.py:110 +#: core/column_headings.py:219 core/column_headings.py:236 +msgid "Item Quantity" +msgstr "" + +#: core/column_headings.py:28 core/column_headings.py:45 +#: core/column_headings.py:94 core/column_headings.py:111 +#: core/column_headings.py:220 core/column_headings.py:237 +msgid "Unit Id" +msgstr "" + +#: core/column_headings.py:29 core/column_headings.py:46 +#: core/column_headings.py:95 core/column_headings.py:112 +#: core/column_headings.py:221 core/column_headings.py:238 +msgid "Unit Name" +msgstr "" + +#: core/column_headings.py:30 core/column_headings.py:47 +#: core/column_headings.py:96 core/column_headings.py:113 +#: core/column_headings.py:222 core/column_headings.py:239 +msgid "Unit Scheme" +msgstr "" + +#: core/column_headings.py:31 core/column_headings.py:48 +#: core/column_headings.py:97 core/column_headings.py:114 +#: core/column_headings.py:223 core/column_headings.py:240 +msgid "Unit Uri" +msgstr "" + +#: core/column_headings.py:32 core/column_headings.py:49 +#: core/column_headings.py:57 core/column_headings.py:71 +#: core/column_headings.py:81 core/column_headings.py:98 +#: core/column_headings.py:115 core/column_headings.py:135 +#: core/column_headings.py:224 core/column_headings.py:241 +#: core/column_headings.py:265 +msgid "Value Amount" +msgstr "" + +#: core/column_headings.py:33 core/column_headings.py:50 +#: core/column_headings.py:58 core/column_headings.py:72 +#: core/column_headings.py:82 core/column_headings.py:99 +#: core/column_headings.py:116 core/column_headings.py:136 +#: core/column_headings.py:225 core/column_headings.py:242 +#: core/column_headings.py:266 +msgid "Value Currency" +msgstr "" + +#: core/column_headings.py:51 +msgid "Award Status" +msgstr "" + +#: core/column_headings.py:52 core/column_headings.py:54 +#: core/column_headings.py:256 core/column_headings.py:258 +msgid "Organization Reference Id" +msgstr "" + +#: core/column_headings.py:53 core/column_headings.py:55 +#: core/column_headings.py:257 core/column_headings.py:259 +msgid "Organization Reference Name" +msgstr "" + +#: core/column_headings.py:56 +msgid "Award Title" +msgstr "" + +#: core/column_headings.py:59 +msgid "Contract Award Id" +msgstr "" + +#: core/column_headings.py:60 +msgid "Contract Date Signed" +msgstr "" + +#: core/column_headings.py:61 +msgid "Contract Description" +msgstr "" + +#: core/column_headings.py:62 +msgid "Contract Id" +msgstr "" + +#: core/column_headings.py:63 core/column_headings.py:73 +msgid "Transaction Information Date" +msgstr "" + +#: core/column_headings.py:64 core/column_headings.py:74 +msgid "Transaction Information Id" +msgstr "" + +#: core/column_headings.py:65 core/column_headings.py:75 +msgid "Payee Organization Id" +msgstr "" + +#: core/column_headings.py:66 core/column_headings.py:76 +msgid "Payee Organization Name" +msgstr "" + +#: core/column_headings.py:67 core/column_headings.py:77 +msgid "Payer Organization Id" +msgstr "" + +#: core/column_headings.py:68 core/column_headings.py:78 +msgid "Payer Organization Name" +msgstr "" + +#: core/column_headings.py:69 core/column_headings.py:79 +msgid "Transaction Information Data Source" +msgstr "" + +#: core/column_headings.py:70 core/column_headings.py:80 +msgid "Transaction Information Linked Spending" +msgstr "" + +#: core/column_headings.py:117 +msgid "Period Duration (days)" +msgstr "" + +#: core/column_headings.py:118 +msgid "Period End Date" +msgstr "" + +#: core/column_headings.py:119 +msgid "Period Maximum Extent" +msgstr "" + +#: core/column_headings.py:120 +msgid "Period Start Date" +msgstr "" + +#: core/column_headings.py:121 core/column_headings.py:127 +msgid "Related Process Relationship Id" +msgstr "" + +#: core/column_headings.py:122 core/column_headings.py:128 +msgid "Related Process Identifier" +msgstr "" + +#: core/column_headings.py:123 core/column_headings.py:129 +msgid "Related Process Relationship" +msgstr "" + +#: core/column_headings.py:124 core/column_headings.py:130 +msgid "Related Process Scheme" +msgstr "" + +#: core/column_headings.py:125 core/column_headings.py:131 +msgid "Related Process Title" +msgstr "" + +#: core/column_headings.py:126 core/column_headings.py:132 +msgid "Related Process Uri" +msgstr "" + +#: core/column_headings.py:133 +msgid "Contract Status" +msgstr "" + +#: core/column_headings.py:134 +msgid "Contract Title" +msgstr "" + +#: core/column_headings.py:137 +msgid "Document Date Modified" +msgstr "" + +#: core/column_headings.py:138 +msgid "Document Date Published" +msgstr "" + +#: core/column_headings.py:139 +msgid "Document Description" +msgstr "" + +#: core/column_headings.py:140 +msgid "Document Type" +msgstr "" + +#: core/column_headings.py:141 +msgid "Document Format" +msgstr "" + +#: core/column_headings.py:142 +msgid "Document Id" +msgstr "" + +#: core/column_headings.py:143 +msgid "Document Language" +msgstr "" + +#: core/column_headings.py:144 +msgid "Document Title" +msgstr "" + +#: core/column_headings.py:145 +msgid "Document Url" +msgstr "" + +#: core/column_headings.py:146 +msgid "Milestone Code" +msgstr "" + +#: core/column_headings.py:147 +msgid "Milestone Date Met" +msgstr "" + +#: core/column_headings.py:148 +msgid "Milestone Date Modified" +msgstr "" + +#: core/column_headings.py:149 +msgid "Milestone Description" +msgstr "" + +#: core/column_headings.py:150 +msgid "Milestone Due Date" +msgstr "" + +#: core/column_headings.py:151 +msgid "Milestone Id" +msgstr "" + +#: core/column_headings.py:152 +msgid "Milestone Status" +msgstr "" + +#: core/column_headings.py:153 +msgid "Milestone Title" +msgstr "" + +#: core/column_headings.py:154 +msgid "Milestone Type" +msgstr "" + +#: core/column_headings.py:155 core/column_headings.py:159 +msgid "Identifier Id" +msgstr "" + +#: core/column_headings.py:156 core/column_headings.py:160 +msgid "Identifier Legal Name" +msgstr "" + +#: core/column_headings.py:157 core/column_headings.py:161 +msgid "Identifier Scheme" +msgstr "" + +#: core/column_headings.py:158 core/column_headings.py:162 +msgid "Identifier Uri" +msgstr "" + +#: core/column_headings.py:163 +msgid "Address Country Name" +msgstr "" + +#: core/column_headings.py:164 +msgid "Address Locality" +msgstr "" + +#: core/column_headings.py:165 +msgid "Address Postal Code" +msgstr "" + +#: core/column_headings.py:166 +msgid "Address Region" +msgstr "" + +#: core/column_headings.py:167 +msgid "Address Street" +msgstr "" + +#: core/column_headings.py:168 +msgid "Contact Point Email" +msgstr "" + +#: core/column_headings.py:169 +msgid "Contact Point Fax Number" +msgstr "" + +#: core/column_headings.py:170 +msgid "Contact Point Name" +msgstr "" + +#: core/column_headings.py:171 +msgid "Contact Point Telephone" +msgstr "" + +#: core/column_headings.py:172 +msgid "Contact Point Url" +msgstr "" + +#: core/column_headings.py:173 +msgid "Organization Entity Id" +msgstr "" + +#: core/column_headings.py:174 +msgid "Primary Identifier Id" +msgstr "" + +#: core/column_headings.py:175 +msgid "Primary Identifier Legal Name" +msgstr "" + +#: core/column_headings.py:176 +msgid "Primary Identifier Scheme" +msgstr "" + +#: core/column_headings.py:177 +msgid "Primary Identifier Uri" +msgstr "" -#: spoonbill_web.settings.py:154 -msgid "Spanish" -msgstr "Испанский" +#: core/column_headings.py:178 +msgid "Organization Common Name" +msgstr "" + +#: core/column_headings.py:179 core/column_headings.py:180 +msgid "Organization Party Roles" +msgstr "" + +#: core/column_headings.py:181 +msgid "Amount" +msgstr "" + +#: core/column_headings.py:182 +msgid "Amount Currency" +msgstr "" + +#: core/column_headings.py:183 +msgid "Budget Source" +msgstr "" + +#: core/column_headings.py:184 +msgid "Budget Id" +msgstr "" + +#: core/column_headings.py:185 +msgid "Budget Project Title" +msgstr "" + +#: core/column_headings.py:186 +msgid "Budget Project Identifier" +msgstr "" + +#: core/column_headings.py:187 +msgid "Budget Linked Information" +msgstr "" + +#: core/column_headings.py:188 +msgid "Planning Rationale" +msgstr "" + +#: core/column_headings.py:189 core/column_headings.py:190 +msgid "Tender Additional Procurement Categories" +msgstr "" + +#: core/column_headings.py:191 +msgid "Tender Award Criteria" +msgstr "" + +#: core/column_headings.py:192 +msgid "Tender Award Criteria Details" +msgstr "" + +#: core/column_headings.py:193 +msgid "Evaluation And Award Period Duration (days)" +msgstr "" + +#: core/column_headings.py:194 +msgid "Evaluation And Award Period End Date" +msgstr "" + +#: core/column_headings.py:195 +msgid "Evaluation And Award Period Maximum Extent" +msgstr "" + +#: core/column_headings.py:196 +msgid "Evaluation And Award Period Start Date" +msgstr "" + +#: core/column_headings.py:201 +msgid "Tender Description" +msgstr "" + +#: core/column_headings.py:202 +msgid "Tender Eligibility Criteria" +msgstr "" + +#: core/column_headings.py:203 +msgid "Enquiry Period Duration (days)" +msgstr "" + +#: core/column_headings.py:204 +msgid "Enquiry Period End Date" +msgstr "" + +#: core/column_headings.py:205 +msgid "Enquiry Period Maximum Extent" +msgstr "" + +#: core/column_headings.py:206 +msgid "Enquiry Period Start Date" +msgstr "" + +#: core/column_headings.py:207 +msgid "Tender Has Enquiries?" +msgstr "" + +#: core/column_headings.py:208 +msgid "Tender Id" +msgstr "" + +#: core/column_headings.py:243 +msgid "Tender Main Procurement Category" +msgstr "" + +#: core/column_headings.py:244 +msgid "Minimum Value Amount" +msgstr "" + +#: core/column_headings.py:245 +msgid "Minimum Value Currency" +msgstr "" + +#: core/column_headings.py:246 +msgid "Tender Number Of Tenderers" +msgstr "" + +#: core/column_headings.py:247 +msgid "Tender Procurement Method" +msgstr "" + +#: core/column_headings.py:248 +msgid "Tender Procurement Method Details" +msgstr "" + +#: core/column_headings.py:249 +msgid "Tender Procurement Method Rationale" +msgstr "" + +#: core/column_headings.py:250 +msgid "Procuring Entity Organization Id" +msgstr "" + +#: core/column_headings.py:251 +msgid "Procuring Entity Organization Name" +msgstr "" + +#: core/column_headings.py:252 +msgid "Tender Status" +msgstr "" + +#: core/column_headings.py:253 core/column_headings.py:254 +msgid "Tender Submission Method" +msgstr "" + +#: core/column_headings.py:255 +msgid "Tender Submission Method Details" +msgstr "" + +#: core/column_headings.py:260 +msgid "Tender Period Duration (days)" +msgstr "" + +#: core/column_headings.py:261 +msgid "Tender Period End Date" +msgstr "" + +#: core/column_headings.py:262 +msgid "Tender Period Maximum Extent" +msgstr "" + +#: core/column_headings.py:263 +msgid "Tender Period Start Date" +msgstr "" + +#: core/column_headings.py:264 +msgid "Tender Title" +msgstr "" + +#: core/column_headings.py:267 +msgid "id" +msgstr "" + +#: core/column_headings.py:268 +msgid "ocid" +msgstr "" + +#: core/column_headings.py:269 +msgid "parentID" +msgstr "" + +#: core/column_headings.py:270 +msgid "rowID" +msgstr "" + +#: core/models.py:31 core/models.py:47 core/models.py:85 +msgid "Validation" +msgstr "" + +#: core/models.py:32 +msgid "Validations" +msgstr "" + +#: core/models.py:46 core/models.py:84 +msgid "Queued validation" +msgstr "" + +#: core/models.py:65 +msgid "Upload" +msgstr "" + +#: core/models.py:66 +msgid "Uploads" +msgstr "" + +#: core/models.py:81 +msgid "Queued download" +msgstr "" + +#: core/models.py:82 +msgid "Downloading analyzed data" +msgstr "" + +#: core/models.py:83 +msgid "Downloading" +msgstr "" + +#: core/models.py:86 core/models.py:187 +msgid "Failed" +msgstr "" + +#: core/models.py:116 +msgid "Url" +msgstr "" + +#: core/models.py:117 +msgid "Urls" +msgstr "" + +#: core/models.py:132 +msgid "Custom" +msgstr "" + +#: core/models.py:132 +msgid "OCDS Lite" +msgstr "" + +#: core/models.py:134 +msgid "Apply OCDS headings only" +msgstr "" + +#: core/models.py:135 +msgid "Apply English user friendly headings to all tables" +msgstr "" + +#: core/models.py:136 +msgid "Apply English R friendly headings to all tables" +msgstr "" + +#: core/models.py:137 +msgid "Apply Spanish user friendly headings to all tables" +msgstr "" + +#: core/models.py:138 +msgid "Apply Spanish R friendly headings to all tables" +msgstr "" + +#: core/models.py:148 +msgid "Data Selection" +msgstr "" + +#: core/models.py:149 +msgid "Data Selections" +msgstr "" + +#: core/models.py:179 +msgid "A comma-separated values (CSV) file" +msgstr "" + +#: core/models.py:179 +msgid "XLSX (Excel) file format" +msgstr "" + +#: core/models.py:186 +msgid "Completed" +msgstr "" + +#: core/models.py:188 +msgid "Processing" +msgstr "" + +#: core/models.py:189 +msgid "Scheduled" +msgstr "" + +#: core/models.py:207 +msgid "File" +msgstr "" + +#: core/models.py:208 +msgid "Files" +msgstr "" + +#: core/tasks.py:81 core/tasks.py:267 +#, python-format +msgid "Model %s for datasource not found" +msgstr "" + +#: core/tasks.py:157 core/tasks.py:440 +#, python-format +msgid "Datasource %s not found" +msgstr "" + +#: core/tasks.py:170 core/tasks.py:212 +#, python-format +msgid "Error while validating data `%s`" +msgstr "" + +#: core/tasks.py:190 core/tasks.py:460 core/tasks.py:594 core/views.py:99 +#: core/views.py:485 core/views.py:609 +msgid "Currently, the space limit was reached. Please try again later." +msgstr "" + +#: core/tasks.py:192 core/tasks.py:596 +msgid "" +"Something went wrong during processing of your file, please contact support" +msgstr "" + +#: core/tasks.py:309 core/tasks.py:370 +#, python-brace-format +msgid "{r.status_code}: {r.reason}" +msgstr "" + +#: core/views.py:56 +msgid "File is required" +msgstr "" + +#: core/views.py:59 +msgid "" +"Multi-upload feature is not available for file uploads yet. Stay tuned!" +msgstr "" + +#: core/views.py:105 +msgid "Error while receiving file. Contact our support service" +msgstr "" + +#: core/views.py:286 +msgid "Url is required" +msgstr "" + +#: core/views.py:344 +msgid "Datasource without available tables" +msgstr "" + +#: core/views.py:386 +#, python-format +msgid "Please use for column_heading value one of %s" +msgstr "" + +#: core/views.py:450 +#, python-brace-format +msgid "Cannot merge '{table.name}' - child arrays are too large" +msgstr "" + +#: core/views.py:475 core/views.py:599 +msgid "Datasource expired." +msgstr "" + +#: core/views.py:632 +msgid "Flatten request for this type already exists." +msgstr "" + +#: core/views.py:652 +#, python-format +msgid "You can't reschedule flatten in (%s) status" +msgstr "" + +#: core/views.py:657 +#, python-format +msgid "You can set status to %s only" +msgstr "" diff --git a/core/migrations/0001_initial.py b/spoonbill_web/migrations/0001_initial.py similarity index 100% rename from core/migrations/0001_initial.py rename to spoonbill_web/migrations/0001_initial.py diff --git a/core/migrations/0002_auto_20210310_1049.py b/spoonbill_web/migrations/0002_auto_20210310_1049.py similarity index 94% rename from core/migrations/0002_auto_20210310_1049.py rename to spoonbill_web/migrations/0002_auto_20210310_1049.py index b9c6831a..a8455a29 100644 --- a/core/migrations/0002_auto_20210310_1049.py +++ b/spoonbill_web/migrations/0002_auto_20210310_1049.py @@ -6,7 +6,7 @@ class Migration(migrations.Migration): dependencies = [ - ("core", "0001_initial"), + ("spoonbill_web", "0001_initial"), ] operations = [ diff --git a/core/migrations/0003_auto_20210310_1117.py b/spoonbill_web/migrations/0003_auto_20210310_1117.py similarity index 91% rename from core/migrations/0003_auto_20210310_1117.py rename to spoonbill_web/migrations/0003_auto_20210310_1117.py index 9fb0ffda..8e0167bd 100644 --- a/core/migrations/0003_auto_20210310_1117.py +++ b/spoonbill_web/migrations/0003_auto_20210310_1117.py @@ -7,7 +7,7 @@ class Migration(migrations.Migration): dependencies = [ - ("core", "0002_auto_20210310_1049"), + ("spoonbill_web", "0002_auto_20210310_1049"), ] operations = [ diff --git a/core/migrations/0004_auto_20210310_1121.py b/spoonbill_web/migrations/0004_auto_20210310_1121.py similarity index 92% rename from core/migrations/0004_auto_20210310_1121.py rename to spoonbill_web/migrations/0004_auto_20210310_1121.py index d101e861..602cc4b8 100644 --- a/core/migrations/0004_auto_20210310_1121.py +++ b/spoonbill_web/migrations/0004_auto_20210310_1121.py @@ -5,7 +5,7 @@ class Migration(migrations.Migration): dependencies = [ - ("core", "0003_auto_20210310_1117"), + ("spoonbill_web", "0003_auto_20210310_1117"), ] operations = [ diff --git a/core/migrations/0005_auto_20210310_1125.py b/spoonbill_web/migrations/0005_auto_20210310_1125.py similarity index 93% rename from core/migrations/0005_auto_20210310_1125.py rename to spoonbill_web/migrations/0005_auto_20210310_1125.py index 7953d290..79855d07 100644 --- a/core/migrations/0005_auto_20210310_1125.py +++ b/spoonbill_web/migrations/0005_auto_20210310_1125.py @@ -5,7 +5,7 @@ class Migration(migrations.Migration): dependencies = [ - ("core", "0004_auto_20210310_1121"), + ("spoonbill_web", "0004_auto_20210310_1121"), ] operations = [ diff --git a/core/migrations/0006_auto_20210310_1259.py b/spoonbill_web/migrations/0006_auto_20210310_1259.py similarity index 91% rename from core/migrations/0006_auto_20210310_1259.py rename to spoonbill_web/migrations/0006_auto_20210310_1259.py index a508ee69..3b051a6b 100644 --- a/core/migrations/0006_auto_20210310_1259.py +++ b/spoonbill_web/migrations/0006_auto_20210310_1259.py @@ -5,7 +5,7 @@ class Migration(migrations.Migration): dependencies = [ - ("core", "0005_auto_20210310_1125"), + ("spoonbill_web", "0005_auto_20210310_1125"), ] operations = [ diff --git a/core/migrations/0007_auto_20210311_1308.py b/spoonbill_web/migrations/0007_auto_20210311_1308.py similarity index 94% rename from core/migrations/0007_auto_20210311_1308.py rename to spoonbill_web/migrations/0007_auto_20210311_1308.py index 99f20bff..bf4da3e5 100644 --- a/core/migrations/0007_auto_20210311_1308.py +++ b/spoonbill_web/migrations/0007_auto_20210311_1308.py @@ -8,7 +8,7 @@ class Migration(migrations.Migration): dependencies = [ - ("core", "0006_auto_20210310_1259"), + ("spoonbill_web", "0006_auto_20210310_1259"), ] operations = [ @@ -54,7 +54,7 @@ class Migration(migrations.Migration): blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, - to="core.validation", + to="spoonbill_web.validation", ), ), ] diff --git a/core/migrations/0008_upload_status.py b/spoonbill_web/migrations/0008_upload_status.py similarity index 90% rename from core/migrations/0008_upload_status.py rename to spoonbill_web/migrations/0008_upload_status.py index c5b50d2c..5718e0ba 100644 --- a/core/migrations/0008_upload_status.py +++ b/spoonbill_web/migrations/0008_upload_status.py @@ -5,7 +5,7 @@ class Migration(migrations.Migration): dependencies = [ - ("core", "0007_auto_20210311_1308"), + ("spoonbill_web", "0007_auto_20210311_1308"), ] operations = [ diff --git a/core/migrations/0009_url.py b/spoonbill_web/migrations/0009_url.py similarity index 87% rename from core/migrations/0009_url.py rename to spoonbill_web/migrations/0009_url.py index 5629da29..8a36655e 100644 --- a/core/migrations/0009_url.py +++ b/spoonbill_web/migrations/0009_url.py @@ -8,7 +8,7 @@ class Migration(migrations.Migration): dependencies = [ - ("core", "0008_upload_status"), + ("spoonbill_web", "0008_upload_status"), ] operations = [ @@ -38,7 +38,10 @@ class Migration(migrations.Migration): ( "validation", models.ForeignKey( - blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to="core.validation" + blank=True, + null=True, + on_delete=django.db.models.deletion.CASCADE, + to="spoonbill_web.validation", ), ), ], diff --git a/core/migrations/0010_auto_20210317_1024.py b/spoonbill_web/migrations/0010_auto_20210317_1024.py similarity index 96% rename from core/migrations/0010_auto_20210317_1024.py rename to spoonbill_web/migrations/0010_auto_20210317_1024.py index 75ff5516..bf580839 100644 --- a/core/migrations/0010_auto_20210317_1024.py +++ b/spoonbill_web/migrations/0010_auto_20210317_1024.py @@ -5,7 +5,7 @@ class Migration(migrations.Migration): dependencies = [ - ("core", "0009_url"), + ("spoonbill_web", "0009_url"), ] operations = [ diff --git a/core/migrations/0011_auto_20210317_1137.py b/spoonbill_web/migrations/0011_auto_20210317_1137.py similarity index 94% rename from core/migrations/0011_auto_20210317_1137.py rename to spoonbill_web/migrations/0011_auto_20210317_1137.py index 7c752496..e6e450ca 100644 --- a/core/migrations/0011_auto_20210317_1137.py +++ b/spoonbill_web/migrations/0011_auto_20210317_1137.py @@ -5,7 +5,7 @@ class Migration(migrations.Migration): dependencies = [ - ("core", "0010_auto_20210317_1024"), + ("spoonbill_web", "0010_auto_20210317_1024"), ] operations = [ diff --git a/core/migrations/0012_auto_20210318_1411.py b/spoonbill_web/migrations/0012_auto_20210318_1411.py similarity index 85% rename from core/migrations/0012_auto_20210318_1411.py rename to spoonbill_web/migrations/0012_auto_20210318_1411.py index eee7cff3..e0a3e664 100644 --- a/core/migrations/0012_auto_20210318_1411.py +++ b/spoonbill_web/migrations/0012_auto_20210318_1411.py @@ -3,12 +3,12 @@ import django.utils.timezone from django.db import migrations, models -import core.utils +import spoonbill_web.utils class Migration(migrations.Migration): dependencies = [ - ("core", "0011_auto_20210317_1137"), + ("spoonbill_web", "0011_auto_20210317_1137"), ] operations = [ @@ -33,11 +33,11 @@ class Migration(migrations.Migration): migrations.AddField( model_name="url", name="analyzed_data_file", - field=models.FileField(blank=True, null=True, upload_to=core.utils.instance_directory_path), + field=models.FileField(blank=True, null=True, upload_to=spoonbill_web.utils.instance_directory_path), ), migrations.AddField( model_name="url", name="data_file", - field=models.FileField(blank=True, null=True, upload_to=core.utils.instance_directory_path), + field=models.FileField(blank=True, null=True, upload_to=spoonbill_web.utils.instance_directory_path), ), ] diff --git a/core/migrations/0013_auto_20210318_1415.py b/spoonbill_web/migrations/0013_auto_20210318_1415.py similarity index 76% rename from core/migrations/0013_auto_20210318_1415.py rename to spoonbill_web/migrations/0013_auto_20210318_1415.py index dad5ced9..3a32f1cc 100644 --- a/core/migrations/0013_auto_20210318_1415.py +++ b/spoonbill_web/migrations/0013_auto_20210318_1415.py @@ -3,12 +3,12 @@ import django.core.files.storage from django.db import migrations, models -import core.utils +import spoonbill_web.utils class Migration(migrations.Migration): dependencies = [ - ("core", "0012_auto_20210318_1411"), + ("spoonbill_web", "0012_auto_20210318_1411"), ] operations = [ @@ -16,7 +16,8 @@ class Migration(migrations.Migration): model_name="upload", name="file", field=models.FileField( - storage=django.core.files.storage.FileSystemStorage(), upload_to=core.utils.instance_directory_path + storage=django.core.files.storage.FileSystemStorage(), + upload_to=spoonbill_web.utils.instance_directory_path, ), ), migrations.AlterField( @@ -26,7 +27,7 @@ class Migration(migrations.Migration): blank=True, null=True, storage=django.core.files.storage.FileSystemStorage(), - upload_to=core.utils.instance_directory_path, + upload_to=spoonbill_web.utils.instance_directory_path, ), ), migrations.AlterField( @@ -36,7 +37,7 @@ class Migration(migrations.Migration): blank=True, null=True, storage=django.core.files.storage.FileSystemStorage(), - upload_to=core.utils.instance_directory_path, + upload_to=spoonbill_web.utils.instance_directory_path, ), ), ] diff --git a/core/migrations/0014_auto_20210319_1156.py b/spoonbill_web/migrations/0014_auto_20210319_1156.py similarity index 85% rename from core/migrations/0014_auto_20210319_1156.py rename to spoonbill_web/migrations/0014_auto_20210319_1156.py index 33ce9665..4df9893c 100644 --- a/core/migrations/0014_auto_20210319_1156.py +++ b/spoonbill_web/migrations/0014_auto_20210319_1156.py @@ -5,7 +5,7 @@ class Migration(migrations.Migration): dependencies = [ - ("core", "0013_auto_20210318_1415"), + ("spoonbill_web", "0013_auto_20210318_1415"), ] operations = [ diff --git a/core/migrations/0015_auto_20210319_1157.py b/spoonbill_web/migrations/0015_auto_20210319_1157.py similarity index 85% rename from core/migrations/0015_auto_20210319_1157.py rename to spoonbill_web/migrations/0015_auto_20210319_1157.py index 127a9edf..f8c38158 100644 --- a/core/migrations/0015_auto_20210319_1157.py +++ b/spoonbill_web/migrations/0015_auto_20210319_1157.py @@ -5,7 +5,7 @@ class Migration(migrations.Migration): dependencies = [ - ("core", "0014_auto_20210319_1156"), + ("spoonbill_web", "0014_auto_20210319_1156"), ] operations = [ diff --git a/core/migrations/0016_auto_20210322_1416.py b/spoonbill_web/migrations/0016_auto_20210322_1416.py similarity index 81% rename from core/migrations/0016_auto_20210322_1416.py rename to spoonbill_web/migrations/0016_auto_20210322_1416.py index bb9b7940..eaef8822 100644 --- a/core/migrations/0016_auto_20210322_1416.py +++ b/spoonbill_web/migrations/0016_auto_20210322_1416.py @@ -7,7 +7,7 @@ class Migration(migrations.Migration): dependencies = [ - ("core", "0015_auto_20210319_1157"), + ("spoonbill_web", "0015_auto_20210319_1157"), ] operations = [ @@ -22,7 +22,7 @@ class Migration(migrations.Migration): name="DataSelection", fields=[ ("id", models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), - ("tables", models.ManyToManyField(blank=True, to="core.Table")), + ("tables", models.ManyToManyField(blank=True, to="spoonbill_web.Table")), ], options={ "verbose_name": "Data Selection", @@ -33,11 +33,11 @@ class Migration(migrations.Migration): migrations.AddField( model_name="upload", name="selections", - field=models.ManyToManyField(blank=True, to="core.DataSelection"), + field=models.ManyToManyField(blank=True, to="spoonbill_web.DataSelection"), ), migrations.AddField( model_name="url", name="selections", - field=models.ManyToManyField(blank=True, to="core.DataSelection"), + field=models.ManyToManyField(blank=True, to="spoonbill_web.DataSelection"), ), ] diff --git a/core/migrations/0017_auto_20210323_0638.py b/spoonbill_web/migrations/0017_auto_20210323_0638.py similarity index 93% rename from core/migrations/0017_auto_20210323_0638.py rename to spoonbill_web/migrations/0017_auto_20210323_0638.py index c17422d6..0e64fa77 100644 --- a/core/migrations/0017_auto_20210323_0638.py +++ b/spoonbill_web/migrations/0017_auto_20210323_0638.py @@ -6,7 +6,7 @@ class Migration(migrations.Migration): dependencies = [ - ("core", "0016_auto_20210322_1416"), + ("spoonbill_web", "0016_auto_20210322_1416"), ] operations = [ diff --git a/core/migrations/0018_table_splitted.py b/spoonbill_web/migrations/0018_table_splitted.py similarity index 86% rename from core/migrations/0018_table_splitted.py rename to spoonbill_web/migrations/0018_table_splitted.py index 0287f0f7..cd91afc7 100644 --- a/core/migrations/0018_table_splitted.py +++ b/spoonbill_web/migrations/0018_table_splitted.py @@ -5,7 +5,7 @@ class Migration(migrations.Migration): dependencies = [ - ("core", "0017_auto_20210323_0638"), + ("spoonbill_web", "0017_auto_20210323_0638"), ] operations = [ diff --git a/core/migrations/0019_table_included.py b/spoonbill_web/migrations/0019_table_included.py similarity index 87% rename from core/migrations/0019_table_included.py rename to spoonbill_web/migrations/0019_table_included.py index 989babe5..e438a4b3 100644 --- a/core/migrations/0019_table_included.py +++ b/spoonbill_web/migrations/0019_table_included.py @@ -5,7 +5,7 @@ class Migration(migrations.Migration): dependencies = [ - ("core", "0018_table_splitted"), + ("spoonbill_web", "0018_table_splitted"), ] operations = [ diff --git a/core/migrations/0020_auto_20210405_0538.py b/spoonbill_web/migrations/0020_auto_20210405_0538.py similarity index 90% rename from core/migrations/0020_auto_20210405_0538.py rename to spoonbill_web/migrations/0020_auto_20210405_0538.py index aada5b27..880bbf70 100644 --- a/core/migrations/0020_auto_20210405_0538.py +++ b/spoonbill_web/migrations/0020_auto_20210405_0538.py @@ -5,7 +5,7 @@ class Migration(migrations.Migration): dependencies = [ - ("core", "0019_table_included"), + ("spoonbill_web", "0019_table_included"), ] operations = [ diff --git a/core/migrations/0021_upload_analyzed_file.py b/spoonbill_web/migrations/0021_upload_analyzed_file.py similarity index 76% rename from core/migrations/0021_upload_analyzed_file.py rename to spoonbill_web/migrations/0021_upload_analyzed_file.py index d9ba80d3..563f9a50 100644 --- a/core/migrations/0021_upload_analyzed_file.py +++ b/spoonbill_web/migrations/0021_upload_analyzed_file.py @@ -3,12 +3,12 @@ import django.core.files.storage from django.db import migrations, models -import core.utils +import spoonbill_web.utils class Migration(migrations.Migration): dependencies = [ - ("core", "0020_auto_20210405_0538"), + ("spoonbill_web", "0020_auto_20210405_0538"), ] operations = [ @@ -19,7 +19,7 @@ class Migration(migrations.Migration): blank=True, null=True, storage=django.core.files.storage.FileSystemStorage(), - upload_to=core.utils.instance_directory_path, + upload_to=spoonbill_web.utils.instance_directory_path, ), ), ] diff --git a/core/migrations/0022_auto_20210408_0746.py b/spoonbill_web/migrations/0022_auto_20210408_0746.py similarity index 87% rename from core/migrations/0022_auto_20210408_0746.py rename to spoonbill_web/migrations/0022_auto_20210408_0746.py index f1fcdca1..271d21c0 100644 --- a/core/migrations/0022_auto_20210408_0746.py +++ b/spoonbill_web/migrations/0022_auto_20210408_0746.py @@ -6,7 +6,7 @@ class Migration(migrations.Migration): dependencies = [ - ("core", "0021_upload_analyzed_file"), + ("spoonbill_web", "0021_upload_analyzed_file"), ] operations = [ @@ -28,7 +28,9 @@ class Migration(migrations.Migration): migrations.AddField( model_name="table", name="array_tables", - field=models.ManyToManyField(blank=True, related_name="_core_table_array_tables_+", to="core.Table"), + field=models.ManyToManyField( + blank=True, related_name="_core_table_array_tables_+", to="spoonbill_web.Table" + ), ), migrations.AddField( model_name="table", diff --git a/core/migrations/0023_alter_table_array_tables.py b/spoonbill_web/migrations/0023_alter_table_array_tables.py similarity index 80% rename from core/migrations/0023_alter_table_array_tables.py rename to spoonbill_web/migrations/0023_alter_table_array_tables.py index 7877b2b9..3551ddaf 100644 --- a/core/migrations/0023_alter_table_array_tables.py +++ b/spoonbill_web/migrations/0023_alter_table_array_tables.py @@ -5,7 +5,7 @@ class Migration(migrations.Migration): dependencies = [ - ("core", "0022_auto_20210408_0746"), + ("spoonbill_web", "0022_auto_20210408_0746"), ] operations = [ @@ -13,7 +13,7 @@ class Migration(migrations.Migration): model_name="table", name="array_tables", field=models.ManyToManyField( - blank=True, null=True, related_name="_core_table_array_tables_+", to="core.Table" + blank=True, null=True, related_name="_core_table_array_tables_+", to="spoonbill_web.Table" ), ), ] diff --git a/core/migrations/0024_auto_20210409_0723.py b/spoonbill_web/migrations/0024_auto_20210409_0723.py similarity index 91% rename from core/migrations/0024_auto_20210409_0723.py rename to spoonbill_web/migrations/0024_auto_20210409_0723.py index fd65a0e0..9f43bbff 100644 --- a/core/migrations/0024_auto_20210409_0723.py +++ b/spoonbill_web/migrations/0024_auto_20210409_0723.py @@ -5,7 +5,7 @@ class Migration(migrations.Migration): dependencies = [ - ("core", "0023_alter_table_array_tables"), + ("spoonbill_web", "0023_alter_table_array_tables"), ] operations = [ diff --git a/core/migrations/0025_alter_table_column_headings.py b/spoonbill_web/migrations/0025_alter_table_column_headings.py similarity index 92% rename from core/migrations/0025_alter_table_column_headings.py rename to spoonbill_web/migrations/0025_alter_table_column_headings.py index 2c4b1484..3493885d 100644 --- a/core/migrations/0025_alter_table_column_headings.py +++ b/spoonbill_web/migrations/0025_alter_table_column_headings.py @@ -7,7 +7,7 @@ class Migration(migrations.Migration): dependencies = [ - ("core", "0024_auto_20210409_0723"), + ("spoonbill_web", "0024_auto_20210409_0723"), ] operations = [ diff --git a/core/migrations/0026_auto_20210415_0822.py b/spoonbill_web/migrations/0026_auto_20210415_0822.py similarity index 81% rename from core/migrations/0026_auto_20210415_0822.py rename to spoonbill_web/migrations/0026_auto_20210415_0822.py index 95b5e880..b6583633 100644 --- a/core/migrations/0026_auto_20210415_0822.py +++ b/spoonbill_web/migrations/0026_auto_20210415_0822.py @@ -5,12 +5,12 @@ import django.core.files.storage from django.db import migrations, models -import core.utils +import spoonbill_web.utils class Migration(migrations.Migration): dependencies = [ - ("core", "0025_alter_table_column_headings"), + ("spoonbill_web", "0025_alter_table_column_headings"), ] operations = [ @@ -32,7 +32,7 @@ class Migration(migrations.Migration): blank=True, null=True, storage=django.core.files.storage.FileSystemStorage(), - upload_to=core.utils.instance_directory_path, + upload_to=spoonbill_web.utils.instance_directory_path, ), ), ( @@ -53,11 +53,13 @@ class Migration(migrations.Migration): migrations.AlterField( model_name="table", name="array_tables", - field=models.ManyToManyField(blank=True, related_name="_core_table_array_tables_+", to="core.Table"), + field=models.ManyToManyField( + blank=True, related_name="_core_table_array_tables_+", to="spoonbill_web.Table" + ), ), migrations.AddField( model_name="dataselection", name="flattens", - field=models.ManyToManyField(blank=True, to="core.Flatten"), + field=models.ManyToManyField(blank=True, to="spoonbill_web.Flatten"), ), ] diff --git a/core/migrations/0027_auto_20210416_0927.py b/spoonbill_web/migrations/0027_auto_20210416_0927.py similarity index 93% rename from core/migrations/0027_auto_20210416_0927.py rename to spoonbill_web/migrations/0027_auto_20210416_0927.py index 1fa535a4..7cee636e 100644 --- a/core/migrations/0027_auto_20210416_0927.py +++ b/spoonbill_web/migrations/0027_auto_20210416_0927.py @@ -5,7 +5,7 @@ class Migration(migrations.Migration): dependencies = [ - ("core", "0026_auto_20210415_0822"), + ("spoonbill_web", "0026_auto_20210415_0822"), ] operations = [ diff --git a/core/migrations/0028_table_column_headings.py b/spoonbill_web/migrations/0028_table_column_headings.py similarity index 89% rename from core/migrations/0028_table_column_headings.py rename to spoonbill_web/migrations/0028_table_column_headings.py index e8eeaf06..cfb2d3a5 100644 --- a/core/migrations/0028_table_column_headings.py +++ b/spoonbill_web/migrations/0028_table_column_headings.py @@ -6,7 +6,7 @@ class Migration(migrations.Migration): dependencies = [ - ("core", "0027_auto_20210416_0927"), + ("spoonbill_web", "0027_auto_20210416_0927"), ] operations = [ diff --git a/core/migrations/0029_auto_20210416_1149.py b/spoonbill_web/migrations/0029_auto_20210416_1149.py similarity index 90% rename from core/migrations/0029_auto_20210416_1149.py rename to spoonbill_web/migrations/0029_auto_20210416_1149.py index 159fec98..5af31fe6 100644 --- a/core/migrations/0029_auto_20210416_1149.py +++ b/spoonbill_web/migrations/0029_auto_20210416_1149.py @@ -5,7 +5,7 @@ class Migration(migrations.Migration): dependencies = [ - ("core", "0028_table_column_headings"), + ("spoonbill_web", "0028_table_column_headings"), ] operations = [ diff --git a/core/migrations/0030_alter_flatten_file.py b/spoonbill_web/migrations/0030_alter_flatten_file.py similarity index 89% rename from core/migrations/0030_alter_flatten_file.py rename to spoonbill_web/migrations/0030_alter_flatten_file.py index 4189f447..2d3c0244 100644 --- a/core/migrations/0030_alter_flatten_file.py +++ b/spoonbill_web/migrations/0030_alter_flatten_file.py @@ -6,7 +6,7 @@ class Migration(migrations.Migration): dependencies = [ - ("core", "0029_auto_20210416_1149"), + ("spoonbill_web", "0029_auto_20210416_1149"), ] operations = [ diff --git a/core/migrations/0031_alter_flatten_file.py b/spoonbill_web/migrations/0031_alter_flatten_file.py similarity index 76% rename from core/migrations/0031_alter_flatten_file.py rename to spoonbill_web/migrations/0031_alter_flatten_file.py index 4da8a3e6..1fdcd302 100644 --- a/core/migrations/0031_alter_flatten_file.py +++ b/spoonbill_web/migrations/0031_alter_flatten_file.py @@ -3,12 +3,12 @@ import django.core.files.storage from django.db import migrations, models -import core.utils +import spoonbill_web.utils class Migration(migrations.Migration): dependencies = [ - ("core", "0030_alter_flatten_file"), + ("spoonbill_web", "0030_alter_flatten_file"), ] operations = [ @@ -19,7 +19,7 @@ class Migration(migrations.Migration): blank=True, null=True, storage=django.core.files.storage.FileSystemStorage(), - upload_to=core.utils.export_directory_path, + upload_to=spoonbill_web.utils.export_directory_path, ), ), ] diff --git a/core/migrations/0032_auto_20210428_1147.py b/spoonbill_web/migrations/0032_auto_20210428_1147.py similarity index 90% rename from core/migrations/0032_auto_20210428_1147.py rename to spoonbill_web/migrations/0032_auto_20210428_1147.py index cfef92ad..b24d85f1 100644 --- a/core/migrations/0032_auto_20210428_1147.py +++ b/spoonbill_web/migrations/0032_auto_20210428_1147.py @@ -5,7 +5,7 @@ class Migration(migrations.Migration): dependencies = [ - ("core", "0031_alter_flatten_file"), + ("spoonbill_web", "0031_alter_flatten_file"), ] operations = [ diff --git a/core/migrations/0033_alter_table_heading.py b/spoonbill_web/migrations/0033_alter_table_heading.py similarity index 86% rename from core/migrations/0033_alter_table_heading.py rename to spoonbill_web/migrations/0033_alter_table_heading.py index a96b8841..25bad27a 100644 --- a/core/migrations/0033_alter_table_heading.py +++ b/spoonbill_web/migrations/0033_alter_table_heading.py @@ -5,7 +5,7 @@ class Migration(migrations.Migration): dependencies = [ - ("core", "0032_auto_20210428_1147"), + ("spoonbill_web", "0032_auto_20210428_1147"), ] operations = [ diff --git a/core/migrations/0034_auto_20210429_1227.py b/spoonbill_web/migrations/0034_auto_20210429_1227.py similarity index 93% rename from core/migrations/0034_auto_20210429_1227.py rename to spoonbill_web/migrations/0034_auto_20210429_1227.py index d6cabfd9..bf6302b6 100644 --- a/core/migrations/0034_auto_20210429_1227.py +++ b/spoonbill_web/migrations/0034_auto_20210429_1227.py @@ -6,7 +6,7 @@ class Migration(migrations.Migration): dependencies = [ - ("core", "0033_alter_table_heading"), + ("spoonbill_web", "0033_alter_table_heading"), ] operations = [ diff --git a/core/migrations/0035_alter_dataselection_tables.py b/spoonbill_web/migrations/0035_alter_dataselection_tables.py similarity index 70% rename from core/migrations/0035_alter_dataselection_tables.py rename to spoonbill_web/migrations/0035_alter_dataselection_tables.py index 53f26eb4..7bfda01d 100644 --- a/core/migrations/0035_alter_dataselection_tables.py +++ b/spoonbill_web/migrations/0035_alter_dataselection_tables.py @@ -5,13 +5,13 @@ class Migration(migrations.Migration): dependencies = [ - ("core", "0034_auto_20210429_1227"), + ("spoonbill_web", "0034_auto_20210429_1227"), ] operations = [ migrations.AlterField( model_name="dataselection", name="tables", - field=models.ManyToManyField(to="core.Table"), + field=models.ManyToManyField(to="spoonbill_web.Table"), ), ] diff --git a/core/migrations/0036_dataselection_kind.py b/spoonbill_web/migrations/0036_dataselection_kind.py similarity index 87% rename from core/migrations/0036_dataselection_kind.py rename to spoonbill_web/migrations/0036_dataselection_kind.py index eb9d6993..f7434681 100644 --- a/core/migrations/0036_dataselection_kind.py +++ b/spoonbill_web/migrations/0036_dataselection_kind.py @@ -5,7 +5,7 @@ class Migration(migrations.Migration): dependencies = [ - ("core", "0035_alter_dataselection_tables"), + ("spoonbill_web", "0035_alter_dataselection_tables"), ] operations = [ diff --git a/core/migrations/0037_auto_20210607_1429.py b/spoonbill_web/migrations/0037_auto_20210607_1429.py similarity index 92% rename from core/migrations/0037_auto_20210607_1429.py rename to spoonbill_web/migrations/0037_auto_20210607_1429.py index 88d9027a..eabe8270 100644 --- a/core/migrations/0037_auto_20210607_1429.py +++ b/spoonbill_web/migrations/0037_auto_20210607_1429.py @@ -5,7 +5,7 @@ class Migration(migrations.Migration): dependencies = [ - ("core", "0036_dataselection_kind"), + ("spoonbill_web", "0036_dataselection_kind"), ] operations = [ diff --git a/core/migrations/0038_auto_20210623_0914.py b/spoonbill_web/migrations/0038_auto_20210623_0914.py similarity index 75% rename from core/migrations/0038_auto_20210623_0914.py rename to spoonbill_web/migrations/0038_auto_20210623_0914.py index aa3ffd43..6607911f 100644 --- a/core/migrations/0038_auto_20210623_0914.py +++ b/spoonbill_web/migrations/0038_auto_20210623_0914.py @@ -2,12 +2,12 @@ from django.db import migrations, models -import core.validators +import spoonbill_web.validators class Migration(migrations.Migration): dependencies = [ - ("core", "0037_auto_20210607_1429"), + ("spoonbill_web", "0037_auto_20210607_1429"), ] operations = [ @@ -15,12 +15,12 @@ class Migration(migrations.Migration): model_name="url", name="analyzed_data_url", field=models.CharField( - blank=True, max_length=2048, null=True, validators=[core.validators.validate_url_or_path] + blank=True, max_length=2048, null=True, validators=[spoonbill_web.validators.validate_url_or_path] ), ), migrations.AlterField( model_name="url", name="url", - field=models.CharField(max_length=2048, validators=[core.validators.validate_url_or_path]), + field=models.CharField(max_length=2048, validators=[spoonbill_web.validators.validate_url_or_path]), ), ] diff --git a/core/migrations/0039_auto_20210707_1135.py b/spoonbill_web/migrations/0039_auto_20210707_1135.py similarity index 78% rename from core/migrations/0039_auto_20210707_1135.py rename to spoonbill_web/migrations/0039_auto_20210707_1135.py index 9962444a..8f47ae02 100644 --- a/core/migrations/0039_auto_20210707_1135.py +++ b/spoonbill_web/migrations/0039_auto_20210707_1135.py @@ -6,13 +6,13 @@ import django.core.files.storage from django.db import migrations, models -import core.utils -import core.validators +import spoonbill_web.utils +import spoonbill_web.validators class Migration(migrations.Migration): dependencies = [ - ("core", "0038_auto_20210623_0914"), + ("spoonbill_web", "0038_auto_20210623_0914"), ] operations = [ @@ -26,7 +26,7 @@ class Migration(migrations.Migration): blank=True, null=True, storage=django.core.files.storage.FileSystemStorage(), - upload_to=core.utils.instance_directory_path, + upload_to=spoonbill_web.utils.instance_directory_path, ), ), ], @@ -52,20 +52,22 @@ class Migration(migrations.Migration): model_name="url", name="urls", field=django.contrib.postgres.fields.ArrayField( - base_field=models.CharField(max_length=2048, validators=[core.validators.validate_url_or_path]), + base_field=models.CharField( + max_length=2048, validators=[spoonbill_web.validators.validate_url_or_path] + ), default=list, size=None, - validators=[core.validators.url_multi_upload_validator], + validators=[spoonbill_web.validators.url_multi_upload_validator], ), ), migrations.AddField( model_name="upload", name="files", - field=models.ManyToManyField(blank=True, null=True, to="core.DataFile"), + field=models.ManyToManyField(blank=True, null=True, to="spoonbill_web.DataFile"), ), migrations.AddField( model_name="url", name="files", - field=models.ManyToManyField(blank=True, null=True, to="core.DataFile"), + field=models.ManyToManyField(blank=True, null=True, to="spoonbill_web.DataFile"), ), ] diff --git a/core/migrations/0040_auto_20210713_1235.py b/spoonbill_web/migrations/0040_auto_20210713_1235.py similarity index 90% rename from core/migrations/0040_auto_20210713_1235.py rename to spoonbill_web/migrations/0040_auto_20210713_1235.py index 35f56aa6..232d8a8e 100644 --- a/core/migrations/0040_auto_20210713_1235.py +++ b/spoonbill_web/migrations/0040_auto_20210713_1235.py @@ -5,7 +5,7 @@ class Migration(migrations.Migration): dependencies = [ - ("core", "0039_auto_20210707_1135"), + ("spoonbill_web", "0039_auto_20210707_1135"), ] operations = [ diff --git a/core/migrations/0041_auto_20210827_0732.py b/spoonbill_web/migrations/0041_auto_20210827_0732.py similarity index 62% rename from core/migrations/0041_auto_20210827_0732.py rename to spoonbill_web/migrations/0041_auto_20210827_0732.py index 8453f9f4..ef0a3d9b 100644 --- a/core/migrations/0041_auto_20210827_0732.py +++ b/spoonbill_web/migrations/0041_auto_20210827_0732.py @@ -2,13 +2,13 @@ from django.db import migrations, models -import core.file_storage -import core.utils +import spoonbill_web.file_storage +import spoonbill_web.utils class Migration(migrations.Migration): dependencies = [ - ("core", "0040_auto_20210713_1235"), + ("spoonbill_web", "0040_auto_20210713_1235"), ] operations = [ @@ -23,8 +23,8 @@ class Migration(migrations.Migration): field=models.FileField( blank=True, null=True, - storage=core.file_storage.MediaAndDataregistryFS(), - upload_to=core.utils.instance_directory_path, + storage=spoonbill_web.file_storage.MediaAndDataregistryFS(), + upload_to=spoonbill_web.utils.instance_directory_path, ), ), migrations.AlterField( @@ -33,8 +33,8 @@ class Migration(migrations.Migration): field=models.FileField( blank=True, null=True, - storage=core.file_storage.MediaAndDataregistryFS(), - upload_to=core.utils.export_directory_path, + storage=spoonbill_web.file_storage.MediaAndDataregistryFS(), + upload_to=spoonbill_web.utils.export_directory_path, ), ), migrations.AlterField( @@ -43,8 +43,8 @@ class Migration(migrations.Migration): field=models.FileField( blank=True, null=True, - storage=core.file_storage.MediaAndDataregistryFS(), - upload_to=core.utils.instance_directory_path, + storage=spoonbill_web.file_storage.MediaAndDataregistryFS(), + upload_to=spoonbill_web.utils.instance_directory_path, ), ), migrations.AlterField( @@ -53,8 +53,8 @@ class Migration(migrations.Migration): field=models.FileField( blank=True, null=True, - storage=core.file_storage.MediaAndDataregistryFS(), - upload_to=core.utils.instance_directory_path, + storage=spoonbill_web.file_storage.MediaAndDataregistryFS(), + upload_to=spoonbill_web.utils.instance_directory_path, ), ), ] diff --git a/core/migrations/0042_alter_url_author.py b/spoonbill_web/migrations/0042_alter_url_author.py similarity index 92% rename from core/migrations/0042_alter_url_author.py rename to spoonbill_web/migrations/0042_alter_url_author.py index c694370f..1a25344f 100644 --- a/core/migrations/0042_alter_url_author.py +++ b/spoonbill_web/migrations/0042_alter_url_author.py @@ -8,7 +8,7 @@ class Migration(migrations.Migration): dependencies = [ migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ("core", "0041_auto_20210827_0732"), + ("spoonbill_web", "0041_auto_20210827_0732"), ] operations = [ diff --git a/core/migrations/0043_table_parent.py b/spoonbill_web/migrations/0043_table_parent.py similarity index 87% rename from core/migrations/0043_table_parent.py rename to spoonbill_web/migrations/0043_table_parent.py index be5bad7f..9a494cf8 100644 --- a/core/migrations/0043_table_parent.py +++ b/spoonbill_web/migrations/0043_table_parent.py @@ -5,7 +5,7 @@ class Migration(migrations.Migration): dependencies = [ - ("core", "0042_alter_url_author"), + ("spoonbill_web", "0042_alter_url_author"), ] operations = [ diff --git a/core/migrations/0044_table_mergeable.py b/spoonbill_web/migrations/0044_table_mergeable.py similarity index 87% rename from core/migrations/0044_table_mergeable.py rename to spoonbill_web/migrations/0044_table_mergeable.py index 6091af40..f6833ffa 100644 --- a/core/migrations/0044_table_mergeable.py +++ b/spoonbill_web/migrations/0044_table_mergeable.py @@ -5,7 +5,7 @@ class Migration(migrations.Migration): dependencies = [ - ("core", "0043_table_parent"), + ("spoonbill_web", "0043_table_parent"), ] operations = [ diff --git a/core/migrations/0045_table_should_split.py b/spoonbill_web/migrations/0045_table_should_split.py similarity index 87% rename from core/migrations/0045_table_should_split.py rename to spoonbill_web/migrations/0045_table_should_split.py index 0e2d8016..23a87842 100644 --- a/core/migrations/0045_table_should_split.py +++ b/spoonbill_web/migrations/0045_table_should_split.py @@ -5,7 +5,7 @@ class Migration(migrations.Migration): dependencies = [ - ("core", "0044_table_mergeable"), + ("spoonbill_web", "0044_table_mergeable"), ] operations = [ diff --git a/core/migrations/0046_alter_url_country.py b/spoonbill_web/migrations/0046_alter_url_country.py similarity index 86% rename from core/migrations/0046_alter_url_country.py rename to spoonbill_web/migrations/0046_alter_url_country.py index a53122fe..d4f76918 100644 --- a/core/migrations/0046_alter_url_country.py +++ b/spoonbill_web/migrations/0046_alter_url_country.py @@ -5,7 +5,7 @@ class Migration(migrations.Migration): dependencies = [ - ("core", "0045_table_should_split"), + ("spoonbill_web", "0045_table_should_split"), ] operations = [ diff --git a/core/migrations/0047_auto_20220405_2128.py b/spoonbill_web/migrations/0047_auto_20220405_2128.py similarity index 63% rename from core/migrations/0047_auto_20220405_2128.py rename to spoonbill_web/migrations/0047_auto_20220405_2128.py index 1b377e84..5c5becf0 100644 --- a/core/migrations/0047_auto_20220405_2128.py +++ b/spoonbill_web/migrations/0047_auto_20220405_2128.py @@ -5,18 +5,18 @@ class Migration(migrations.Migration): dependencies = [ - ("core", "0046_alter_url_country"), + ("spoonbill_web", "0046_alter_url_country"), ] operations = [ migrations.AlterField( model_name="upload", name="files", - field=models.ManyToManyField(blank=True, to="core.DataFile"), + field=models.ManyToManyField(blank=True, to="spoonbill_web.DataFile"), ), migrations.AlterField( model_name="url", name="files", - field=models.ManyToManyField(blank=True, to="core.DataFile"), + field=models.ManyToManyField(blank=True, to="spoonbill_web.DataFile"), ), ] diff --git a/core/migrations/0048_alter_table_array_tables.py b/spoonbill_web/migrations/0048_alter_table_array_tables.py similarity index 68% rename from core/migrations/0048_alter_table_array_tables.py rename to spoonbill_web/migrations/0048_alter_table_array_tables.py index 44a1c2c6..f0fb3a8a 100644 --- a/core/migrations/0048_alter_table_array_tables.py +++ b/spoonbill_web/migrations/0048_alter_table_array_tables.py @@ -5,13 +5,13 @@ class Migration(migrations.Migration): dependencies = [ - ("core", "0047_auto_20220405_2128"), + ("spoonbill_web", "0047_auto_20220405_2128"), ] operations = [ migrations.AlterField( model_name="table", name="array_tables", - field=models.ManyToManyField(blank=True, to="core.table"), + field=models.ManyToManyField(blank=True, to="spoonbill_web.table"), ), ] diff --git a/core/migrations/0049_alter_table_heading_alter_table_parent_and_more.py b/spoonbill_web/migrations/0049_alter_table_heading_alter_table_parent_and_more.py similarity index 94% rename from core/migrations/0049_alter_table_heading_alter_table_parent_and_more.py rename to spoonbill_web/migrations/0049_alter_table_heading_alter_table_parent_and_more.py index 5bf9ec8a..a8b684a0 100644 --- a/core/migrations/0049_alter_table_heading_alter_table_parent_and_more.py +++ b/spoonbill_web/migrations/0049_alter_table_heading_alter_table_parent_and_more.py @@ -2,12 +2,12 @@ from django.db import migrations, models -import core.validators +import spoonbill_web.validators class Migration(migrations.Migration): dependencies = [ - ("core", "0048_alter_table_array_tables"), + ("spoonbill_web", "0048_alter_table_array_tables"), ] operations = [ @@ -35,7 +35,7 @@ class Migration(migrations.Migration): model_name="url", name="analyzed_data_url", field=models.CharField( - blank=True, default="", max_length=2048, validators=[core.validators.validate_url_or_path] + blank=True, default="", max_length=2048, validators=[spoonbill_web.validators.validate_url_or_path] ), ), migrations.AlterField( diff --git a/core/migrations/__init__.py b/spoonbill_web/migrations/__init__.py similarity index 100% rename from core/migrations/__init__.py rename to spoonbill_web/migrations/__init__.py diff --git a/core/models.py b/spoonbill_web/models.py similarity index 97% rename from core/models.py rename to spoonbill_web/models.py index 0cc56508..b3b3d5f7 100644 --- a/core/models.py +++ b/spoonbill_web/models.py @@ -6,9 +6,9 @@ from django.db import models from django.utils.translation import gettext_lazy as _ -from core.file_storage import MediaAndDataregistryFS -from core.utils import export_directory_path, instance_directory_path -from core.validators import url_multi_upload_validator, validate_url_or_path +from spoonbill_web.file_storage import MediaAndDataregistryFS +from spoonbill_web.utils import export_directory_path, instance_directory_path +from spoonbill_web.validators import url_multi_upload_validator, validate_url_or_path fs = MediaAndDataregistryFS() diff --git a/core/routing.py b/spoonbill_web/routing.py similarity index 97% rename from core/routing.py rename to spoonbill_web/routing.py index 6366c24d..f40ba891 100644 --- a/core/routing.py +++ b/spoonbill_web/routing.py @@ -2,7 +2,7 @@ from rest_framework.routers import DefaultRouter from rest_framework_nested import routers -from . import consumers, views +from spoonbill_web import consumers, views router = DefaultRouter() router.register(r"uploads", views.UploadViewSet, basename="uploads") diff --git a/core/serializers.py b/spoonbill_web/serializers.py similarity index 96% rename from core/serializers.py rename to spoonbill_web/serializers.py index a60d771b..b0726082 100644 --- a/core/serializers.py +++ b/spoonbill_web/serializers.py @@ -2,7 +2,7 @@ from django.contrib.auth.models import User from rest_framework import serializers -from core.models import DataFile, DataSelection, Flatten, Table, Upload, Url, Validation +from spoonbill_web.models import DataFile, DataSelection, Flatten, Table, Upload, Url, Validation class ArrayTablesSerializer(serializers.ModelSerializer): diff --git a/core/tasks.py b/spoonbill_web/tasks.py similarity index 99% rename from core/tasks.py rename to spoonbill_web/tasks.py index 68596724..186b4880 100644 --- a/core/tasks.py +++ b/spoonbill_web/tasks.py @@ -22,9 +22,10 @@ from spoonbill.stats import DataPreprocessor from spoonbill.utils import get_reader -from core.models import DataFile, Flatten, Upload, Url -from core.serializers import FlattenSerializer, UploadSerializer, UrlSerializer -from core.utils import ( +from core.celery import app +from spoonbill_web.models import DataFile, Flatten, Upload, Url +from spoonbill_web.serializers import FlattenSerializer, UploadSerializer, UrlSerializer +from spoonbill_web.utils import ( dataregistry_path_formatter, dataregistry_path_resolver, get_flatten_options, @@ -35,7 +36,6 @@ retrieve_tables, zip_files, ) -from spoonbill_web.celery import app as celery_app DATA_DIR = os.path.dirname(__file__) + "/data" SCHEMA_PATH = f"{DATA_DIR}/schema.json" @@ -62,7 +62,7 @@ def get_serializer_by_model(str_model, log_context=None): return getters[str_model]["model"], getters[str_model]["serializer"]() -@celery_app.task +@app.task def validate_data(object_id, model=None, lang_code="en"): with internationalization(lang_code=lang_code): logger_context = {"DATASOURCE_ID": object_id, "TASK": "validate_data"} @@ -215,7 +215,7 @@ def validate_data(object_id, model=None, lang_code="en"): ) -@celery_app.task +@app.task def cleanup_upload(object_id, model=None, lang_code="en"): """Task cleanup all data related to upload id.""" with internationalization(lang_code=lang_code): @@ -250,7 +250,7 @@ def cleanup_upload(object_id, model=None, lang_code="en"): logger.debug("Remove all data from %s", datasource_paths) -@celery_app.task +@app.task def download_data_source(object_id, model=None, lang_code="en"): with internationalization(lang_code=lang_code): logger_context = {"DATASOURCE_ID": object_id, "TASK": "download_data_source"} @@ -473,7 +473,7 @@ def download_data_source(object_id, model=None, lang_code="en"): ) -@celery_app.task +@app.task def flatten_data(flatten_id, model=None, lang_code="en_US"): with internationalization(lang_code=lang_code): logger_context = {"FLATTEN_ID": flatten_id, "TASK": "flatten_data", "MODEL": model} diff --git a/spoonbill_web/urls.py b/spoonbill_web/urls.py index 70e7e041..052f5fa4 100644 --- a/spoonbill_web/urls.py +++ b/spoonbill_web/urls.py @@ -1,5 +1,21 @@ -from django.conf import settings -from django.conf.urls.static import static from django.urls import include, path -urlpatterns = [path("api/", include("core.urls")), *static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)] +from spoonbill_web.routing import ( + router, + upload_preview_router, + upload_selection_router, + upload_table_router, + url_preview_router, + url_selection_router, + url_table_router, +) + +urlpatterns = [ + path("", include(router.urls)), + path("", include(upload_selection_router.urls)), + path("", include(upload_table_router.urls)), + path("", include(url_selection_router.urls)), + path("", include(url_table_router.urls)), + path("", include(upload_preview_router.urls)), + path("", include(url_preview_router.urls)), +] diff --git a/core/utils.py b/spoonbill_web/utils.py similarity index 98% rename from core/utils.py rename to spoonbill_web/utils.py index 6e4b86fb..a5923a18 100644 --- a/core/utils.py +++ b/spoonbill_web/utils.py @@ -18,8 +18,8 @@ from spoonbill.stats import DataPreprocessor from spoonbill.utils import SchemaHeaderExtractor, nonschema_title_formatter -from core.column_headings import headings -from core.constants import OCDS_LITE_CONFIG +from spoonbill_web.column_headings import headings +from spoonbill_web.constants import OCDS_LITE_CONFIG logger = logging.getLogger(__name__) diff --git a/core/validators.py b/spoonbill_web/validators.py similarity index 95% rename from core/validators.py rename to spoonbill_web/validators.py index 3e8261cd..90bb062b 100644 --- a/core/validators.py +++ b/spoonbill_web/validators.py @@ -6,7 +6,7 @@ from django.core.exceptions import ValidationError from django.core.validators import URLValidator -from core.utils import dataregistry_path_formatter, dataregistry_path_resolver, get_protocol +from spoonbill_web.utils import dataregistry_path_formatter, dataregistry_path_resolver, get_protocol def dataregistry_path_validator(path): diff --git a/core/views.py b/spoonbill_web/views.py similarity index 98% rename from core/views.py rename to spoonbill_web/views.py index 9749db38..3a863159 100644 --- a/core/views.py +++ b/spoonbill_web/views.py @@ -17,17 +17,17 @@ from spoonbill.common import TABLE_THRESHOLD from spoonbill.stats import DataPreprocessor -from core.constants import OCDS_LITE_CONFIG -from core.models import DataFile, DataSelection, Flatten, Table, Upload, Url, Validation -from core.serializers import ( +from spoonbill_web.constants import OCDS_LITE_CONFIG +from spoonbill_web.models import DataFile, DataSelection, Flatten, Table, Upload, Url, Validation +from spoonbill_web.serializers import ( DataSelectionSerializer, FlattenSerializer, TablesSerializer, UploadSerializer, UrlSerializer, ) -from core.tasks import cleanup_upload, download_data_source, flatten_data, validate_data -from core.utils import get_protocol, set_column_headings, store_preview_csv +from spoonbill_web.tasks import cleanup_upload, download_data_source, flatten_data, validate_data +from spoonbill_web.utils import get_protocol, set_column_headings, store_preview_csv COLUMNS = "columns" COMBINED_COLUMNS = "combined_columns" diff --git a/tests/__init__.py b/tests/__init__.py index e69de29b..de82bbe0 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -0,0 +1,101 @@ +import json +import pathlib +import uuid + +from spoonbill_web.constants import OCDS_LITE_CONFIG + +DATA_DIR = pathlib.Path(__file__).parent / "data" + +ANALYZED_DATA_PATH = DATA_DIR / "analyzed.dump" + +REASONS = { + "400": "Bad Request.", + "401": "401 Unauthorized.", + "403": "Forbidden.", + "404": "Not found.", + "405": "Method Not Allowed.", +} + + +class Task: + @property + def id(self): + return str(uuid.uuid4()) + + +class Response: + def __init__(self, status_code=200, body=None): + self.status_code = status_code + self.headers = {"Content-Length": "204801"} + self.text = body + self.url = None + + def iter_content(self, chunk_size=1024): + binary_body = self.text.encode("utf-8") + chunk = 0 + while len(binary_body) > chunk: + yield binary_body[chunk : chunk + chunk_size] + chunk += chunk_size + + def json(self): + return json.loads(self.text) + + @property + def reason(self): + return REASONS.get(str(self.status_code)) + + +data_selection = {"tables": [{"name": "tenders"}, {"name": "parties"}]} + + +def create_data_selection(client, parent, prefix=None, kind=None): + url = f"{prefix}{parent.id}/selections/" + data = {"kind": kind} if kind and kind == "ocds_lite" else data_selection + response = client.post(url, content_type="application/json", data=data) + assert response.status_code == 201 + json_data = response.json() + assert set(json_data.keys()) == {"id", "tables", "headings_type", "flattens", "kind"} + if kind: + assert json_data["kind"] == "ocds_lite" + else: + assert json_data["kind"] == "custom" + if kind and kind == "ocds_lite": + tables = OCDS_LITE_CONFIG["tables"].keys() + else: + tables = [t["name"] for t in data_selection["tables"]] + + assert len(json_data["tables"]) == len(tables) + for table in json_data["tables"]: + assert "id" in table + assert table["name"] in tables + return json_data + + +def get_data_selections(client, parent, prefix=None): + json_data = create_data_selection(client, parent, prefix) + + # get list of selections + url = f"{prefix}{parent.id}/selections/" + response = client.get(url) + assert response.status_code == 200 + json_resp = response.json() + assert len(json_resp) == 1 + assert json_resp[0] == json_data + + # get single selection by id + url = f"{prefix}{parent.id}/selections/{json_data['id']}/" + response = client.get(url) + assert response.status_code == 200 + json_resp = response.json() + assert json_resp == json_data + + +def create_flatten(client, parent, prefix=None, selection_id=None, export_format="xlsx", kind=None): + if not selection_id: + selection = create_data_selection(client, parent, prefix, kind=kind) + selection_id = selection["id"] + + url = f"{prefix}{parent.id}/selections/{selection_id}/flattens/" + response = client.post(url, content_type="application/json", data={"export_format": export_format}) + assert response.status_code == 201 + return selection_id, response.json()["id"] diff --git a/tests/conftest.py b/tests/conftest.py index f83490d6..93586f7d 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,6 +1,5 @@ import json import os -import pathlib import shutil import uuid @@ -11,15 +10,9 @@ from django.utils import timezone from spoonbill.stats import DataPreprocessor -from core.models import DataFile, Upload, Url, Validation -from core.utils import retrieve_tables - -from .utils import Response, Task - -DATA_DIR = pathlib.Path(__file__).parent / "data" - -ANALYZED_DATA_PATH = DATA_DIR / "analyzed.dump" -SAMPLE_DATA_PATH = DATA_DIR / "sample-dataset.json" +from spoonbill_web.models import DataFile, Upload, Url, Validation +from spoonbill_web.utils import retrieve_tables +from tests import ANALYZED_DATA_PATH, DATA_DIR, Response, Task @pytest.fixture @@ -31,7 +24,7 @@ def schema(): @pytest.fixture def dataset(): - with open(SAMPLE_DATA_PATH) as f: + with open(DATA_DIR / "sample-dataset.json") as f: yield f @@ -50,19 +43,19 @@ def available_tables(): @pytest.fixture def validation_task(mocker): - mock = mocker.patch("core.views.validate_data") + mock = mocker.patch("spoonbill_web.views.validate_data") mock.delay.return_value = Task() return mock @pytest.fixture def cleanup_upload_task(mocker): - return mocker.patch("core.views.cleanup_upload") + return mocker.patch("spoonbill_web.views.cleanup_upload") @pytest.fixture def download_datasource_task(mocker): - return mocker.patch("core.views.download_data_source") + return mocker.patch("spoonbill_web.views.download_data_source") @pytest.fixture @@ -124,7 +117,7 @@ def url_obj_w_files(url_obj, dataset, analyzed): @pytest.fixture def mocked_request(mocker, url_obj): - mock = mocker.patch("core.tasks.requests") + mock = mocker.patch("spoonbill_web.tasks.requests") path = os.path.dirname(__file__) + "/data/sample-dataset.json" with open(path) as f: data = f.read() diff --git a/tests/test_channels.py b/tests/test_channels.py index b6d8d1d8..31e5dd8a 100644 --- a/tests/test_channels.py +++ b/tests/test_channels.py @@ -5,10 +5,9 @@ from channels.testing import WebsocketCommunicator from django.urls import re_path -from core.consumers import ValidationConsumer -from core.tasks import download_data_source, flatten_data, validate_data - -from .utils import create_flatten +from spoonbill_web.consumers import ValidationConsumer +from spoonbill_web.tasks import download_data_source, flatten_data, validate_data +from tests import create_flatten @pytest.mark.django_db diff --git a/tests/test_file_storage.py b/tests/test_file_storage.py index 9405421a..b5ae0c96 100644 --- a/tests/test_file_storage.py +++ b/tests/test_file_storage.py @@ -2,7 +2,7 @@ from django.core.exceptions import SuspiciousFileOperation from django.test import override_settings -from core.file_storage import safe_join +from spoonbill_web.file_storage import safe_join @override_settings(DATAREGISTRY_MEDIA_ROOT="") diff --git a/tests/test_flattens.py b/tests/test_flattens.py index d1e7db1c..1e3ca7b2 100644 --- a/tests/test_flattens.py +++ b/tests/test_flattens.py @@ -1,7 +1,7 @@ import pytest -from core.models import Flatten -from tests.utils import create_data_selection, create_flatten +from spoonbill_web.models import Flatten +from tests import create_data_selection, create_flatten @pytest.mark.django_db diff --git a/tests/test_tables.py b/tests/test_tables.py index f6ba4ed4..6444f0e5 100644 --- a/tests/test_tables.py +++ b/tests/test_tables.py @@ -3,7 +3,7 @@ import pytest from rest_framework import status -from tests.utils import create_data_selection +from tests import create_data_selection @pytest.mark.django_db @@ -202,7 +202,7 @@ def test_table_split_no_left_space(self): tables = self.client.get( f"/api/uploads/{self.validated_datasource.id}/selections/{selection['id']}/tables/" ).json() - mocked_split = self.mocker.patch("core.views.store_preview_csv") + mocked_split = self.mocker.patch("spoonbill_web.views.store_preview_csv") mocked_split.side_effect = OSError(errno.ENOSPC, "No left space.") response = self.client.patch( @@ -242,7 +242,7 @@ def test_table_split_preview_no_left_space(self): ) assert response.status_code == status.HTTP_200_OK - mocked_split = self.mocker.patch("core.views.store_preview_csv") + mocked_split = self.mocker.patch("spoonbill_web.views.store_preview_csv") mocked_split.side_effect = OSError(errno.ENOSPC, "No left space.") response = self.client.get( @@ -257,7 +257,7 @@ def test_table_split_file_not_found(self): tables = self.client.get( f"/api/uploads/{self.validated_datasource.id}/selections/{selection['id']}/tables/" ).json() - mocked_open = self.mocker.patch("core.views.DataPreprocessor.restore") + mocked_open = self.mocker.patch("spoonbill_web.views.DataPreprocessor.restore") mocked_open.side_effect = FileNotFoundError(errno.ENOENT, "File not found.") response = self.client.patch( @@ -274,7 +274,7 @@ def test_table_preview_file_not_found(self): f"/api/uploads/{self.validated_datasource.id}/selections/{selection['id']}/tables/" ).json() - mocked_open = self.mocker.patch("core.views.open") + mocked_open = self.mocker.patch("spoonbill_web.views.open") mocked_open.return_value.__enter__.side_effect = FileNotFoundError(errno.ENOENT, "File not found.") response = self.client.get( diff --git a/tests/test_tasks.py b/tests/test_tasks.py index 21a371ec..9730d947 100644 --- a/tests/test_tasks.py +++ b/tests/test_tasks.py @@ -6,10 +6,9 @@ from django.conf import settings from django.utils import timezone -from core.models import DataSelection, Flatten, Upload, Url -from core.tasks import cleanup_upload, download_data_source, flatten_data, validate_data - -from .utils import Response, create_flatten +from spoonbill_web.models import DataSelection, Flatten, Upload, Url +from spoonbill_web.tasks import cleanup_upload, download_data_source, flatten_data, validate_data +from tests import Response, create_flatten class BaseUploadTestSuite: @@ -84,7 +83,7 @@ def test_not_json_file(self, upload_obj): assert not upload_obj.validation.is_valid def test_not_found(self, mocker): - mocked_logger = mocker.patch("core.tasks.logger") + mocked_logger = mocker.patch("spoonbill_web.tasks.logger") obj_id = "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee" model = "Upload" validate_data(obj_id, model=model) @@ -101,8 +100,8 @@ def test_not_found(self, mocker): ) def test_handle_exception(self, upload_obj, mocker): - mocked_logger = mocker.patch("core.tasks.logger") - mocked_open = mocker.patch("core.tasks.FileAnalyzer") + mocked_logger = mocker.patch("spoonbill_web.tasks.logger") + mocked_open = mocker.patch("spoonbill_web.tasks.FileAnalyzer") mocked_open.side_effect = Exception("Open fails") validate_data(upload_obj.id, model=self.model) assert mocked_logger.exception.call_count == 1 @@ -115,7 +114,7 @@ def test_no_left_space(self, upload_obj, mocker): assert upload_obj.validation.is_valid is None assert not upload_obj.available_tables - mocked_dump = mocker.patch("core.tasks.FileAnalyzer") + mocked_dump = mocker.patch("spoonbill_web.tasks.FileAnalyzer") mocked_dump().pkg_type = "releases" mocked_dump().spec.dump.side_effect = OSError(errno.ENOSPC, "No left space.") validate_data(upload_obj.id, model="Upload") @@ -148,12 +147,12 @@ def test_skip_cleanup(self, upload_obj): assert not upload_obj.deleted def test_unregistered_model(self, upload_obj, mocker): - shutil = mocker.patch("core.tasks.shutil") + shutil = mocker.patch("spoonbill_web.tasks.shutil") cleanup_upload(upload_obj.id, model="SomeNew") assert shutil.rmtree.call_count == 0 def test_cleanup_not_found(self, mocker): - mocked_logger = mocker.patch("core.tasks.logger") + mocked_logger = mocker.patch("spoonbill_web.tasks.logger") obj_id = "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee" cleanup_upload(obj_id, model=self.model) mocked_logger.info.assert_called_once_with( @@ -169,7 +168,7 @@ def test_cleanup_not_found(self, mocker): ) def test_dataregistry_failed(self, url_obj, mocker): - mocked_logger = mocker.patch("core.tasks.logger") + mocked_logger = mocker.patch("spoonbill_web.tasks.logger") url_obj.urls = ["file:///file.json"] url_obj.save(update_fields=["urls"]) assert not url_obj.deleted @@ -262,7 +261,7 @@ def test_exception_on_analyzed_data_download(self, mocked_request, url_obj, data assert data == json.loads(dataset.read()) def test_not_found(self, mocker): - mocked_logger = mocker.patch("core.tasks.logger") + mocked_logger = mocker.patch("spoonbill_web.tasks.logger") obj_id = "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee" download_data_source(obj_id, model=self.model) mocked_logger.info.assert_called_once_with( @@ -299,7 +298,7 @@ class TestFlattenDataTask: def test_flatten_non_registered_model(self, client, upload_obj_validated, mocker): _, flatten_id = create_flatten(client, upload_obj_validated, "/api/uploads/") model = "NewModel" - mocked_logger = mocker.patch("core.tasks.logger") + mocked_logger = mocker.patch("spoonbill_web.tasks.logger") flatten_data(flatten_id, model=model) mocked_logger.info.assert_called_once_with( @@ -314,7 +313,7 @@ def test_flatten_non_registered_model(self, client, upload_obj_validated, mocker ) def test_flatten_not_found(self, mocker): - mocked_logger = mocker.patch("core.tasks.logger") + mocked_logger = mocker.patch("spoonbill_web.tasks.logger") flatten_id = "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee" flatten_data(flatten_id, model=self.model) mocked_logger.info.assert_called_once_with( @@ -331,7 +330,7 @@ def test_flatten_not_found(self, mocker): def test_flatten_handle_type_error(self, client, upload_obj_validated, mocker): _, flatten_id = create_flatten(client, upload_obj_validated, "/api/uploads/") - mocked_get_options = mocker.patch("core.tasks.get_flatten_options") + mocked_get_options = mocker.patch("spoonbill_web.tasks.get_flatten_options") exc_message = "TypeError message" mocked_get_options.side_effect = TypeError(exc_message) flatten_data(flatten_id, model=self.model) @@ -372,7 +371,7 @@ def test_flatten_csv_successful(self, client, upload_obj_validated): def test_no_left_space(self, client, upload_obj_validated, mocker): _, flatten_id = create_flatten(client, upload_obj_validated, "/api/uploads/") - mocked_flattener = mocker.patch("core.tasks.FileFlattener.flatten_file") + mocked_flattener = mocker.patch("spoonbill_web.tasks.FileFlattener.flatten_file") mocked_flattener.side_effect = OSError(errno.ENOSPC, "No left space.") flatten_data(flatten_id, model=self.model) diff --git a/tests/test_upload.py b/tests/test_upload.py index 44a77624..765e5765 100644 --- a/tests/test_upload.py +++ b/tests/test_upload.py @@ -10,11 +10,9 @@ from django.test import TestCase, override_settings from rest_framework import status -from core.models import Upload -from core.serializers import UploadSerializer -from tests.utils import create_data_selection, get_data_selections - -from .utils import Task +from spoonbill_web.models import Upload +from spoonbill_web.serializers import UploadSerializer +from tests import Task, create_data_selection, get_data_selections DATA_DIR = os.path.dirname(__file__) + "/data" DATASET_PATH = f"{DATA_DIR}/sample-dataset.json" @@ -123,8 +121,8 @@ def test_no_left_space(self): @pytest.mark.django_db class TestUploadViewsUnit(TestCase): @override_settings() - @patch("core.views.validate_data") - @patch("core.views.cleanup_upload") + @patch("spoonbill_web.views.validate_data") + @patch("spoonbill_web.views.cleanup_upload") def test_create_selections_successful(self, mocked_cleanup, mocked_validation): for path, reader in PATHS.items(): settings.FILE_UPLOAD_MAX_MEMORY_SIZE = 100 diff --git a/tests/test_urls.py b/tests/test_urls.py index 8ba92c2f..830c9fa8 100644 --- a/tests/test_urls.py +++ b/tests/test_urls.py @@ -8,12 +8,10 @@ from django.contrib.auth.models import User from django.test import override_settings -from core.models import Url -from core.serializers import UrlSerializer -from core.utils import dataregistry_path_formatter, dataregistry_path_resolver - -from .conftest import ANALYZED_DATA_PATH -from .utils import create_data_selection, get_data_selections +from spoonbill_web.models import Url +from spoonbill_web.serializers import UrlSerializer +from spoonbill_web.utils import dataregistry_path_formatter, dataregistry_path_resolver +from tests import ANALYZED_DATA_PATH, create_data_selection, get_data_selections DATA_DIR = os.path.dirname(__file__) + "/data" DATASET_PATH = f"{DATA_DIR}/sample-dataset.json" diff --git a/tests/test_utils.py b/tests/test_utils.py index 53c20144..c424cff5 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -4,8 +4,8 @@ import pytest from django.conf import settings -from core.models import DataFile -from core.utils import get_schema, gz_size, multiple_file_assigner +from spoonbill_web.models import DataFile +from spoonbill_web.utils import get_schema, gz_size, multiple_file_assigner DATA_DIR = os.path.dirname(__file__) + "/data" DATASET_PATH_GZ = f"{DATA_DIR}/sample-dataset.json.gz" diff --git a/tests/test_validators.py b/tests/test_validators.py index 145f23ad..32659c8c 100644 --- a/tests/test_validators.py +++ b/tests/test_validators.py @@ -4,7 +4,7 @@ from django.core.exceptions import ValidationError from django.test import override_settings -from core.validators import dataregistry_path_validator, validate_url_or_path +from spoonbill_web.validators import dataregistry_path_validator, validate_url_or_path def test_validate_url_successful(): diff --git a/tests/utils.py b/tests/utils.py deleted file mode 100644 index 633a108e..00000000 --- a/tests/utils.py +++ /dev/null @@ -1,96 +0,0 @@ -import json -import uuid - -from core.constants import OCDS_LITE_CONFIG - -REASONS = { - "400": "Bad Request.", - "401": "401 Unauthorized.", - "403": "Forbidden.", - "404": "Not found.", - "405": "Method Not Allowed.", -} - - -class Task: - @property - def id(self): - return str(uuid.uuid4()) - - -class Response: - def __init__(self, status_code=200, body=None): - self.status_code = status_code - self.headers = {"Content-Length": "204801"} - self.text = body - self.url = None - - def iter_content(self, chunk_size=1024): - binary_body = self.text.encode("utf-8") - chunk = 0 - while len(binary_body) > chunk: - yield binary_body[chunk : chunk + chunk_size] - chunk += chunk_size - - def json(self): - return json.loads(self.text) - - @property - def reason(self): - return REASONS.get(str(self.status_code)) - - -data_selection = {"tables": [{"name": "tenders"}, {"name": "parties"}]} - - -def create_data_selection(client, parent, prefix=None, kind=None): - url = f"{prefix}{parent.id}/selections/" - data = {"kind": kind} if kind and kind == "ocds_lite" else data_selection - response = client.post(url, content_type="application/json", data=data) - assert response.status_code == 201 - json_data = response.json() - assert set(json_data.keys()) == {"id", "tables", "headings_type", "flattens", "kind"} - if kind: - assert json_data["kind"] == "ocds_lite" - else: - assert json_data["kind"] == "custom" - if kind and kind == "ocds_lite": - tables = OCDS_LITE_CONFIG["tables"].keys() - else: - tables = [t["name"] for t in data_selection["tables"]] - - assert len(json_data["tables"]) == len(tables) - for table in json_data["tables"]: - assert "id" in table - assert table["name"] in tables - return json_data - - -def get_data_selections(client, parent, prefix=None): - json_data = create_data_selection(client, parent, prefix) - - # get list of selections - url = f"{prefix}{parent.id}/selections/" - response = client.get(url) - assert response.status_code == 200 - json_resp = response.json() - assert len(json_resp) == 1 - assert json_resp[0] == json_data - - # get single selection by id - url = f"{prefix}{parent.id}/selections/{json_data['id']}/" - response = client.get(url) - assert response.status_code == 200 - json_resp = response.json() - assert json_resp == json_data - - -def create_flatten(client, parent, prefix=None, selection_id=None, export_format="xlsx", kind=None): - if not selection_id: - selection = create_data_selection(client, parent, prefix, kind=kind) - selection_id = selection["id"] - - url = f"{prefix}{parent.id}/selections/{selection_id}/flattens/" - response = client.post(url, content_type="application/json", data={"export_format": export_format}) - assert response.status_code == 201 - return selection_id, response.json()["id"]