Skip to content

Commit 8ff9a3d

Browse files
authored
Merge pull request #437 from kairu-ms/ps-linker
Replace inflect library by pluralizer to singular name
2 parents 9ac47a0 + 0add4c7 commit 8ff9a3d

File tree

6 files changed

+22
-24
lines changed

6 files changed

+22
-24
lines changed

requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
schematics~=2.1.1
22
pyyaml~=6.0.2
33
fuzzywuzzy~=0.18.0
4-
inflect~=5.6.2
54
azure-mgmt-core~=1.3.0
5+
pluralizer~=1.2.0
66
lxml~=4.9.4
77
flask~=3.0.3
88
cachelib~=0.13.0

src/aaz_dev/command/model/configuration/_arg_builder.py

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import re
22

3-
import inflect
4-
from utils.case import to_camel_case
3+
from utils.case import to_camel_case, to_singular
54

65
from ._arg import CMDArg, CMDArgBase, CMDArgumentHelp, CMDArgEnum, CMDArgDefault, CMDBooleanArgBase, \
76
CMDArgBlank, CMDObjectArgAdditionalProperties, CMDResourceLocationArgBase, CMDClsArgBase, CMDPasswordArgPromptInput
@@ -14,7 +13,6 @@
1413

1514

1615
class CMDArgBuilder:
17-
_inflect_engine = inflect.engine()
1816

1917
@classmethod
2018
def new_builder(cls, schema, parent=None, var_prefix=None, ref_args=None, ref_arg=None, is_update_action=False):
@@ -364,15 +362,15 @@ def get_options(self):
364362
if name == "[Index]" or name == "{Key}":
365363
assert self._arg_var.endswith(name)
366364
prefix = self._arg_var[:-len(name)].split('.')[-1]
367-
prefix = self._inflect_engine.singular_noun(prefix)
365+
prefix = to_singular(prefix)
368366
if name == "[Index]":
369367
name = f'{prefix}-index'
370368
elif name == "{Key}":
371369
name = f'{prefix}-key'
372370
elif name.startswith('[].') or name.startswith('{}.'):
373371
assert self._arg_var.endswith(name)
374372
prefix = self._arg_var[:-len(name)].split('.')[-1]
375-
prefix = self._inflect_engine.singular_noun(prefix)
373+
prefix = to_singular(prefix)
376374
name = prefix + name[2:]
377375
name = name.replace('.', '-')
378376
opt_name = self._build_option_name(name) # some schema name may contain $
@@ -392,7 +390,7 @@ def get_singular_options(self):
392390
# Disable singular options by default
393391
# if isinstance(self.schema, CMDArraySchema):
394392
# opt_name = self._build_option_name(self.schema.name.replace('$', '')) # some schema name may contain $
395-
# singular_opt_name = self._inflect_engine.singular_noun(opt_name) or opt_name
393+
# singular_opt_name = to_singular(opt_name) or opt_name
396394
# if singular_opt_name != opt_name:
397395
# return [singular_opt_name, ]
398396
return None

src/aaz_dev/command/model/configuration/_xml.py

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import inflect
21
import re
32

43
from lxml.builder import ElementMaker
@@ -10,6 +9,7 @@
109
from schematics.types.compound import PolyModelType
1110
from schematics.types.serializable import Serializable
1211
from ._fields import CMDPrimitiveField
12+
from utils.case import to_singular
1313

1414
XML_ROOT = "CodeGen"
1515

@@ -49,7 +49,7 @@ def build_xml(primitive, parent=None):
4949
if parent is None:
5050
parent = getattr(ElementMaker(), XML_ROOT)()
5151
# normalize element name
52-
if elem_name := _inflect_engine.singular_noun(parent.tag):
52+
if elem_name := to_singular(parent.tag):
5353
parent.tag = elem_name
5454
for field_name, data in primitive.items():
5555
primitive_to_xml(field_name, data, parent)
@@ -87,7 +87,7 @@ def build_model(model, primitive):
8787
# obtain suitable element name
8888
if serialized_name in primitive:
8989
curr_name = serialized_name
90-
elif (elem_name := _inflect_engine.singular_noun(serialized_name)) in primitive:
90+
elif (elem_name := to_singular(serialized_name)) in primitive:
9191
curr_name = elem_name
9292
else:
9393
continue
@@ -135,6 +135,3 @@ def _unwrap(field):
135135
return field.model_class
136136
else:
137137
return field
138-
139-
140-
_inflect_engine = inflect.engine()

