Skip to content

Handle a single apostrophe more gracefully#218

Merged
jaraco merged 3 commits intojaraco:mainfrom
mgalgs:main
Sep 7, 2024
Merged

Handle a single apostrophe more gracefully#218
jaraco merged 3 commits intojaraco:mainfrom
mgalgs:main

Conversation

@mgalgs
Copy link
Copy Markdown
Contributor

@mgalgs mgalgs commented Aug 16, 2024

Currently we raise an exception if you pass a single-character string
consisting solely of an apostrophe to engine.plural(), e.g.:

>>> import inflect
>>> p = inflect.engine()
>>> p.plural("'")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/mgalgs/src/inflect/inflect/__init__.py", line 2386, in plural
    self._pl_special_adjective(word, count)
  File "/home/mgalgs/src/inflect/inflect/__init__.py", line 3157, in _pl_special_adjective
    pl = self.plural_noun(mo.group(1))
  File "/home/mgalgs/src/inflect/inflect/__init__.py", line 2393, in plural_noun
    def plural_noun(
  File "/home/mgalgs/src/inflect/env/lib/python3.9/site-packages/typeguard/_functions.py", line 136, in check_argument_types
    check_type_internal(value, annotation, memo)
  File "/home/mgalgs/src/inflect/env/lib/python3.9/site-packages/typeguard/_checkers.py", line 866, in check_type_internal
    raise TypeCheckError(f"is not an instance of {qualified_name(origin_type)}")
typeguard.TypeCheckError: argument "text" (str) is not an instance of inflect.Word

Rather than raising an exception, just return the "'" string back to the
caller (since nothing needs to be done to pluralize it).

This is accomplished by modifying the "ends with apostrophe s" regex to
require that there is at least one character present preceding the
apostrophe (rather than "zero or more"), to ensure that the match group
isn't empty for the "'" string.

mgalgs and others added 3 commits August 16, 2024 14:32
Currently we raise an exception if you pass a single-character string
consisting solely of an apostrophe to engine.plural(), e.g.:

    >>> import inflect
    >>> p = inflect.engine()
    >>> p.plural("'")
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/home/mgalgs/src/inflect/inflect/__init__.py", line 2386, in plural
        self._pl_special_adjective(word, count)
      File "/home/mgalgs/src/inflect/inflect/__init__.py", line 3157, in _pl_special_adjective
        pl = self.plural_noun(mo.group(1))
      File "/home/mgalgs/src/inflect/inflect/__init__.py", line 2393, in plural_noun
        def plural_noun(
      File "/home/mgalgs/src/inflect/env/lib/python3.9/site-packages/typeguard/_functions.py", line 136, in check_argument_types
        check_type_internal(value, annotation, memo)
      File "/home/mgalgs/src/inflect/env/lib/python3.9/site-packages/typeguard/_checkers.py", line 866, in check_type_internal
        raise TypeCheckError(f"is not an instance of {qualified_name(origin_type)}")
    typeguard.TypeCheckError: argument "text" (str) is not an instance of inflect.Word

Rather than raising an exception, just return the "'" string back to the
caller (since nothing needs to be done to pluralize it).

This is accomplished by modifying the "ends with apostrophe s" regex to
require that there is at least one character present preceding the
apostrophe (rather than "zero or more"), to ensure that the match group
isn't empty for the "'" string.
We recently fixed a bug where a single-character string consisting solely
of the apostrophe character raised an exception. Add this test case to the
test suite.
@jaraco jaraco merged commit afb84cf into jaraco:main Sep 7, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants