python - creating a list of class objects -
i trying create list of python class objects.
basically expecting list should follows:
[<report {u'invoice_id': u'demo-1-2016-dummy', u'tenant_id': u'27724b57e3b744f89cbf1336da062b43'}>, <report {u'invoice_id': u'demo-2-2016', u'tenant_id': u'27724b57e3b744f89cbf1336da062b43'}>, <report {u'invoice_id': u'admin-2-2016', u'tenant_id': u'6cd02afa3f0f403489153c41e98d07bc'}>]
i have tried following code same.
from cloudkittyclient.common import base import json class reportresult(base.resource): key = 'report' def __repr__(self): return "<report %s>" % self._info class reportmanager(base.crudmanager): base_url = '/v1/report' resource_class = reportresult key = "report" collection_key = "reports" # list invoices, can accept all-tenants arg def list_invoice(self, all_tenants=none): url = self.base_url + "/list_invoice" filters = list() if all_tenants: filters.append("all_tenants=%s" % all_tenants) if filters: url += "?%s" % ('&'.join(filters)) return self.client.get(url).json()
so here requirement "return self.client.get(url).json()" should return above mentioned list consists of class objects.
but returning results follows:
[{u'invoice_id': u'demo-1-2016-dummy', u'tenant_id': u'27724b57e3b744f89cbf1336da062b43'}, {u'invoice_id': u'demo-2-2016', u'tenant_id': u'27724b57e3b744f89cbf1336da062b43'}, {u'invoice_id': u'admin-2-2016', u'tenant_id': u'6cd02afa3f0f403489153c41e98d07bc'}]
i know fact missing right here.
as novice user in python unable find going wrong.
can able assist me getting result expected.
tl;dr:
return [self.resource_class(self, j, loaded=true) j in self.client.get(url).json() if j]
you should not have handle url creation yourself. crudmanager
should take care of you, if use methods offered.
try
report_manager.get(report_id=my_report_id)
where my_report_id
variable containing id, if you're trying fetch single report, instead of
report_manager.client.get(url).json()
looking cloudkittyclient.openstack.common.apiclient.base.basemanager._get
self.client.get(url).json()
internally, before deserializes json
self.resource_class
instance. should not doing directly.
cloudkittyclient.common.base.crudmanager
uses _get
internally , offers override of get
handle base_url
catenation etc you.
also seems should using cloudkittyclient.common.base.crudmanager.findall
or cloudkittyclient.common.base.crudmanager.list
, since have method list_invoice
.
report_manager.findall()
or
report_manager.findall(all_tenants=all_tenants)
where all_tenants
variable ever pass custom list_invoice
method.
finally, if findall
or crudmanager.list
unsuitable needs, seems case since collection url differs 1 in class, have deserialize results of self.client.get(url).json()
yourself. instead of returning that, do
return [self.resource_class(self, j, loaded=true) j in self.client.get(url).json() if j]
which creates list of instances of self.resource_class
class (reportresult
here) python dict
ionaries have been deserialized response of json
data.
consider overloading list
method of crudmanager
, seems way such thing.
Comments
Post a Comment