'Return an iterable of models.Meter instances
:param user: Optional ID for user that owns the resource.
:param project: Optional ID for project that owns the resource.
:param resource: Optional resource filter.
:param source: Optional source filter.
:param metaquery: Optional dict with metadata to match on.
:param limit: Maximum number of results to return.
:param unique: If set to true, return only unique meter information.'

def get_meters(self, user=None, project=None, resource=None, source=None, metaquery=None, limit=None, unique=False):

    if (limit == 0):
        return
    metaquery = (pymongo_utils.improve_keys(metaquery, metaquery=True) or {})
    q = {}
    if (user == 'None'):
        q['user_id'] = None
    elif (user is not None):
        q['user_id'] = user
    if (project == 'None'):
        q['project_id'] = None
    elif (project is not None):
        q['project_id'] = project
    if (resource == 'None'):
        q['_id'] = None
    elif (resource is not None):
        q['_id'] = resource
    if (source is not None):
        q['source'] = source
    q.update(metaquery)
    count = 0
    if unique:
        meter_names = set()
    for r in self.db.resource.find(q):
        for r_meter in r['meter']:
            if unique:
                if (r_meter['counter_name'] in meter_names):
                    continue
                else:
                    meter_names.add(r_meter['counter_name'])
            if (limit and (count >= limit)):
                return
            else:
                count += 1
            if unique:
                (yield models.Meter(name=r_meter['counter_name'], type=r_meter['counter_type'], unit=r_meter.get('counter_unit', ''), resource_id=None, project_id=None, source=None, user_id=None))
            else:
                (yield models.Meter(name=r_meter['counter_name'], type=r_meter['counter_type'], unit=r_meter.get('counter_unit', ''), resource_id=r['_id'], project_id=r['project_id'], source=r['source'], user_id=r['user_id']))
