mirror of
https://github.com/ae-utbm/sith.git
synced 2025-07-11 04:19:25 +00:00
All: Apply Black coding rules
This commit is contained in:
151
core/utils.py
151
core/utils.py
@ -30,6 +30,7 @@ from io import BytesIO
|
||||
from datetime import date
|
||||
|
||||
from PIL import ExifTags
|
||||
|
||||
# from exceptions import IOError
|
||||
import PIL
|
||||
|
||||
@ -71,9 +72,9 @@ def get_semester(d=date.today()):
|
||||
|
||||
def scale_dimension(width, height, long_edge):
|
||||
if width > height:
|
||||
ratio = long_edge * 1. / width
|
||||
ratio = long_edge * 1.0 / width
|
||||
else:
|
||||
ratio = long_edge * 1. / height
|
||||
ratio = long_edge * 1.0 / height
|
||||
return int(width * ratio), int(height * ratio)
|
||||
|
||||
|
||||
@ -83,16 +84,28 @@ def resize_image(im, edge, format):
|
||||
content = BytesIO()
|
||||
im = im.resize((width, height), PIL.Image.ANTIALIAS)
|
||||
try:
|
||||
im.save(fp=content, format=format.upper(), quality=90, optimize=True, progressive=True)
|
||||
im.save(
|
||||
fp=content,
|
||||
format=format.upper(),
|
||||
quality=90,
|
||||
optimize=True,
|
||||
progressive=True,
|
||||
)
|
||||
except IOError:
|
||||
PIL.ImageFile.MAXBLOCK = im.size[0] * im.size[1]
|
||||
im.save(fp=content, format=format.upper(), quality=90, optimize=True, progressive=True)
|
||||
im.save(
|
||||
fp=content,
|
||||
format=format.upper(),
|
||||
quality=90,
|
||||
optimize=True,
|
||||
progressive=True,
|
||||
)
|
||||
return ContentFile(content.getvalue())
|
||||
|
||||
|
||||
def exif_auto_rotate(image):
|
||||
for orientation in ExifTags.TAGS.keys():
|
||||
if ExifTags.TAGS[orientation] == 'Orientation':
|
||||
if ExifTags.TAGS[orientation] == "Orientation":
|
||||
break
|
||||
exif = dict(image._getexif().items())
|
||||
|
||||
@ -108,54 +121,66 @@ def exif_auto_rotate(image):
|
||||
|
||||
def doku_to_markdown(text):
|
||||
"""This is a quite correct doku translator"""
|
||||
text = re.sub(r'([^:]|^)\/\/(.*?)\/\/', r'*\2*', text) # Italic (prevents protocol:// conflict)
|
||||
text = re.sub(r'<del>(.*?)<\/del>', r'~~\1~~', text, flags=re.DOTALL) # Strike (may be multiline)
|
||||
text = re.sub(r'<sup>(.*?)<\/sup>', r'^\1^', text) # Superscript (multiline not supported, because almost never used)
|
||||
text = re.sub(r'<sub>(.*?)<\/sub>', r'_\1_', text) # Subscript (idem)
|
||||
text = re.sub(
|
||||
r"([^:]|^)\/\/(.*?)\/\/", r"*\2*", text
|
||||
) # Italic (prevents protocol:// conflict)
|
||||
text = re.sub(
|
||||
r"<del>(.*?)<\/del>", r"~~\1~~", text, flags=re.DOTALL
|
||||
) # Strike (may be multiline)
|
||||
text = re.sub(
|
||||
r"<sup>(.*?)<\/sup>", r"^\1^", text
|
||||
) # Superscript (multiline not supported, because almost never used)
|
||||
text = re.sub(r"<sub>(.*?)<\/sub>", r"_\1_", text) # Subscript (idem)
|
||||
|
||||
text = re.sub(r'^======(.*?)======', r'#\1', text, flags=re.MULTILINE) # Titles
|
||||
text = re.sub(r'^=====(.*?)=====', r'##\1', text, flags=re.MULTILINE)
|
||||
text = re.sub(r'^====(.*?)====', r'###\1', text, flags=re.MULTILINE)
|
||||
text = re.sub(r'^===(.*?)===', r'####\1', text, flags=re.MULTILINE)
|
||||
text = re.sub(r'^==(.*?)==', r'#####\1', text, flags=re.MULTILINE)
|
||||
text = re.sub(r'^=(.*?)=', r'######\1', text, flags=re.MULTILINE)
|
||||
text = re.sub(r"^======(.*?)======", r"#\1", text, flags=re.MULTILINE) # Titles
|
||||
text = re.sub(r"^=====(.*?)=====", r"##\1", text, flags=re.MULTILINE)
|
||||
text = re.sub(r"^====(.*?)====", r"###\1", text, flags=re.MULTILINE)
|
||||
text = re.sub(r"^===(.*?)===", r"####\1", text, flags=re.MULTILINE)
|
||||
text = re.sub(r"^==(.*?)==", r"#####\1", text, flags=re.MULTILINE)
|
||||
text = re.sub(r"^=(.*?)=", r"######\1", text, flags=re.MULTILINE)
|
||||
|
||||
text = re.sub(r'<nowiki>', r'<nosyntax>', text)
|
||||
text = re.sub(r'</nowiki>', r'</nosyntax>', text)
|
||||
text = re.sub(r'<code>', r'```\n', text)
|
||||
text = re.sub(r'</code>', r'\n```', text)
|
||||
text = re.sub(r'article://', r'page://', text)
|
||||
text = re.sub(r'dfile://', r'file://', text)
|
||||
text = re.sub(r"<nowiki>", r"<nosyntax>", text)
|
||||
text = re.sub(r"</nowiki>", r"</nosyntax>", text)
|
||||
text = re.sub(r"<code>", r"```\n", text)
|
||||
text = re.sub(r"</code>", r"\n```", text)
|
||||
text = re.sub(r"article://", r"page://", text)
|
||||
text = re.sub(r"dfile://", r"file://", text)
|
||||
|
||||
i = 1
|
||||
for fn in re.findall(r'\(\((.*?)\)\)', text): # Footnotes
|
||||
text = re.sub(r'\(\((.*?)\)\)', r'[^%s]' % i, text, count=1)
|
||||
for fn in re.findall(r"\(\((.*?)\)\)", text): # Footnotes
|
||||
text = re.sub(r"\(\((.*?)\)\)", r"[^%s]" % i, text, count=1)
|
||||
text += "\n[^%s]: %s\n" % (i, fn)
|
||||
i += 1
|
||||
|
||||
text = re.sub(r'\\{2,}[\s]', r' \n', text) # Carriage return
|
||||
text = re.sub(r"\\{2,}[\s]", r" \n", text) # Carriage return
|
||||
|
||||
text = re.sub(r'\[\[(.*?)\|(.*?)\]\]', r'[\2](\1)', text) # Links
|
||||
text = re.sub(r'\[\[(.*?)\]\]', r'[\1](\1)', text) # Links 2
|
||||
text = re.sub(r'{{(.*?)\|(.*?)}}', r'', text) # Images
|
||||
text = re.sub(r'{{(.*?)(\|(.*?))?}}', r'', text) # Images 2
|
||||
text = re.sub(r'{\[(.*?)(\|(.*?))?\]}', r'[\1](\1)', text) # Video (transform to classic links, since we can't integrate them)
|
||||
text = re.sub(r"\[\[(.*?)\|(.*?)\]\]", r"[\2](\1)", text) # Links
|
||||
text = re.sub(r"\[\[(.*?)\]\]", r"[\1](\1)", text) # Links 2
|
||||
text = re.sub(r"{{(.*?)\|(.*?)}}", r'', text) # Images
|
||||
text = re.sub(r"{{(.*?)(\|(.*?))?}}", r'', text) # Images 2
|
||||
text = re.sub(
|
||||
r"{\[(.*?)(\|(.*?))?\]}", r"[\1](\1)", text
|
||||
) # Video (transform to classic links, since we can't integrate them)
|
||||
|
||||
text = re.sub(r'###(\d*?)###', r'[[[\1]]]', text) # Progress bar
|
||||
text = re.sub(r"###(\d*?)###", r"[[[\1]]]", text) # Progress bar
|
||||
|
||||
text = re.sub(r'(\n +[^* -][^\n]*(\n +[^* -][^\n]*)*)', r'```\1\n```', text, flags=re.DOTALL) # Block code without lists
|
||||
text = re.sub(
|
||||
r"(\n +[^* -][^\n]*(\n +[^* -][^\n]*)*)", r"```\1\n```", text, flags=re.DOTALL
|
||||
) # Block code without lists
|
||||
|
||||
text = re.sub(r'( +)-(.*)', r'1.\2', text) # Ordered lists
|
||||
text = re.sub(r"( +)-(.*)", r"1.\2", text) # Ordered lists
|
||||
|
||||
new_text = []
|
||||
quote_level = 0
|
||||
for line in text.splitlines(): # Tables and quotes
|
||||
enter = re.finditer(r'\[quote(=(.+?))?\]', line)
|
||||
quit = re.finditer(r'\[/quote\]', line)
|
||||
if re.search(r'\A\s*\^(([^\^]*?)\^)*', line): # Table part
|
||||
line = line.replace('^', '|')
|
||||
enter = re.finditer(r"\[quote(=(.+?))?\]", line)
|
||||
quit = re.finditer(r"\[/quote\]", line)
|
||||
if re.search(r"\A\s*\^(([^\^]*?)\^)*", line): # Table part
|
||||
line = line.replace("^", "|")
|
||||
new_text.append("> " * quote_level + line)
|
||||
new_text.append("> " * quote_level + "|---|") # Don't keep the text alignement in tables it's really too complex for what it's worth
|
||||
new_text.append(
|
||||
"> " * quote_level + "|---|"
|
||||
) # Don't keep the text alignement in tables it's really too complex for what it's worth
|
||||
elif enter or quit: # Quote part
|
||||
for quote in enter: # Enter quotes (support multiple at a time)
|
||||
quote_level += 1
|
||||
@ -163,16 +188,20 @@ def doku_to_markdown(text):
|
||||
new_text.append("> " * quote_level + "##### " + quote.group(2))
|
||||
except:
|
||||
new_text.append("> " * quote_level)
|
||||
line = line.replace(quote.group(0), '')
|
||||
final_quote_level = quote_level # Store quote_level to use at the end, since it will be modified during quit iteration
|
||||
line = line.replace(quote.group(0), "")
|
||||
final_quote_level = (
|
||||
quote_level
|
||||
) # Store quote_level to use at the end, since it will be modified during quit iteration
|
||||
final_newline = False
|
||||
for quote in quit: # Quit quotes (support multiple at a time)
|
||||
line = line.replace(quote.group(0), '')
|
||||
line = line.replace(quote.group(0), "")
|
||||
quote_level -= 1
|
||||
final_newline = True
|
||||
new_text.append("> " * final_quote_level + line) # Finally append the line
|
||||
if final_newline:
|
||||
new_text.append("\n") # Add a new line to ensure the separation between the quote and the following text
|
||||
new_text.append(
|
||||
"\n"
|
||||
) # Add a new line to ensure the separation between the quote and the following text
|
||||
else:
|
||||
new_text.append(line)
|
||||
|
||||
@ -181,24 +210,28 @@ def doku_to_markdown(text):
|
||||
|
||||
def bbcode_to_markdown(text):
|
||||
"""This is a very basic BBcode translator"""
|
||||
text = re.sub(r'\[b\](.*?)\[\/b\]', r'**\1**', text, flags=re.DOTALL) # Bold
|
||||
text = re.sub(r'\[i\](.*?)\[\/i\]', r'*\1*', text, flags=re.DOTALL) # Italic
|
||||
text = re.sub(r'\[u\](.*?)\[\/u\]', r'__\1__', text, flags=re.DOTALL) # Underline
|
||||
text = re.sub(r'\[s\](.*?)\[\/s\]', r'~~\1~~', text, flags=re.DOTALL) # Strike (may be multiline)
|
||||
text = re.sub(r'\[strike\](.*?)\[\/strike\]', r'~~\1~~', text, flags=re.DOTALL) # Strike 2
|
||||
text = re.sub(r"\[b\](.*?)\[\/b\]", r"**\1**", text, flags=re.DOTALL) # Bold
|
||||
text = re.sub(r"\[i\](.*?)\[\/i\]", r"*\1*", text, flags=re.DOTALL) # Italic
|
||||
text = re.sub(r"\[u\](.*?)\[\/u\]", r"__\1__", text, flags=re.DOTALL) # Underline
|
||||
text = re.sub(
|
||||
r"\[s\](.*?)\[\/s\]", r"~~\1~~", text, flags=re.DOTALL
|
||||
) # Strike (may be multiline)
|
||||
text = re.sub(
|
||||
r"\[strike\](.*?)\[\/strike\]", r"~~\1~~", text, flags=re.DOTALL
|
||||
) # Strike 2
|
||||
|
||||
text = re.sub(r'article://', r'page://', text)
|
||||
text = re.sub(r'dfile://', r'file://', text)
|
||||
text = re.sub(r"article://", r"page://", text)
|
||||
text = re.sub(r"dfile://", r"file://", text)
|
||||
|
||||
text = re.sub(r'\[url=(.*?)\](.*)\[\/url\]', r'[\2](\1)', text) # Links
|
||||
text = re.sub(r'\[url\](.*)\[\/url\]', r'\1', text) # Links 2
|
||||
text = re.sub(r'\[img\](.*)\[\/img\]', r'', text) # Images
|
||||
text = re.sub(r"\[url=(.*?)\](.*)\[\/url\]", r"[\2](\1)", text) # Links
|
||||
text = re.sub(r"\[url\](.*)\[\/url\]", r"\1", text) # Links 2
|
||||
text = re.sub(r"\[img\](.*)\[\/img\]", r'', text) # Images
|
||||
|
||||
new_text = []
|
||||
quote_level = 0
|
||||
for line in text.splitlines(): # Tables and quotes
|
||||
enter = re.finditer(r'\[quote(=(.+?))?\]', line)
|
||||
quit = re.finditer(r'\[/quote\]', line)
|
||||
enter = re.finditer(r"\[quote(=(.+?))?\]", line)
|
||||
quit = re.finditer(r"\[/quote\]", line)
|
||||
if enter or quit: # Quote part
|
||||
for quote in enter: # Enter quotes (support multiple at a time)
|
||||
quote_level += 1
|
||||
@ -206,16 +239,20 @@ def bbcode_to_markdown(text):
|
||||
new_text.append("> " * quote_level + "##### " + quote.group(2))
|
||||
except:
|
||||
new_text.append("> " * quote_level)
|
||||
line = line.replace(quote.group(0), '')
|
||||
final_quote_level = quote_level # Store quote_level to use at the end, since it will be modified during quit iteration
|
||||
line = line.replace(quote.group(0), "")
|
||||
final_quote_level = (
|
||||
quote_level
|
||||
) # Store quote_level to use at the end, since it will be modified during quit iteration
|
||||
final_newline = False
|
||||
for quote in quit: # Quit quotes (support multiple at a time)
|
||||
line = line.replace(quote.group(0), '')
|
||||
line = line.replace(quote.group(0), "")
|
||||
quote_level -= 1
|
||||
final_newline = True
|
||||
new_text.append("> " * final_quote_level + line) # Finally append the line
|
||||
if final_newline:
|
||||
new_text.append("\n") # Add a new line to ensure the separation between the quote and the following text
|
||||
new_text.append(
|
||||
"\n"
|
||||
) # Add a new line to ensure the separation between the quote and the following text
|
||||
else:
|
||||
new_text.append(line)
|
||||
|
||||
|
Reference in New Issue
Block a user