Always pass text to markdown()
Review Request #10699 — Created Sept. 7, 2019 and discarded
Previously, we were passing a binary file to
markdown.markdownFromFile
in
render_markdown_from_file
, but this won't fly in Python 3. It expects
a file opened with an encoding. However, Django does not let you specify
an encoding when opening a file from storage, so that solution is out.
We now just read the entire file into memory, decode it from UTF-8, and
then pass that tomarkdown.markdown()
, which returns text directly.
With this patch applied, text file attachments render correctly
in Review Board on Python 2.7, 3.5, 3.6, and 3.7.
Summary | ID | Author |
---|---|---|
461754fc77a94d7e3573e58eb4f3c6ce828efeb4 | Barret Rennie |
- Commits:
-
Summary ID Author ce9e515d6089f5ea539a86901cd99fea2013bc55 Barret Rennie 461754fc77a94d7e3573e58eb4f3c6ce828efeb4 Barret Rennie - Diff:
-
Revision 2 (+14 -12)
Checks run (2 succeeded)
-
-
What's the error you hit? I tried passing in a
FileAttachment.file
intomarkdownFromFile
asinput
and it handled it right.Looking at the code, it attempts to do a
codecs.getreader()(input)
if you pass it a file handle, and it only needs.read()
and.close()
, both of which Django'sFile
supports.In my test, I was able to verify that
File.read()
was givingbytes
normally, but passing it intomarkdownFromFile
renderedunicode
fine. This on Python 3.x. -