Revision 13f1e2ff snf-cyclades-app/synnefo/quotas/__init__.py
b/snf-cyclades-app/synnefo/quotas/__init__.py | ||
---|---|---|
74 | 74 |
|
75 | 75 |
class AstakosClientExceptionHandler(object): |
76 | 76 |
def __init__(self, *args, **kwargs): |
77 |
pass |
|
77 |
self.user = kwargs.get("user") |
|
78 |
self.projects = kwargs.get("projects") |
|
78 | 79 |
|
79 | 80 |
def __enter__(self): |
80 | 81 |
pass |
81 | 82 |
|
83 |
def check_notFound(self): |
|
84 |
if not self.user or not self.projects: |
|
85 |
return |
|
86 |
try: |
|
87 |
qh = Quotaholder.get() |
|
88 |
user_quota = qh.service_get_quotas(self.user) |
|
89 |
except errors.AstakosClientException as e: |
|
90 |
log.exception("Unexpected error %s" % e.message) |
|
91 |
raise faults.InternalServerError("Unexpected error") |
|
92 |
|
|
93 |
user_quota = user_quota[self.user] |
|
94 |
for project in self.projects: |
|
95 |
try: |
|
96 |
user_quota[project] |
|
97 |
except KeyError: |
|
98 |
m = "User %s not in project %s" % (self.user, project) |
|
99 |
raise faults.BadRequest(m) |
|
100 |
|
|
82 | 101 |
def __exit__(self, exc_type, value, traceback): |
83 | 102 |
if value is not None: # exception |
84 | 103 |
if not isinstance(value, errors.AstakosClientException): |
... | ... | |
86 | 105 |
if exc_type is errors.QuotaLimit: |
87 | 106 |
msg, details = render_overlimit_exception(value) |
88 | 107 |
raise faults.OverLimit(msg, details=details) |
108 |
if exc_type is errors.NotFound: |
|
109 |
self.check_notFound() |
|
89 | 110 |
|
90 | 111 |
log.exception("Unexpected error %s" % value.message) |
91 | 112 |
raise faults.InternalServerError("Unexpected error") |
... | ... | |
111 | 132 |
|
112 | 133 |
qh = Quotaholder.get() |
113 | 134 |
if True: # placeholder |
114 |
with AstakosClientExceptionHandler(): |
|
135 |
with AstakosClientExceptionHandler(user=user, projects=[source]):
|
|
115 | 136 |
serial = qh.issue_one_commission(user, source, |
116 | 137 |
provisions, name=name, |
117 | 138 |
force=force, |
Also available in: Unified diff