# -*- coding: utf-8 -*-
[docs]class Manager(object):
# should be re-defined in a subclass
state_name = None
object_type = None
def __init__(self, api):
self.api = api
# shortcuts
@property
def state(self):
return self.api.state
@property
def queue(self):
return self.api.queue
@property
def token(self):
return self.api.token
[docs]class AllMixin(object):
[docs] def all(self, filt=None):
return list(filter(filt, self.state[self.state_name]))
[docs]class GetByIdMixin(object):
[docs] def get_by_id(self, obj_id, only_local=False):
"""
Finds and returns the object based on its id.
"""
for obj in self.state[self.state_name]:
if obj['id'] == obj_id or obj.temp_id == str(obj_id):
return obj
if not only_local and self.object_type is not None:
getter = getattr(eval('self.api.%ss' % self.object_type), 'get')
data = getter(obj_id)
# retrieves from state, otherwise we return the raw data
for obj in self.state[self.state_name]:
if obj['id'] == obj_id or obj.temp_id == str(obj_id):
return obj
return data
return None
[docs]class SyncMixin(object):
"""
Syncs this specific type of objects.
"""
[docs] def sync(self):
return self.api.sync()