|
Lines 80-85
Link Here
|
| 80 |
reader = None |
80 |
reader = None |
| 81 |
logger = None |
81 |
logger = None |
| 82 |
_pyhook_cache = None |
82 |
_pyhook_cache = None |
|
|
83 |
prop_regex = re.compile(r"<.*?>") |
| 84 |
prop_providers = dict([(x, "make_{}".format(x)) for x in |
| 85 |
["birthday", "firstname", "lastname", "email", "recordUID", "school", "sourceUID", "username"]]) |
| 83 |
|
86 |
|
| 84 |
def __init__(self, name=None, school=None, **kwargs): |
87 |
def __init__(self, name=None, school=None, **kwargs): |
| 85 |
self.action = None # "A", "D" or "M" |
88 |
self.action = None # "A", "D" or "M" |
|
Lines 96-101
Link Here
|
| 96 |
self.logger = get_logger() |
99 |
self.logger = get_logger() |
| 97 |
self.username_max_length = 20 - len(self.ucr.get("ucsschool/ldap/default/userprefix/exam", "exam-")) |
100 |
self.username_max_length = 20 - len(self.ucr.get("ucsschool/ldap/default/userprefix/exam", "exam-")) |
| 98 |
self._lo = None |
101 |
self._lo = None |
|
|
102 |
self._used_methods = defaultdict(list) # recursion prevention |
| 99 |
super(ImportUser, self).__init__(name, school, **kwargs) |
103 |
super(ImportUser, self).__init__(name, school, **kwargs) |
| 100 |
|
104 |
|
| 101 |
def build_hook_line(self, hook_time, func_name): |
105 |
def build_hook_line(self, hook_time, func_name): |
|
Lines 641-646
Link Here
|
| 641 |
# force transcription of german umlauts |
645 |
# force transcription of german umlauts |
| 642 |
return "<:umlauts>{}".format(scheme) |
646 |
return "<:umlauts>{}".format(scheme) |
| 643 |
|
647 |
|
|
|
648 |
def solve_format_dependencies(self, prop_name, scheme): |
| 649 |
props = self.prop_regex.findall(scheme) |
| 650 |
for prop in props: |
| 651 |
if (hasattr(self, prop) and getattr(self, prop) or |
| 652 |
prop in self.udm_properties and self.udm_properties[prop] or |
| 653 |
prop == "username" and (self.name or self.udm_properties.get("username"))): |
| 654 |
# property exists and has value |
| 655 |
continue |
| 656 |
if prop == "name": |
| 657 |
prop = "username" |
| 658 |
if prop not in self.prop_providers and prop not in self.udm_properties: |
| 659 |
# nothing we can do |
| 660 |
continue |
| 661 |
|
| 662 |
try: |
| 663 |
meth_name = self.prop_providers[prop] |
| 664 |
except KeyError: |
| 665 |
meth_name = "prepare_udm_properties" |
| 666 |
if meth_name in self._used_methods[prop_name]: |
| 667 |
# already ran make_<meth_name>() for his formatting job |
| 668 |
self.logger.warn("Recursion detected when resolving formatting dependecies for %r.", prop_name) |
| 669 |
self.logger.debug("Tried running %s(), although it has already run for %r.", meth_name, prop_name) |
| 670 |
continue |
| 671 |
self._used_methods[prop_name].append(meth_name) |
| 672 |
|
| 673 |
self.logger.debug("Need property %r to format %r - running %r...", prop, prop_name, meth_name) |
| 674 |
getattr(self, meth_name)() |
| 675 |
del self._used_methods[prop_name] |
| 676 |
|
| 644 |
def format_from_scheme(self, prop_name, scheme, **kwargs): |
677 |
def format_from_scheme(self, prop_name, scheme, **kwargs): |
| 645 |
""" |
678 |
""" |
| 646 |
Format property with scheme for current import_user. |
679 |
Format property with scheme for current import_user. |
|
Lines 658-663
Link Here
|
| 658 |
:param kwargs: dict: additional data to use for formatting |
691 |
:param kwargs: dict: additional data to use for formatting |
| 659 |
:return: str: formatted string |
692 |
:return: str: formatted string |
| 660 |
""" |
693 |
""" |
|
|
694 |
self.solve_format_dependencies(prop_name, scheme) |
| 661 |
if self.input_data: |
695 |
if self.input_data: |
| 662 |
all_fields = self.reader.get_data_mapping(self.input_data) |
696 |
all_fields = self.reader.get_data_mapping(self.input_data) |
| 663 |
else: |
697 |
else: |