mirror of https://github.com/muk-it/muk_base
MuK IT GmbH
6 years ago
2 changed files with 95 additions and 94 deletions
@ -1,93 +1,94 @@ |
|||
################################################################################### |
|||
# |
|||
# Copyright (C) 2018 MuK IT GmbH |
|||
# |
|||
# This program is free software: you can redistribute it and/or modify |
|||
# it under the terms of the GNU Affero General Public License as |
|||
# published by the Free Software Foundation, either version 3 of the |
|||
# License, or (at your option) any later version. |
|||
# |
|||
# This program is distributed in the hope that it will be useful, |
|||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
# GNU Affero General Public License for more details. |
|||
# |
|||
# You should have received a copy of the GNU Affero General Public License |
|||
# along with this program. If not, see <http://www.gnu.org/licenses/>. |
|||
# |
|||
################################################################################### |
|||
|
|||
import re |
|||
import uuid |
|||
import chardet |
|||
|
|||
from itertools import chain |
|||
from lxml.etree import tostring |
|||
from lxml.html import fromstring |
|||
|
|||
from odoo.tools import ustr |
|||
|
|||
from odoo.addons.muk_utils.tools.utils import safe_execute |
|||
|
|||
def debrand_documentation(text, value, expression): |
|||
text = re.sub( |
|||
r'https://www.{0}.com/documentation/'.format(expression), |
|||
'{0}/documentation/'.format(value), text, flags=re.IGNORECASE |
|||
) |
|||
text = re.sub( |
|||
r'https://www.{0}.com/page/docs/'.format(expression), |
|||
'{0}/page/docs/'.format(value), text, flags=re.IGNORECASE |
|||
) |
|||
return text |
|||
|
|||
def debrand_link(text, value, expression): |
|||
return re.sub( |
|||
r'\b{0}.com\b'.format(expression), |
|||
value, text, flags=re.IGNORECASE |
|||
) |
|||
|
|||
def debrand_text(text, value, expression): |
|||
cases = { |
|||
expression: uuid.uuid4().hex, |
|||
expression.upper(): uuid.uuid4().hex, |
|||
expression.lower(): uuid.uuid4().hex, |
|||
expression.capitalize(): uuid.uuid4().hex, |
|||
} |
|||
def init_no_debranding(match): |
|||
text = match.group() |
|||
for key in cases: |
|||
text = re.sub(r'\b{0}\b'.format(key), cases[key], text) |
|||
return text |
|||
def post_no_debranding(text): |
|||
for key in cases: |
|||
text = text.replace(cases[key], key) |
|||
return text |
|||
if isinstance(value, dict): |
|||
text = safe_execute(text, debrand_documentation, text, value.get('documentation'), expression) |
|||
text = safe_execute(text, debrand_link, text, value.get('website'), expression) |
|||
text = re.sub( |
|||
r'<.*class=".*no_debranding.*".*>.*(\b{0}\b).*<.*>'.format(expression), |
|||
init_no_debranding, text, flags=re.IGNORECASE |
|||
) |
|||
text = re.sub( |
|||
r'\b(?<!\.){0}(?!\.\S|\s?=|\w|\[)\b'.format(expression), |
|||
value.get('system_name') if isinstance(value, dict) else value, |
|||
text, flags=re.IGNORECASE |
|||
) |
|||
return post_no_debranding(text) |
|||
|
|||
def debrand_with_check(text, value, expression): |
|||
if not text or not re.search(r'\b{0}\b'.format(expression), text, re.IGNORECASE): |
|||
return text |
|||
return debrand_text(text, value, expression) |
|||
|
|||
def debrand(input, value, expression="odoo"): |
|||
if isinstance(input, str): |
|||
return ustr(debrand_with_check(input, value, expression)) |
|||
if isinstance(input, bytes): |
|||
encoding = chardet.detect(input)['encoding'] or 'utf-8' |
|||
return bytes(debrand(ustr(input, hint_encoding=encoding), value, expression), encoding) |
|||
return input |
|||
|
|||
def safe_debrand(input, value, expression="odoo"): |
|||
return safe_execute(input, debrand, input, value, expression) |
|||
################################################################################### |
|||
# |
|||
# Copyright (C) 2018 MuK IT GmbH |
|||
# |
|||
# This program is free software: you can redistribute it and/or modify |
|||
# it under the terms of the GNU Affero General Public License as |
|||
# published by the Free Software Foundation, either version 3 of the |
|||
# License, or (at your option) any later version. |
|||
# |
|||
# This program is distributed in the hope that it will be useful, |
|||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
# GNU Affero General Public License for more details. |
|||
# |
|||
# You should have received a copy of the GNU Affero General Public License |
|||
# along with this program. If not, see <http://www.gnu.org/licenses/>. |
|||
# |
|||
################################################################################### |
|||
|
|||
import re |
|||
import uuid |
|||
import chardet |
|||
|
|||
from itertools import chain |
|||
from lxml.etree import tostring |
|||
from lxml.html import fromstring |
|||
|
|||
from odoo.tools import ustr |
|||
|
|||
from odoo.addons.muk_utils.tools.utils import safe_execute |
|||
|
|||
def debrand_documentation(text, value, expression): |
|||
text = re.sub( |
|||
r'https://www.{0}.com/documentation/'.format(expression), |
|||
'{0}/documentation/'.format(value), text, flags=re.IGNORECASE |
|||
) |
|||
text = re.sub( |
|||
r'https://www.{0}.com/page/docs/'.format(expression), |
|||
'{0}/page/docs/'.format(value), text, flags=re.IGNORECASE |
|||
) |
|||
return text |
|||
|
|||
def debrand_link(text, value, expression): |
|||
text = re.sub( |
|||
r'(http(s)?:\/\/)?(www.)?{0}.com'.format(expression), |
|||
value, text, flags=re.IGNORECASE |
|||
) |
|||
return text |
|||
|
|||
def debrand_text(text, value, expression): |
|||
cases = { |
|||
expression: uuid.uuid4().hex, |
|||
expression.upper(): uuid.uuid4().hex, |
|||
expression.lower(): uuid.uuid4().hex, |
|||
expression.capitalize(): uuid.uuid4().hex, |
|||
} |
|||
def init_no_debranding(match): |
|||
text = match.group() |
|||
for key in cases: |
|||
text = re.sub(r'\b{0}\b'.format(key), cases[key], text) |
|||
return text |
|||
def post_no_debranding(text): |
|||
for key in cases: |
|||
text = text.replace(cases[key], key) |
|||
return text |
|||
if isinstance(value, dict): |
|||
text = safe_execute(text, debrand_documentation, text, value.get('documentation'), expression) |
|||
text = safe_execute(text, debrand_link, text, value.get('website'), expression) |
|||
text = re.sub( |
|||
r'<.*class=".*no_debranding.*".*>.*(\b{0}\b).*<.*>'.format(expression), |
|||
init_no_debranding, text, flags=re.IGNORECASE |
|||
) |
|||
text = re.sub( |
|||
r'\b(?<!\.){0}(?!\.\S|\s?=|\w|\[)\b'.format(expression), |
|||
value.get('system_name') if isinstance(value, dict) else value, |
|||
text, flags=re.IGNORECASE |
|||
) |
|||
return post_no_debranding(text) |
|||
|
|||
def debrand_with_check(text, value, expression): |
|||
if not text or not re.search(r'\b{0}\b'.format(expression), text, re.IGNORECASE): |
|||
return text |
|||
return debrand_text(text, value, expression) |
|||
|
|||
def debrand(input, value, expression="odoo"): |
|||
if isinstance(input, str): |
|||
return ustr(debrand_with_check(input, value, expression)) |
|||
if isinstance(input, bytes): |
|||
encoding = chardet.detect(input)['encoding'] or 'utf-8' |
|||
return bytes(debrand(ustr(input, hint_encoding=encoding), value, expression), encoding) |
|||
return input |
|||
|
|||
def safe_debrand(input, value, expression="odoo"): |
|||
return safe_execute(input, debrand, input, value, expression) |
Write
Preview
Loading…
Cancel
Save
Reference in new issue