Browse Source

publish muk_branding - 12.0

pull/9/head
MuK IT GmbH 6 years ago
parent
commit
429b8c535d
  1. 2
      muk_branding/__manifest__.py
  2. 187
      muk_branding/tools/debrand.py

2
muk_branding/__manifest__.py

@ -20,7 +20,7 @@
{
"name": "MuK Branding",
"summary": """Branding Features""",
"version": "12.0.1.0.1",
"version": "12.0.1.0.2",
"category": "Extra Tools",
"license": "AGPL-3",
"website": "http://www.mukit.at",

187
muk_branding/tools/debrand.py

@ -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)
Loading…
Cancel
Save