Skip to content
This repository was archived by the owner on Jun 26, 2025. It is now read-only.

Commit fcb3d87

Browse files
Merge branch 'release/3.6.5'
2 parents 29ebf02 + 34c47d6 commit fcb3d87

File tree

7 files changed

+51
-41
lines changed

7 files changed

+51
-41
lines changed

.bumpversion.cfg

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
[bumpversion]
2-
current_version = 3.6.4
2+
current_version = 3.6.5
33
commit = False
44
tag = False
55

microcosm_flask/fields/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
Custom fields.
33
44
"""
5-
from microcosm_flask.fields.ascii_encoded_string_field import AsciiEncodedStringField # noqa: F401
5+
from microcosm_flask.fields.cleaned_field import CleanedField # noqa: F401
66
from microcosm_flask.fields.enum_field import EnumField # noqa: F401
77
from microcosm_flask.fields.language_field import LanguageField # noqa: F401
88
from microcosm_flask.fields.query_string_list import QueryStringList # noqa: F401
Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,17 @@
1-
from marshmallow import fields
2-
3-
41
"""
5-
AsciiEncodedStringField Marshmallow field
6-
An extension of the marshmallow fields.String that removes unicode
2+
CleanedField Marshmallow field
3+
4+
An extension of the marshmallow fields.String that removes unicode control
75
characters on deserialization
86
"""
97

8+
import regex
9+
from marshmallow import fields
10+
1011

11-
class AsciiEncodedStringField(fields.String):
12+
class CleanedField(fields.String):
1213
def _deserialize(self, value, *args, **kwargs):
1314
if value is not None:
14-
value_encoded = value.encode("ascii", "ignore")
15-
value = value_encoded.decode()
15+
# remove control characters
16+
value = regex.sub(r'\p{C}', '', value)
1617
return super()._deserialize(value, *args, **kwargs)

microcosm_flask/swagger/parameters/default.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from marshmallow.fields import Field
77
from microcosm_logging.decorators import logger
88

9-
from microcosm_flask.fields import AsciiEncodedStringField, LanguageField, URIField
9+
from microcosm_flask.fields import CleanedField, LanguageField, URIField
1010
from microcosm_flask.swagger.parameters.base import ParameterBuilder
1111

1212

@@ -16,7 +16,7 @@
1616
FIELD_MAPPINGS = {
1717
LanguageField: FieldInfo("string", "language"),
1818
URIField: FieldInfo("string", "uri"),
19-
AsciiEncodedStringField: FieldInfo("string", "ascii-encoded-string"),
19+
CleanedField: FieldInfo("string", "cleaned"),
2020
fields.Boolean: FieldInfo("boolean", None),
2121
fields.Date: FieldInfo("string", "date"),
2222
fields.DateTime: FieldInfo("string", "date-time"),

microcosm_flask/tests/fields/test_ascii_string.py

Lines changed: 0 additions & 28 deletions
This file was deleted.
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
"""
2+
Test cleaned field.
3+
4+
"""
5+
from hamcrest import assert_that, equal_to, is_
6+
from marshmallow import Schema
7+
8+
from microcosm_flask.fields import CleanedField
9+
10+
11+
printable_ascii = "~}|{zyxwvutsrqponmlkjihgfedcba`_^]\\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>="\
12+
+ "<;:9876543210/.-,+*)(\'&%$#\"! "
13+
control_chars = "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\u0009\u000a"\
14+
+ "\u000b\u000c\u000d\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017"\
15+
+ "\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f"
16+
spanish_chars = "áéíóúüñ¿¡ÁÁÉÍÓÚÜÑ"
17+
portuguese_chars = "ãáàâçéêíõóôúüÃÁÀÂÇÉÊÍÕÓÔÚÜ"
18+
19+
comment_text = printable_ascii + control_chars + spanish_chars + portuguese_chars
20+
comment_text_cleaned = printable_ascii + spanish_chars + portuguese_chars
21+
22+
23+
class CleanedStringSchema(Schema):
24+
str = CleanedField(required=True)
25+
26+
27+
def test_load():
28+
schema = CleanedStringSchema()
29+
30+
result = schema.load(dict(
31+
str=comment_text,
32+
))
33+
assert_that(
34+
result["str"],
35+
is_(equal_to(comment_text_cleaned)),
36+
)

setup.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44

55
project = "microcosm-flask"
6-
version = "3.6.4"
6+
version = "3.6.5"
77

88

99
setup(
@@ -33,6 +33,7 @@
3333
"python-dateutil>=2.7.3",
3434
"PyYAML>=3.13",
3535
"rfc3986>=1.2.0",
36+
"regex>=2021.8.21",
3637
],
3738
extras_require={
3839
"metrics": "microcosm-metrics>=2.2.0",

0 commit comments

Comments
 (0)