Univention Bugzilla – Attachment 7927 Details for
Bug 42137
[4.3] ucs-school-import: dependency solver for formatting ImportUser properties
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
dependency solver for formatting ImportUser properties
solve_format_dependencies.patch (text/plain), 2.69 KB, created by
Daniel Tröder
on 2016-08-26 10:51:39 CEST
(
hide
)
Description:
dependency solver for formatting ImportUser properties
Filename:
MIME Type:
Creator:
Daniel Tröder
Created:
2016-08-26 10:51:39 CEST
Size:
2.69 KB
patch
obsolete
>Index: ucs-school-import/modules/ucsschool/importer/models/import_user.py >=================================================================== >--- ucs-school-import/modules/ucsschool/importer/models/import_user.py (Revision 71928) >+++ ucs-school-import/modules/ucsschool/importer/models/import_user.py (Arbeitskopie) >@@ -80,6 +80,9 @@ > reader = None > logger = None > _pyhook_cache = None >+ prop_regex = re.compile(r"<.*?>") >+ prop_providers = dict([(x, "make_{}".format(x)) for x in >+ ["birthday", "firstname", "lastname", "email", "recordUID", "school", "sourceUID", "username"]]) > > def __init__(self, name=None, school=None, **kwargs): > self.action = None # "A", "D" or "M" >@@ -96,6 +99,7 @@ > self.logger = get_logger() > self.username_max_length = 20 - len(self.ucr.get("ucsschool/ldap/default/userprefix/exam", "exam-")) > self._lo = None >+ self._used_methods = defaultdict(list) # recursion prevention > super(ImportUser, self).__init__(name, school, **kwargs) > > def build_hook_line(self, hook_time, func_name): >@@ -641,6 +645,35 @@ > # force transcription of german umlauts > return "<:umlauts>{}".format(scheme) > >+ def solve_format_dependencies(self, prop_name, scheme): >+ props = self.prop_regex.findall(scheme) >+ for prop in props: >+ if (hasattr(self, prop) and getattr(self, prop) or >+ prop in self.udm_properties and self.udm_properties[prop] or >+ prop == "username" and (self.name or self.udm_properties.get("username"))): >+ # property exists and has value >+ continue >+ if prop == "name": >+ prop = "username" >+ if prop not in self.prop_providers and prop not in self.udm_properties: >+ # nothing we can do >+ continue >+ >+ try: >+ meth_name = self.prop_providers[prop] >+ except KeyError: >+ meth_name = "prepare_udm_properties" >+ if meth_name in self._used_methods[prop_name]: >+ # already ran make_<meth_name>() for his formatting job >+ self.logger.warn("Recursion detected when resolving formatting dependecies for %r.", prop_name) >+ self.logger.debug("Tried running %s(), although it has already run for %r.", meth_name, prop_name) >+ continue >+ self._used_methods[prop_name].append(meth_name) >+ >+ self.logger.debug("Need property %r to format %r - running %r...", prop, prop_name, meth_name) >+ getattr(self, meth_name)() >+ del self._used_methods[prop_name] >+ > def format_from_scheme(self, prop_name, scheme, **kwargs): > """ > Format property with scheme for current import_user. >@@ -658,6 +691,7 @@ > :param kwargs: dict: additional data to use for formatting > :return: str: formatted string > """ >+ self.solve_format_dependencies(prop_name, scheme) > if self.input_data: > all_fields = self.reader.get_data_mapping(self.input_data) > else:
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 42137
: 7927 |
9496