Browse Source

publish muk_utils - 11.0

pull/13/head
MuK IT GmbH 6 years ago
parent
commit
70abc1c563
  1. 2
      muk_utils/__manifest__.py
  2. 4
      muk_utils/models/res_groups.py
  3. 107
      muk_utils/tools/helper.py

2
muk_utils/__manifest__.py

@ -20,7 +20,7 @@
{
"name": "MuK Utils",
"summary": """Utility Features""",
"version": '11.0.1.0.15',
"version": '11.0.1.0.16',
"category": 'Extra Tools',
"license": "AGPL-3",
"website": "https://www.mukit.at",

4
muk_utils/models/res_groups.py

@ -62,7 +62,7 @@ class ResGroups(models.Model):
model = self.env[model_name].sudo()
if not model._abstract:
model_recs[model_name] = model.search([['groups', 'in', self.mapped('id')]])
result = super(ResGroups, self).unlink()
result = super(ResGroups, self).unlink(vals)
for tuple in model_recs.items():
tuple[1].trigger_computation(['users'])
return result
return result

107
muk_utils/tools/helper.py

@ -1,55 +1,54 @@
###################################################################################
#
# 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 sys
import time
import logging
import unicodedata
_logger = logging.getLogger(__name__)
#----------------------------------------------------------
# Functions
#----------------------------------------------------------
def slugify(value):
value = str(unicodedata.normalize('NFKD', value))
if sys.version_info < (3,):
value = str(value.encode('ascii', 'ignore'))
value = str(re.sub('[^\w\s-]', '', value).strip().lower())
value = str(re.sub('[-\s]+', '-', value))
return value
#----------------------------------------------------------
# Decorators
#----------------------------------------------------------
def timeout(func, delay=30):
def wrapper(*args, **kwargs):
if args[0]._name in wrapper.timeouts:
timeout = wrapper.timeouts[args[0]._name]
if time.time() > timeout + delay:
wrapper.timeouts[args[0]._name] = time.time()
return func(*args, **kwargs)
else:
wrapper.timeouts[args[0]._name] = time.time()
return func(*args, **kwargs)
wrapper.timeouts = {}
###################################################################################
#
# 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 sys
import time
import logging
import unicodedata
_logger = logging.getLogger(__name__)
#----------------------------------------------------------
# Functions
#----------------------------------------------------------
def slugify(value):
value = str(unicodedata.normalize('NFKD', value))
value = str(value.encode('ascii', 'ignore'))
value = str(re.sub('[^\w\s-]', '', value).strip().lower())
value = str(re.sub('[-\s]+', '-', value))
return value
#----------------------------------------------------------
# Decorators
#----------------------------------------------------------
def timeout(func, delay=30):
def wrapper(*args, **kwargs):
if args[0]._name in wrapper.timeouts:
timeout = wrapper.timeouts[args[0]._name]
if time.time() > timeout + delay:
wrapper.timeouts[args[0]._name] = time.time()
return func(*args, **kwargs)
else:
wrapper.timeouts[args[0]._name] = time.time()
return func(*args, **kwargs)
wrapper.timeouts = {}
return wrapper
Loading…
Cancel
Save