Get our quotas and construct our usage object.

    :param tenant_id: Target tenant ID. If no tenant_id is provided,
        a the request.user.project_id is assumed to be used.
    :param targets: A tuple of quota names to be retrieved.
        If unspecified, all quota and usage information is retrieved.

def tenant_quota_usages(request, tenant_id=None, targets=None):
    """Get our quotas and construct our usage object.

    :param tenant_id: Target tenant ID. If no tenant_id is provided,
        a the request.user.project_id is assumed to be used.
    :param targets: A tuple of quota names to be retrieved.
        If unspecified, all quota and usage information is retrieved.
    """
    if not tenant_id:
        tenant_id = request.user.project_id

    disabled_quotas = get_disabled_quotas(request, targets)
    usages = QuotaUsage()

    futurist_utils.call_functions_parallel(
        (_get_tenant_compute_usages,
         [request, usages, disabled_quotas, tenant_id]),
        (_get_tenant_network_usages,
         [request, usages, disabled_quotas, tenant_id]),
        (_get_tenant_volume_usages,
         [request, usages, disabled_quotas, tenant_id]))

    return usages