Source code for MambuPy.rest.mambuuser

# coding: utf-8
"""Mambu Users objects.

.. autosummary::
   :nosignatures:
   :toctree: _autosummary

MambuUser holds a user.

MambuUsers holds a list of users.

Uses mambugeturl.getuserurl as default urlfunc
"""


from ..mambugeturl import getusercustominformationurl, getuserurl
from .mambustruct import MambuStruct
from .mamburestutils import MambuStructIterator

mod_urlfunc = getuserurl


[docs]class MambuUser(MambuStruct): """A User from Mambu. With the default urlfunc, entid argument must be the ID of the user you wish to retrieve. """
[docs] def __init__(self, urlfunc=mod_urlfunc, entid="", *args, **kwargs): """Tasks done here: Just initializes the MambuStruct. """ MambuStruct.__init__( self, urlfunc, entid, custom_field_name="customFields", *args, **kwargs )
[docs] def preprocess(self): """Preprocessing. Removes repeated chars from firstName and lastName fields. Adds a 'name' field joining all names in to one string. """ super(MambuUser, self).preprocess() try: self["firstName"] = self["firstName"].strip() except Exception: self["firstName"] = "" try: self["lastName"] = self["lastName"].strip() except Exception: self["lastName"] = "" self["name"] = self["firstName"] + " " + self["lastName"]
[docs] def setGroups(self, *args, **kwargs): """Adds the groups assigned to this user to a 'groups' field. Returns the number of requests done to Mambu. """ try: self.mambugroupsclass except AttributeError: from .mambugroup import MambuGroups self.mambugroupsclass = MambuGroups groups = self.mambugroupsclass( creditOfficerUsername=self["username"], *args, **kwargs ) self["groups"] = groups return 1
[docs] def setRoles(self, *args, **kwargs): """Adds the role assigned to this user to a 'role' field. Depends on the 'role' field that comes with a fullDetails=True build of the MambuUser. Returns the number of requests done to Mambu. """ try: self.mamburoleclass except AttributeError: from .mamburoles import MambuRole self.mamburoleclass = MambuRole try: role = self.mamburoleclass(entid=self["role"]["encodedKey"], *args, **kwargs) except KeyError: return 0 self["role"]["role"] = role return 1
[docs] def setBranch(self, *args, **kwargs): """Adds the branch to which this user belongs""" try: self.mambubranchclass except AttributeError: from .mambubranch import MambuBranch self.mambubranchclass = MambuBranch try: branch = self.mambubranchclass( entid=self["assignedBranchKey"], *args, **kwargs ) self["branch"] = branch except KeyError: self["branch"] = "" return 1
[docs] def create(self, data, *args, **kwargs): """Creates an user in Mambu Parameters -data dictionary with data to send """ super(MambuUser, self).create(data) self["user"][self.custom_field_name] = self["customInformation"] self.init(attrs=self["user"]) return 1
[docs] def update(self, data, *args, **kwargs): """Updates a user in Mambu Updates customFields of a MambuUser https://support.mambu.com/docs/users-api#post-users https://support.mambu.com/docs/users-api#parameters-for-patch-custom-fields-method-for-user Parameters -data dictionary with data to update """ cont_requests = 0 data2update = {} # UPDATE customFields if data.get("customInformation"): data2update = {"user": {}} data2update["customInformation"] = data.get("customInformation") self._MambuStruct__urlfunc = getusercustominformationurl cont_requests += self.update_patch(data2update, *args, **kwargs) self._MambuStruct__urlfunc = getuserurl cont_requests += super(MambuUser, self).update(data, *args, **kwargs) return cont_requests
[docs] def update_patch(self, data, *args, **kwargs): """Updates a Mambu user using method PATCH Args: data (dictionary): dictionary with data to update https://support.mambu.com/docs/users-api#patch-user-custom-field-values """ return super(MambuUser, self).update_patch(data, *args, **kwargs)
[docs]class MambuUsers(MambuStruct): """A list of Users from Mambu. With the default urlfunc, entid argument must be empty at instantiation time to retrieve all the users according to any other filter you send to the urlfunc. itemclass argument allows you to pass some other class as the elements for the list. Why is this useful? You may wish to override several behaviours by creating your own MambuUser son class. Pass that to the itemclass argument here and voila, you get a list of YourMambuUser class using MambuUsers instead of plain old MambuUser elements. If you wish to specialize other Mambu objects on MambuPy you may do that. Mind that if you desire that the iterable version of it to have elements of your specialized class, you need to change the logic of the constructor and the convert_dict_to_attrs method in the iterable class to use some sort of itemclass there too. Don't forget to submit the change on a pull request when done ;-) """
[docs] def __init__( self, urlfunc=mod_urlfunc, entid="", itemclass=MambuUser, *args, **kwargs ): """By default, entid argument is empty. That makes perfect sense: you want several branches, not just one """ self.itemclass = itemclass MambuStruct.__init__(self, urlfunc, entid, *args, **kwargs)
[docs] def __iter__(self): return MambuStructIterator(self.attrs)
[docs] def convert_dict_to_attrs(self, *args, **kwargs): """The trick for iterable Mambu Objects comes here: You iterate over each element of the responded List from Mambu, and create a Mambu User (or your own itemclass) object for each one, initializing them one at a time, and changing the attrs attribute (which just holds a list of plain dictionaries) with a MambuUser (or your own itemclass) just created. .. todo:: pass a valid (perhaps default) urlfunc, and its corresponding id to entid to each itemclass, telling MambuStruct not to connect() by default. It's desirable to connect at any other further moment to refresh some element in the list. """ for n, u in enumerate(self.attrs): try: params = self.params except AttributeError: params = {} kwargs.update(params) try: self.mambuuserclass except AttributeError: self.mambuuserclass = self.itemclass user = self.mambuuserclass(urlfunc=None, entid=None, *args, **kwargs) user.init(u, *args, **kwargs) user._MambuStruct__urlfunc = getuserurl self.attrs[n] = user