def get_account_limits(account, rse_ids=None, session=None):
"""
Returns the account limits for the account on the list of rses.
:param account: Account to check the limit for.
:param rse_ids: List of RSE ids to check the limit for.
:param session: Database session in use.
:return: Dictionary {'rse_id': bytes, ...}.
"""
account_limits = {}
if rse_ids:
rse_id_clauses = []
for rse_id in rse_ids:
rse_id_clauses.append(and_(models.AccountLimit.rse_id == rse_id, models.AccountLimit.account == account))
rse_id_clause_chunks = [rse_id_clauses[x:x + 10] for x in xrange(0, len(rse_id_clauses), 10)]
for rse_id_chunk in rse_id_clause_chunks:
tmp_limits = session.query(models.AccountLimit).filter(or_(*rse_id_chunk)).all()
for limit in tmp_limits:
if limit.bytes == -1:
account_limits[limit.rse_id] = float("inf")
else:
account_limits[limit.rse_id] = limit.bytes
else:
account_limits_tmp = session.query(models.AccountLimit).filter(models.AccountLimit.account == account).all()
for limit in account_limits_tmp:
if limit.bytes == -1:
account_limits[limit.rse_id] = float("inf")
else:
account_limits[limit.rse_id] = limit.bytes
return account_limits
评论列表
文章目录