Added loaderon-hooks logic

This commit is contained in:
Alvaro Andrés Rodríguez Scelza 2019-06-02 02:10:25 -03:00
parent 0b70e285e3
commit 0a66e6635d
23 changed files with 612 additions and 0 deletions

View file

@ -0,0 +1,67 @@
# -*- coding: utf-8 -*-
import os
import re
from pre_commit_logic.util.template_methods.file_bunches_lines_checker_template_method import \
FileBunchesLinesCheckerTemplateMethod
class ModelNameAttributeChecker(FileBunchesLinesCheckerTemplateMethod):
def __init__(self, argv):
super(ModelNameAttributeChecker, self).__init__(argv)
self.__module_name = ''
name_attribute_regex = r'^(\t| )*_name = .+'
self.__name_pattern = re.compile(name_attribute_regex)
inherit_attribute_regex = r'^(\t| )*_inherit = .+'
self.__inherit_pattern = re.compile(inherit_attribute_regex)
self.__name_line = ''
self.__inherit_line = ''
def _get_regexp(self):
return r'^(\t| )*class.+'
def _check_file(self):
self.__module_name = self._set_module_name()
super(ModelNameAttributeChecker, self)._check_file()
def _set_module_name(self):
models_folder_directory_path = os.path.dirname(self.filename)
module_directory_path = os.path.dirname(models_folder_directory_path)
return os.path.basename(module_directory_path)
def _check_bunch(self):
super(ModelNameAttributeChecker, self)._check_bunch()
if self.__name_line and not self.__has_multiple_inheritance():
self.__check_name()
def _check_line(self):
"""
We will use this inherited method (which runs through all file lines) in order to gather lines that are required
to perform the lines bunch check.
"""
if self.__name_pattern.match(self._file_line):
self.__name_line = self._file_line.strip('_name = ')
if self.__inherit_pattern.match(self._file_line):
self.__inherit_line = self._file_line.strip('_inherit = ')
def __has_multiple_inheritance(self):
return '[' in self.__inherit_line and ',' in self.__inherit_line
def __check_name(self):
correct_name_regex = r'[\'\"]' + self.__module_name + r'\..+[\'\"]'
correct_name_pattern = re.compile(correct_name_regex)
if not correct_name_pattern.match(self.__name_line):
self.inform_check_failure(
'El nombre de modelo {} no incluye como prefijo el nombre del módulo {}.'.format(
self.__name_line.strip('_name = '),
self.__module_name
)
)
def main(argv=None):
return ModelNameAttributeChecker(argv).run()
if __name__ == '__main__':
exit(main())

View file

@ -0,0 +1,42 @@
# -*- coding: utf-8 -*-
import re
from pre_commit_logic.util.template_methods.files_bunches_checker_template_method import \
FileBunchesCheckerTemplateMethod
class ViewFieldsOrderChecker(FileBunchesCheckerTemplateMethod):
def __init__(self, argv):
super(ViewFieldsOrderChecker, self).__init__(argv)
name_line_regex = r'^(\t| )*<field name="name">.+<\/field>(\t| )*'
self._name_line_pattern = re.compile(name_line_regex)
model_line_regex = r'^(\t| )*<field name="model">.+<\/field>(\t| )*'
self._model_line_pattern = re.compile(model_line_regex)
self._record_line = None
self._name_line = None
self._model_line = None
def _get_regexp(self):
return r'^(\t| )*<record id=.+ model="ir.ui.view">(\t| )*'
def _check_bunch(self):
self._record_line = self._bunch_of_lines[0].strip()
self._name_line = self._bunch_of_lines[1]
self._model_line = self._bunch_of_lines[2]
self._perform_check()
def _perform_check(self):
if not self._name_line_pattern.match(self._name_line):
self.inform_check_failure("El primer campo (field) declarado en un record de vista debe ser 'name'. "
"Vista: {}".format(self._record_line))
if not self._model_line_pattern.match(self._model_line):
self.inform_check_failure("El segundo campo (field) declarado en un record de vista debe ser 'model'. "
"Vista: {}".format(self._record_line))
def main(argv=None):
return ViewFieldsOrderChecker(argv).run()
if __name__ == '__main__':
exit(main())

View file

@ -0,0 +1,36 @@
# -*- coding: utf-8 -*-
import re
from pre_commit_logic.odoo_specific_hooks.check_view_fields_order import ViewFieldsOrderChecker
class ViewNameChecker(ViewFieldsOrderChecker):
def __init__(self, argv):
super(ViewNameChecker, self).__init__(argv)
self._name_line = None
self._model_line = None
def _perform_check(self):
self.__make_required_strips()
correct_name_regex = r'<field name="name">' + self._model_line + \
r'\.(search|form|tree|filter)(\.inherit)?<\/field>'
correct_name_pattern = re.compile(correct_name_regex)
if not correct_name_pattern.match(self._name_line):
strip_name_line = self._name_line.strip()
strip_name_line = strip_name_line.strip('<field name="name">')
strip_name_line = strip_name_line.strip('</field>')
self.inform_check_failure("El nombre de la vista {} no cumple el formato {}."
.format(strip_name_line, correct_name_regex))
def __make_required_strips(self):
self._model_line = self._model_line.strip()
self._model_line = self._model_line[20:-8]
self._name_line = self._name_line.strip()
def main(argv=None):
return ViewNameChecker(argv).run()
if __name__ == '__main__':
exit(main())