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