Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added validation for identifiers token INameTokenTableRowSchema #75

Merged
merged 3 commits into from Jun 13, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 2 additions & 0 deletions CHANGES.rst
Expand Up @@ -6,6 +6,8 @@ Changelog

- Added `safe_utils.py` that will only include safe utils.
[gbastien]
- Added validation for identifiers token INameTokenTableRowSchema.
[odelaere]

1.38 (2022-02-03)
-----------------
Expand Down
10 changes: 9 additions & 1 deletion src/collective/contact/core/content/directory.py
Expand Up @@ -5,19 +5,27 @@
from plone.autoform.directives import widget
from plone.dexterity.content import Container
from plone.dexterity.schema import DexteritySchemaPolicy
from plone.i18n.normalizer.interfaces import IIDNormalizer
from plone.supermodel import model
from zope import schema
from zope.component import getUtility
from zope.interface import implements
from zope.interface import Interface


def is_valid_identifier(identifier):
idnormalizer = getUtility(IIDNormalizer)
return idnormalizer.normalize(identifier) == identifier


class INameTokenTableRowSchema(Interface):
"""Schema for dict rows used in DataGridFields
name is the 'real' name
token is the token used in the vocabularies
"""

name = schema.TextLine(title=_(u"Name"))
token = schema.TextLine(title=_(u"Token"))
token = schema.TextLine(title=_(u"Token"), constraint=is_valid_identifier)


class IDirectory(model.Schema):
Expand Down
11 changes: 11 additions & 0 deletions src/collective/contact/core/tests/test_content_types.py
@@ -1,5 +1,6 @@
# -*- coding: utf8 -*-

from collective.contact.core.content.directory import is_valid_identifier
from collective.contact.core.interfaces import IContactCoreParameters
from collective.contact.core.testing import INTEGRATION
from ecreall.helpers.testing.base import BaseTest
Expand Down Expand Up @@ -51,6 +52,16 @@ def test_directory(self):
self.assertIn({'name': 'Regiment', 'token': 'regiment'},
mydirectory.organization_levels)

def test_is_valid_identifier(self):
self.assertFalse(is_valid_identifier('Toto'))
self.assertTrue(is_valid_identifier('toto'))
self.assertTrue(is_valid_identifier('toto56'))
self.assertFalse(is_valid_identifier('toto 56'))
self.assertTrue(is_valid_identifier('toto-56'))
self.assertFalse(is_valid_identifier('toto-56@'))
self.assertFalse(is_valid_identifier('toto-56à'))
self.assertFalse(is_valid_identifier('toto-56É'))


class TestPerson(TestContentTypes):

Expand Down