python-babel / babel

The official repository for Babel, the Python Internationalization Library
http://babel.pocoo.org/
BSD 3-Clause "New" or "Revised" License
1.29k stars 432 forks source link

Long path with space lead to wrong PO file. #1078

Open ChameleonRed opened 2 months ago

ChameleonRed commented 2 months ago

Overview Description

Steps to Reproduce

from io import BytesIO

from babel.messages import Catalog
from babel.messages.pofile import write_po, read_po

output_bytes = BytesIO()

catalog = Catalog()
catalog.add('test', locations=[('x x\\' * 40, 1)])
write_po(output_bytes, catalog, width=0)
data = output_bytes.getvalue()
print(data.decode('utf-8'))

input_bytes = BytesIO(data)
catalog = read_po(input_bytes)
print(catalog.get('test').locations)

Actual Results

Three paths.

Expected Results

One path 'x x\' * 40

Reproducibility

Run code.

Additional Information

I try to replace ' ' with '%20' - it is wrong but it works.

Option with not works as documented.

width=None # wrong type hints width=-1 # wrap occurs width= 0 # wrap occurs

Workaround is to replace ' ' or set large width.