/usr/lib/python3/dist-packages/babel/messages/__pycache__
Edit: /usr/lib/python3/dist-packages/babel/messages/__pycache__/checkers.cpython-310.pyc (4690B)
o
V\ @ sd d Z ddlmZmZ ddlmZmZ h dddhh dgZdd Zd
d Z dd
Z
dd Ze ZdS )z
babel.messages.checkers
~~~~~~~~~~~~~~~~~~~~~~~
Various routines that help with validation of translations.
:since: version 0.9
:copyright: (c) 2013-2019 by the Babel Team.
:license: BSD, see LICENSE for more details.
)TranslationError
PYTHON_FORMAT)string_typesizip> diuxX> FGfgc C sd |j st|jts
tddS | du rdS |j}t|ttfs"|f}t|| jkr0td| j dS )z0Verify the number of plurals in the translation.z/Found plural forms for non-pluralizable messageNz*Wrong number of plural forms (expected %d)) pluralizable
isinstancestringr r listtuplelennum_plurals)catalogmessagemsgstrs r 9/usr/lib/python3/dist-packages/babel/messages/checkers.pyr s r c C sh d|j vrdS |j}t|ttfs|f}|j}t|ttfs!|f}t||D ]\}}|r1t|| q&dS )z9Verify the format string placeholders in the translation.z
python-formatN)flagsidr r r r r _validate_format)r r msgidsr msgidmsgstrr r r
python_format. s
r! c C s dd }dd }dd }t || |f\}}t |||f\}}|r(|s(|s(td||kr0td|rbt|t|kr>td tt||D ]\} \\}
}\}
}|||s_td
| d ||f qEdS t|}
|D ] \}}||
vrvtd| |||
| std
|||
| f qhdS )a Test format string `alternative` against `format`. `format` can be the
msgid of a message and `alternative` one of the `msgstr`\s. The two
arguments are not interchangeable as `alternative` may contain less
placeholders if `format` uses named placeholders.
The behavior of this function is undefined if the string does not use
string formattings.
If the string formatting of `alternative` is compatible to `format` the
function returns `None`, otherwise a `TranslationError` is raised.
Examples for compatible format strings:
>>> _validate_format('Hello %s!', 'Hallo %s!')
>>> _validate_format('Hello %i!', 'Hallo %d!')
Example for an incompatible format strings:
>>> _validate_format('Hello %(name)s!', 'Hallo %s!')
Traceback (most recent call last):
...
TranslationError: the format strings are of different kinds
This function is used by the `python_format` checker.
:param format: The original format string
:param alternative: The alternative format string that should be checked
against format
:raises TranslationError: on formatting errors
c S sJ g }t | D ]}| \}}}|dkr|d u rq||t|f q|S )N%)r finditergroupsappendstr)r resultmatchnameformattypecharr r r _parse^ s z _validate_format.
._parsec S s0 | |krdS t D ]
}| |v r||v r dS qdS )NTF)_string_format_compatibilities)absetr r r _compatibleg s z%_validate_format.._compatiblec S s@ d }| D ]\}}|d u r|d u }q|d u |krt dqt|S )Nz5format string mixes positional and named placeholders)r bool)results
positionalr) charr r r _check_positionalo s
z+_validate_format.._check_positionalzplaceholders are incompatiblez)the format strings are of different kindsz-positional format placeholders are unbalancedzDincompatible format for placeholder %d: %r and %r are not compatible zunknown named placeholder %rzDincompatible format for placeholder %r: %r and %r are not compatibleN)mapr r enumerater dict)r* alternativer, r1 r6 r. r/ a_positionalb_positionalidx_firstsecondtype_mapr) r+ r r r r > s: "
r c C s^ g } zddl m} W n ty Y nw |dD ] }| | qt| dkr-ttgS | S )Nr )working_setzbabel.checkers)
pkg_resourcesrC ImportErroriter_entry_pointsr% loadr r r! )checkersrC entry_pointr r r _find_checkers s rJ N)
__doc__babel.messages.catalogr r
babel._compatr r r- r r! r rJ rH r r r r s _