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

Handle a single apostrophe more gracefully #218

Merged
merged 3 commits into from
Sep 7, 2024
Merged

Conversation

mgalgs
Copy link
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
13 checks passed
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