diff --git a/rsconcept/backend/apps/rsform/models/LibraryItem.py b/rsconcept/backend/apps/rsform/models/LibraryItem.py index 144c6116..56813796 100644 --- a/rsconcept/backend/apps/rsform/models/LibraryItem.py +++ b/rsconcept/backend/apps/rsform/models/LibraryItem.py @@ -41,7 +41,7 @@ class LocationHead(TextChoices): COMMON = '/S' -_RE_LOCATION = r'^/[PLUS]((/[!\d\w]([!\d\w ]*[!\d\w])?)*)?$' # cspell:disable-line +_RE_LOCATION = r'^/[PLUS]((/[!\d\w]([!\d\w\- ]*[!\d\w])?)*)?$' # cspell:disable-line def validate_location(target: str) -> bool: diff --git a/rsconcept/backend/apps/rsform/tests/s_models/t_LibraryItem.py b/rsconcept/backend/apps/rsform/tests/s_models/t_LibraryItem.py index 5b6bed05..e9922a9c 100644 --- a/rsconcept/backend/apps/rsform/tests/s_models/t_LibraryItem.py +++ b/rsconcept/backend/apps/rsform/tests/s_models/t_LibraryItem.py @@ -87,13 +87,17 @@ class TestLocation(TestCase): self.assertFalse(validate_location('/S/1/')) self.assertFalse(validate_location('/S/1 ')) self.assertFalse(validate_location('/S/1/2 /3')) + self.assertFalse(validate_location('/S/-')) + self.assertFalse(validate_location('/S/1-')) self.assertTrue(validate_location('/P')) self.assertTrue(validate_location('/L')) self.assertTrue(validate_location('/U')) self.assertTrue(validate_location('/S')) self.assertTrue(validate_location('/S/1')) + self.assertTrue(validate_location('/S/1-2')) + self.assertTrue(validate_location('/S/20210101 asdf-a/2')) self.assertTrue(validate_location('/S/12')) self.assertTrue(validate_location('/S/12/3')) - self.assertTrue(validate_location('/S/Вася пупки')) + self.assertTrue(validate_location('/S/Вася шофер')) self.assertTrue(validate_location('/S/1/!asdf/тест тест')) diff --git a/rsconcept/backend/apps/rsform/views/rsforms.py b/rsconcept/backend/apps/rsform/views/rsforms.py index feb4438d..1af946f1 100644 --- a/rsconcept/backend/apps/rsform/views/rsforms.py +++ b/rsconcept/backend/apps/rsform/views/rsforms.py @@ -452,7 +452,7 @@ def create_rsform(request: Request): if 'file' not in request.FILES: return Response( status=c.HTTP_400_BAD_REQUEST, - data={f'file': msg.missingFile()} + data={'file': msg.missingFile()} ) else: data = utils.read_zipped_json(request.FILES['file'].file, utils.EXTEOR_INNER_FILENAME) diff --git a/rsconcept/frontend/src/models/libraryAPI.ts b/rsconcept/frontend/src/models/libraryAPI.ts index 7f3c6d86..6e6a13fc 100644 --- a/rsconcept/frontend/src/models/libraryAPI.ts +++ b/rsconcept/frontend/src/models/libraryAPI.ts @@ -7,7 +7,7 @@ import { TextMatcher } from '@/utils/utils'; import { ILibraryItem } from './library'; -const LOCATION_REGEXP = /^\/[PLUS]((\/[!\d\p{L}]([!\d\p{L} ]*[!\d\p{L}])?)*)?$/u; // cspell:disable-line +const LOCATION_REGEXP = /^\/[PLUS]((\/[!\d\p{L}]([!\d\p{L}\- ]*[!\d\p{L}])?)*)?$/u; // cspell:disable-line /** * Checks if a given target {@link ILibraryItem} matches the specified query.