Revision 992b81b6

b/snf-astakos-app/astakos/im/functions.py
70 70
from astakos.im.models import (
71 71
    AstakosUser, Invitation, ProjectMembership, ProjectApplication, Project,
72 72
    UserSetting,
73
    PendingMembershipError, get_resource_names, new_chain,
74
    users_quotas)
73
    get_resource_names, new_chain, users_quotas)
75 74
from astakos.im.project_notif import (
76 75
    membership_change_notify, membership_enroll_notify,
77 76
    membership_request_notify, membership_leave_request_notify,
......
483 482
    try:
484 483
        objs = ProjectMembership.objects
485 484
        m = objs.get_for_update(project=project, person=user)
486
        if m.is_pending:
487
            raise PendingMembershipError()
488 485
        return m
489 486
    except ProjectMembership.DoesNotExist:
490 487
        raise IOError(_(astakos_messages.NOT_MEMBERSHIP_REQUEST))
b/snf-astakos-app/astakos/im/models.py
2117 2117
    }
2118 2118

  
2119 2119

  
2120
class PendingMembershipError(Exception):
2121
    pass
2122

  
2123

  
2124 2120
class ProjectMembershipManager(ForUpdateManager):
2125 2121

  
2126 2122
    def any_accepted(self):
......
2209 2205
    def user_friendly_state_display(self):
2210 2206
        return self.USER_FRIENDLY_STATE_DISPLAY.get(self.state, _('Unknown'))
2211 2207

  
2212
    def get_combined_state(self):
2213
        return self.state, self.is_active, self.is_pending
2214

  
2215 2208
    class Meta:
2216 2209
        unique_together = ("person", "project")
2217 2210
        #index_together = [["project", "state"]]
......
2243 2236
        return self.state == self.REQUESTED
2244 2237

  
2245 2238
    def accept(self):
2246
        if self.is_pending:
2247
            m = _("%s: attempt to accept while is pending") % (self,)
2248
            raise AssertionError(m)
2249

  
2250 2239
        if not self.can_accept():
2251 2240
            m = _("%s: attempt to accept in state '%s'") % (self, self.state)
2252 2241
            raise AssertionError(m)
......
2255 2244
        self.acceptance_date = now
2256 2245
        self._set_history_item(reason='ACCEPT', date=now)
2257 2246
        self.state = self.ACCEPTED
2258
        self.is_pending = True
2259 2247
        self.save()
2260 2248

  
2261 2249
    def can_leave(self):
2262 2250
        return self.state in self.ACCEPTED_STATES
2263 2251

  
2264 2252
    def leave_request(self):
2265
        if self.is_pending:
2266
            m = _("%s: attempt to request to leave while is pending") % (self,)
2267
            raise AssertionError(m)
2268

  
2269 2253
        if not self.can_leave():
2270 2254
            m = _("%s: attempt to request to leave in state '%s'") % (
2271 2255
                self, self.state)
......
2279 2263
        return self.state == self.LEAVE_REQUESTED
2280 2264

  
2281 2265
    def leave_request_deny(self):
2282
        if self.is_pending:
2283
            m = _("%s: attempt to deny leave request while is pending") % (
2284
                self,)
2285
            raise AssertionError(m)
2286

  
2287 2266
        if not self.can_deny_leave():
2288 2267
            m = _("%s: attempt to deny leave request in state '%s'") % (
2289 2268
                self, self.state)
......
2297 2276
        return self.state == self.LEAVE_REQUESTED
2298 2277

  
2299 2278
    def leave_request_cancel(self):
2300
        if self.is_pending:
2301
            m = _("%s: attempt to cancel leave request while is pending") % (
2302
                self,)
2303
            raise AssertionError(m)
2304

  
2305 2279
        if not self.can_cancel_leave():
2306 2280
            m = _("%s: attempt to cancel leave request in state '%s'") % (
2307 2281
                self, self.state)
......
2315 2289
        return self.state in self.ACCEPTED_STATES
2316 2290

  
2317 2291
    def remove(self):
2318
        if self.is_pending:
2319
            m = _("%s: attempt to remove while is pending") % (self,)
2320
            raise AssertionError(m)
2321

  
2322 2292
        if not self.can_remove():
2323 2293
            m = _("%s: attempt to remove in state '%s'") % (self, self.state)
2324 2294
            raise AssertionError(m)
2325 2295

  
2326 2296
        self._set_history_item(reason='REMOVE')
2327 2297
        self.state = self.REMOVED
2328
        self.is_pending = True
2329 2298
        self.save()
2330 2299

  
2331 2300
    def can_reject(self):
2332 2301
        return self.state == self.REQUESTED
2333 2302

  
2334 2303
    def reject(self):
2335
        if self.is_pending:
2336
            m = _("%s: attempt to reject while is pending") % (self,)
2337
            raise AssertionError(m)
2338

  
2339 2304
        if not self.can_reject():
2340 2305
            m = _("%s: attempt to reject in state '%s'") % (self, self.state)
2341 2306
            raise AssertionError(m)
......
2349 2314
        return self.state == self.REQUESTED
2350 2315

  
2351 2316
    def cancel(self):
2352
        if self.is_pending:
2353
            m = _("%s: attempt to cancel while is pending") % (self,)
2354
            raise AssertionError(m)
2355

  
2356 2317
        if not self.can_cancel():
2357 2318
            m = _("%s: attempt to cancel in state '%s'") % (self, self.state)
2358 2319
            raise AssertionError(m)

Also available in: Unified diff