src/aaz_dev/swagger/controller/command_generator.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import logging
22
import re
33

4-
import inflect
54
from abc import abstractmethod, ABC
65

76
from command.model.configuration import CMDCommandGroup, CMDCommand, CMDHttpOperation, CMDHttpRequest, \
@@ -19,14 +18,14 @@
1918
from utils.config import Config
2019
from utils.plane import PlaneEnum
2120
from utils.error_format import AAZErrorFormatEnum
21+
from utils.case import to_singular
22+
2223

2324
logger = logging.getLogger('backend')
2425

2526

2627
class _CommandGenerator(ABC):
2728

28-
_inflect_engine = inflect.engine()
29-
3029
@staticmethod
3130
def generate_command_version(resource):
3231
return resource.version
@@ -161,7 +160,7 @@ def generate_command_group_name_by_resource(cls, resource_path, rp_name):
161160
part = re.sub(r"\{[^{}]*}", '', part)
162161
part = re.sub(r"[^a-zA-Z0-9\-._]", '', part)
163162
name = camel_case_to_snake_case(part, '-')
164-
singular_name = cls._inflect_engine.singular_noun(name) or name
163+
singular_name = to_singular(name) or name
165164
names.append(singular_name)
166165
return " ".join([name for name in names if name])
167166

src/aaz_dev/swagger/model/specs/_resource.py

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,19 @@
44
import os
55
import re
66

7-
import inflect
87
from fuzzywuzzy import fuzz
98

109
from command.model.configuration import CMDResource
1110
from ._utils import map_path_2_repo
12-
from utils.base64 import b64encode_str, b64decode_str
11+
from utils.base64 import b64encode_str
1312
from swagger.utils import exceptions
13+
from utils.case import to_singular
1414

1515
logger = logging.getLogger('backend')
1616

1717

1818
class Resource:
1919
_CAMEL_CASE_PATTERN = re.compile(r"^([a-zA-Z][a-z0-9]+)(([A-Z][a-z0-9]*)+)$")
20-
_inflect_engine = inflect.engine()
2120

2221
def __init__(self, resource_id, path, version, file_path, resource_provider, body):
2322
self.path = path
@@ -98,22 +97,22 @@ def _parse_operation_group_name(self, op_id, method):
9897
words = []
9998
for part in self.id.split('?')[0].split('/'):
10099
if part == '{}' and len(words):
101-
singular = self._inflect_engine.singular_noun(words[-1])
100+
singular = to_singular(words[-1])
102101
if singular:
103102
words[-1] = singular
104103
else:
105104
words.append(part.replace('_', ""))
106-
op_group_singular = self._inflect_engine.singular_noun(op_group_name) or op_group_name
105+
op_group_singular = to_singular(op_group_name) or op_group_name
107106
words.reverse() # search from tail
108107
for word in words:
109-
word_singular = self._inflect_engine.singular_noun(word) or word
108+
word_singular = to_singular(word) or word
110109
if len(word_singular) > 1 and op_group_singular.lower().endswith(word_singular.lower()):
111110
if word == word_singular:
112111
# use singular
113112
op_group_name = op_group_singular
114113
elif word != word_singular:
115114
# use plural
116-
op_group_plural = self._inflect_engine.plural_noun(op_group_singular)
115+
op_group_plural = to_singular(op_group_singular)
117116
if op_group_plural is not False:
118117
op_group_name = op_group_plural
119118
break

src/aaz_dev/utils/case.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import re
2+
from pluralizer import Pluralizer
23

4+
_pluralizer = Pluralizer()
35

46
def to_camel_case(name):
57
assert isinstance(name, str)
@@ -13,3 +15,6 @@ def to_snake_case(name, separator='_'):
1315
name = re.sub('(.)([A-Z][a-z]+)', r'\1' + separator + r'\2', name)
1416
name = re.sub('([a-z0-9])([A-Z])', r'\1' + separator + r'\2', name).lower()
1517
return name.replace('-', separator).replace('_', separator)
18+
19+
def to_singular(name):
20+
return _pluralizer.singular(name)

0 commit comments

Comments
 (0)