Revision 71c741dc snf-astakos-app/astakos/im/models.py
b/snf-astakos-app/astakos/im/models.py | ||
---|---|---|
1924 | 1924 |
self.state = to_state |
1925 | 1925 |
self.save() |
1926 | 1926 |
|
1927 |
def can_join(self): |
|
1928 |
return self.state not in self.ASSOCIATED_STATES |
|
1929 |
|
|
1930 |
def join(self): |
|
1931 |
if not self.can_join(): |
|
1932 |
m = _("%s: attempt to join in state '%s'") % (self, self.state) |
|
1933 |
raise AssertionError(m) |
|
1934 |
|
|
1935 |
self.set_state(self.REQUESTED) |
|
1936 |
|
|
1937 |
def can_accept(self): |
|
1938 |
return self.state == self.REQUESTED |
|
1939 |
|
|
1940 |
def accept(self): |
|
1941 |
if not self.can_accept(): |
|
1942 |
m = _("%s: attempt to accept in state '%s'") % (self, self.state) |
|
1943 |
raise AssertionError(m) |
|
1944 |
|
|
1945 |
self.set_state(self.ACCEPTED) |
|
1946 |
|
|
1947 |
def can_enroll(self): |
|
1948 |
return self.state not in self.ACCEPTED_STATES |
|
1949 |
|
|
1950 |
def can_leave(self): |
|
1951 |
return self.state in self.ACCEPTED_STATES |
|
1952 |
|
|
1953 |
def leave_request(self): |
|
1954 |
if not self.can_leave(): |
|
1955 |
m = _("%s: attempt to request to leave in state '%s'") % ( |
|
1956 |
self, self.state) |
|
1957 |
raise AssertionError(m) |
|
1958 |
|
|
1959 |
self.set_state(self.LEAVE_REQUESTED) |
|
1960 |
|
|
1961 |
def can_deny_leave(self): |
|
1962 |
return self.state == self.LEAVE_REQUESTED |
|
1963 |
|
|
1964 |
def leave_request_deny(self): |
|
1965 |
if not self.can_deny_leave(): |
|
1966 |
m = _("%s: attempt to deny leave request in state '%s'") % ( |
|
1967 |
self, self.state) |
|
1968 |
raise AssertionError(m) |
|
1969 |
|
|
1970 |
self.set_state(self.ACCEPTED) |
|
1971 |
|
|
1972 |
def can_cancel_leave(self): |
|
1973 |
return self.state == self.LEAVE_REQUESTED |
|
1974 |
|
|
1975 |
def leave_request_cancel(self): |
|
1976 |
if not self.can_cancel_leave(): |
|
1977 |
m = _("%s: attempt to cancel leave request in state '%s'") % ( |
|
1978 |
self, self.state) |
|
1979 |
raise AssertionError(m) |
|
1980 |
|
|
1981 |
self.set_state(self.ACCEPTED) |
|
1982 |
|
|
1983 |
def can_remove(self): |
|
1984 |
return self.state in self.ACCEPTED_STATES |
|
1985 |
|
|
1986 |
def remove(self): |
|
1987 |
if not self.can_remove(): |
|
1988 |
m = _("%s: attempt to remove in state '%s'") % (self, self.state) |
|
1989 |
raise AssertionError(m) |
|
1990 |
|
|
1991 |
self.set_state(self.REMOVED) |
|
1992 |
|
|
1993 |
def can_reject(self): |
|
1994 |
return self.state == self.REQUESTED |
|
1995 |
|
|
1996 |
def reject(self): |
|
1997 |
if not self.can_reject(): |
|
1998 |
m = _("%s: attempt to reject in state '%s'") % (self, self.state) |
|
1999 |
raise AssertionError(m) |
|
2000 |
|
|
2001 |
self.set_state(self.REJECTED) |
|
1927 |
ACTION_CHECKS = { |
|
1928 |
"join": lambda m: m.state not in m.ASSOCIATED_STATES, |
|
1929 |
"accept": lambda m: m.state == m.REQUESTED, |
|
1930 |
"enroll": lambda m: m.state not in m.ACCEPTED_STATES, |
|
1931 |
"leave": lambda m: m.state in m.ACCEPTED_STATES, |
|
1932 |
"leave_request": lambda m: m.state in m.ACCEPTED_STATES, |
|
1933 |
"deny_leave": lambda m: m.state == m.LEAVE_REQUESTED, |
|
1934 |
"cancel_leave": lambda m: m.state == m.LEAVE_REQUESTED, |
|
1935 |
"remove": lambda m: m.state in m.ACCEPTED_STATES, |
|
1936 |
"reject": lambda m: m.state == m.REQUESTED, |
|
1937 |
"cancel": lambda m: m.state == m.REQUESTED, |
|
1938 |
} |
|
2002 | 1939 |
|
2003 |
def can_cancel(self): |
|
2004 |
return self.state == self.REQUESTED |
|
1940 |
ACTION_STATES = { |
|
1941 |
"join": REQUESTED, |
|
1942 |
"accept": ACCEPTED, |
|
1943 |
"leave_request": LEAVE_REQUESTED, |
|
1944 |
"deny_leave": ACCEPTED, |
|
1945 |
"cancel_leave": ACCEPTED, |
|
1946 |
"remove": REMOVED, |
|
1947 |
"reject": REJECTED, |
|
1948 |
"cancel": CANCELLED, |
|
1949 |
} |
|
2005 | 1950 |
|
2006 |
def cancel(self): |
|
2007 |
if not self.can_cancel(): |
|
2008 |
m = _("%s: attempt to cancel in state '%s'") % (self, self.state) |
|
1951 |
def check_action(self, action): |
|
1952 |
try: |
|
1953 |
check = self.ACTION_CHECKS[action] |
|
1954 |
except KeyError: |
|
1955 |
raise ValueError("No check found for action '%s'" % action) |
|
1956 |
return check(self) |
|
1957 |
|
|
1958 |
def perform_action(self, action): |
|
1959 |
if not self.check_action(action): |
|
1960 |
m = _("%s: attempted action '%s' in state '%s'") % ( |
|
1961 |
self, action, self.state) |
|
2009 | 1962 |
raise AssertionError(m) |
2010 |
|
|
2011 |
self.set_state(self.CANCELLED) |
|
1963 |
try: |
|
1964 |
s = self.ACTION_STATES[action] |
|
1965 |
except KeyError: |
|
1966 |
raise ValueError("No such action '%s'" % action) |
|
1967 |
return self.set_state(s) |
|
2012 | 1968 |
|
2013 | 1969 |
|
2014 | 1970 |
class Serial(models.Model): |
Also available in: Unified diff