# coding: utf-8
"""Mambu Branches objects.
.. autosummary::
:nosignatures:
:toctree: _autosummary
MambuBranch holds a branch.
MambuBranches holds a list of branches.
Uses mambugeturl.getbranchesurl as default urlfunc
"""
from ..mambugeturl import getbranchesurl
from .mambustruct import MambuStruct
from .mamburestutils import MambuStructIterator
mod_urlfunc = getbranchesurl
[docs]class MambuBranch(MambuStruct):
"""A Branch from Mambu.
With the default urlfunc, entid argument must be the ID of the
branch 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="customFieldValues", *args, **kwargs
)
[docs] def setUsers(self, *args, **kwargs):
"""Adds the active users for this branch to a 'users' field.
Returns the number of requests done to Mambu.
.. todo:: since pagination logic was added, is not always true that
just 1 request was done. It may be more! But since request
counter singleton holds true information about how many requests
were done to Mambu, in fact this return value may be obsolete
"""
try:
self.mambuuserclass
except AttributeError:
from .mambuuser import MambuUsers
self.mambuusersclass = MambuUsers
usrs = [
us
for us in self.mambuusersclass(branchId=self["id"], *args, **kwargs)
if us["userState"] == "ACTIVE"
]
self["users"] = usrs
return 1
[docs]class MambuBranches(MambuStruct):
"""A list of Branches from Mambu.
With the default urlfunc, entid argument must be empty at
instantiation time to retrieve all the branches according to any
other filter you send to the urlfunc.
"""
[docs] def __init__(self, urlfunc=mod_urlfunc, entid="", *args, **kwargs):
"""By default, entid argument is empty. That makes perfect
sense: you want several branches, not just one
"""
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 Branch 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 MambuBranch just
created.
.. todo:: pass a valid (perhaps default) urlfunc, and its
corresponding id to entid to each MambuBranch, 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, b in enumerate(self.attrs):
# ok ok, I'm modifying elements of a list while iterating it. BAD PRACTICE!
try:
params = self.params
except AttributeError:
params = {}
kwargs.update(params)
try:
self.mambubranchclass
except AttributeError:
self.mambubranchclass = MambuBranch
branch = self.mambubranchclass(urlfunc=None, entid=None, *args, **kwargs)
branch.init(b, *args, **kwargs)
branch._MambuStruct__urlfunc = getbranchesurl
self.attrs[n] = branch