Statistics
| Branch: | Tag: | Revision:

root / snf-astakos-app / astakos / im / migrations / 0047_membership_logs.py @ 85ae5a4c

History | View | Annotate | Download (27.2 kB)

1 1a14083b Giorgos Korfiatis
# encoding: utf-8
2 1a14083b Giorgos Korfiatis
import datetime
3 1a14083b Giorgos Korfiatis
from south.db import db
4 1a14083b Giorgos Korfiatis
from south.v2 import DataMigration
5 1a14083b Giorgos Korfiatis
from django.db import models
6 1a14083b Giorgos Korfiatis
7 1a14083b Giorgos Korfiatis
def _partition_by(f, l):
8 1a14083b Giorgos Korfiatis
    d = {}
9 1a14083b Giorgos Korfiatis
    for x in l:
10 1a14083b Giorgos Korfiatis
        group = f(x)
11 1a14083b Giorgos Korfiatis
        group_l = d.get(group, [])
12 1a14083b Giorgos Korfiatis
        group_l.append(x)
13 1a14083b Giorgos Korfiatis
        d[group] = group_l
14 1a14083b Giorgos Korfiatis
    return d
15 1a14083b Giorgos Korfiatis
16 1a14083b Giorgos Korfiatis
REQUESTED = 0
17 1a14083b Giorgos Korfiatis
ACCEPTED = 1
18 1a14083b Giorgos Korfiatis
LEAVE_REQUESTED = 5
19 1a14083b Giorgos Korfiatis
USER_SUSPENDED = 10
20 1a14083b Giorgos Korfiatis
REJECTED = 100
21 1a14083b Giorgos Korfiatis
CANCELLED = 101
22 1a14083b Giorgos Korfiatis
REMOVED = 200
23 1a14083b Giorgos Korfiatis
24 1a14083b Giorgos Korfiatis
H_ACCEPT = 0
25 1a14083b Giorgos Korfiatis
H_REJECT = 1
26 1a14083b Giorgos Korfiatis
H_REMOVE = 2
27 1a14083b Giorgos Korfiatis
H_CANCEL = -1
28 1a14083b Giorgos Korfiatis
29 1a14083b Giorgos Korfiatis
H2S = {
30 1a14083b Giorgos Korfiatis
    H_ACCEPT: ACCEPTED,
31 1a14083b Giorgos Korfiatis
    H_REJECT: REJECTED,
32 1a14083b Giorgos Korfiatis
    H_REMOVE: REMOVED,
33 1a14083b Giorgos Korfiatis
    H_CANCEL: CANCELLED,
34 1a14083b Giorgos Korfiatis
}
35 1a14083b Giorgos Korfiatis
36 1a14083b Giorgos Korfiatis
ASSUMED_PRED = {
37 1a14083b Giorgos Korfiatis
    REQUESTED:       None,
38 1a14083b Giorgos Korfiatis
    ACCEPTED:        REQUESTED,
39 1a14083b Giorgos Korfiatis
    LEAVE_REQUESTED: ACCEPTED,
40 1a14083b Giorgos Korfiatis
    USER_SUSPENDED:  ACCEPTED,
41 1a14083b Giorgos Korfiatis
    REJECTED:        REQUESTED,
42 1a14083b Giorgos Korfiatis
    CANCELLED:       REQUESTED,
43 1a14083b Giorgos Korfiatis
    REMOVED:         ACCEPTED,
44 1a14083b Giorgos Korfiatis
}
45 1a14083b Giorgos Korfiatis
46 1a14083b Giorgos Korfiatis
47 1a14083b Giorgos Korfiatis
class Migration(DataMigration):
48 1a14083b Giorgos Korfiatis
49 1a14083b Giorgos Korfiatis
    def forwards(self, orm):
50 1a14083b Giorgos Korfiatis
        memberships = orm.ProjectMembership.objects.all()
51 1a14083b Giorgos Korfiatis
52 1a14083b Giorgos Korfiatis
        # First make logs for existing memberships
53 1a14083b Giorgos Korfiatis
        logs = []
54 1a14083b Giorgos Korfiatis
        for m in memberships:
55 1a14083b Giorgos Korfiatis
            logs.append(orm.ProjectMembershipLog(
56 1a14083b Giorgos Korfiatis
                    membership=m, date=m.request_date,
57 1a14083b Giorgos Korfiatis
                    from_state=None, to_state=REQUESTED))
58 1a14083b Giorgos Korfiatis
59 1a14083b Giorgos Korfiatis
            if m.leave_request_date:
60 1a14083b Giorgos Korfiatis
                logs.append(orm.ProjectMembershipLog(
61 1a14083b Giorgos Korfiatis
                        membership=m, date=m.leave_request_date,
62 1a14083b Giorgos Korfiatis
                        from_state=ACCEPTED, to_state=LEAVE_REQUESTED))
63 1a14083b Giorgos Korfiatis
64 1b25228f Giorgos Korfiatis
        orm.ProjectMembershipLog.objects.bulk_create(logs)
65 1a14083b Giorgos Korfiatis
66 1a14083b Giorgos Korfiatis
        membs = {}
67 1a14083b Giorgos Korfiatis
        for m in memberships:
68 1a14083b Giorgos Korfiatis
            membs[(m.project_id, m.person_id)] = m
69 1a14083b Giorgos Korfiatis
70 1a14083b Giorgos Korfiatis
        # Reconstruct memberships from history
71 1a14083b Giorgos Korfiatis
        new_membs = {}
72 1a14083b Giorgos Korfiatis
        objs = orm.ProjectMembershipHistory.objects.all().order_by("-date")
73 1a14083b Giorgos Korfiatis
        for mh in objs.exclude(reason=H_ACCEPT):
74 1a14083b Giorgos Korfiatis
            key = (mh.project, mh.person)
75 1a14083b Giorgos Korfiatis
            if not key in membs and not key in new_membs:
76 1a14083b Giorgos Korfiatis
                new_membs[key] = orm.ProjectMembership(
77 1a14083b Giorgos Korfiatis
                    person_id=mh.person, project_id=mh.project,
78 1a14083b Giorgos Korfiatis
                    state=H2S[mh.reason])
79 1a14083b Giorgos Korfiatis
80 1b25228f Giorgos Korfiatis
        orm.ProjectMembership.objects.bulk_create(new_membs.values())
81 1a14083b Giorgos Korfiatis
82 1a14083b Giorgos Korfiatis
        memberships = orm.ProjectMembership.objects.all()
83 1a14083b Giorgos Korfiatis
        membs = {}
84 1a14083b Giorgos Korfiatis
        for m in memberships:
85 1a14083b Giorgos Korfiatis
            membs[(m.project_id, m.person_id)] = m
86 1a14083b Giorgos Korfiatis
87 1a14083b Giorgos Korfiatis
        # Make logs from history
88 1a14083b Giorgos Korfiatis
        logs = []
89 1a14083b Giorgos Korfiatis
        for mh in orm.ProjectMembershipHistory.objects.all():
90 1a14083b Giorgos Korfiatis
            m = membs[(mh.project, mh.person)]
91 1a14083b Giorgos Korfiatis
            to_state = H2S[mh.reason]
92 1a14083b Giorgos Korfiatis
            from_state = ASSUMED_PRED[to_state]
93 1a14083b Giorgos Korfiatis
            logs.append(orm.ProjectMembershipLog(
94 1a14083b Giorgos Korfiatis
                    membership=m, date=mh.date,
95 1a14083b Giorgos Korfiatis
                    from_state=from_state, to_state=to_state))
96 1a14083b Giorgos Korfiatis
97 1b25228f Giorgos Korfiatis
        orm.ProjectMembershipLog.objects.bulk_create(logs)
98 1a14083b Giorgos Korfiatis
99 1a14083b Giorgos Korfiatis
    def backwards(self, orm):
100 1a14083b Giorgos Korfiatis
        "Write your backwards methods here."
101 1a14083b Giorgos Korfiatis
102 1a14083b Giorgos Korfiatis
103 1a14083b Giorgos Korfiatis
    models = {
104 1a14083b Giorgos Korfiatis
        'auth.group': {
105 1a14083b Giorgos Korfiatis
            'Meta': {'object_name': 'Group'},
106 1a14083b Giorgos Korfiatis
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
107 1a14083b Giorgos Korfiatis
            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
108 1a14083b Giorgos Korfiatis
            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
109 1a14083b Giorgos Korfiatis
        },
110 1a14083b Giorgos Korfiatis
        'auth.permission': {
111 1a14083b Giorgos Korfiatis
            'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
112 1a14083b Giorgos Korfiatis
            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
113 1a14083b Giorgos Korfiatis
            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
114 1a14083b Giorgos Korfiatis
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
115 1a14083b Giorgos Korfiatis
            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
116 1a14083b Giorgos Korfiatis
        },
117 1a14083b Giorgos Korfiatis
        'auth.user': {
118 1a14083b Giorgos Korfiatis
            'Meta': {'object_name': 'User'},
119 1a14083b Giorgos Korfiatis
            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
120 1a14083b Giorgos Korfiatis
            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
121 1a14083b Giorgos Korfiatis
            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
122 1a14083b Giorgos Korfiatis
            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
123 1a14083b Giorgos Korfiatis
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
124 1a14083b Giorgos Korfiatis
            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
125 1a14083b Giorgos Korfiatis
            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
126 1a14083b Giorgos Korfiatis
            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
127 1a14083b Giorgos Korfiatis
            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
128 1a14083b Giorgos Korfiatis
            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
129 1a14083b Giorgos Korfiatis
            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
130 1a14083b Giorgos Korfiatis
            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
131 1a14083b Giorgos Korfiatis
            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
132 1a14083b Giorgos Korfiatis
        },
133 1a14083b Giorgos Korfiatis
        'contenttypes.contenttype': {
134 1a14083b Giorgos Korfiatis
            'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
135 1a14083b Giorgos Korfiatis
            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
136 1a14083b Giorgos Korfiatis
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
137 1a14083b Giorgos Korfiatis
            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
138 1a14083b Giorgos Korfiatis
            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
139 1a14083b Giorgos Korfiatis
        },
140 1a14083b Giorgos Korfiatis
        'im.additionalmail': {
141 1a14083b Giorgos Korfiatis
            'Meta': {'object_name': 'AdditionalMail'},
142 1a14083b Giorgos Korfiatis
            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75'}),
143 1a14083b Giorgos Korfiatis
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
144 1a14083b Giorgos Korfiatis
            'owner': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.AstakosUser']"})
145 1a14083b Giorgos Korfiatis
        },
146 1a14083b Giorgos Korfiatis
        'im.approvalterms': {
147 1a14083b Giorgos Korfiatis
            'Meta': {'object_name': 'ApprovalTerms'},
148 1a14083b Giorgos Korfiatis
            'date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'db_index': 'True', 'blank': 'True'}),
149 1a14083b Giorgos Korfiatis
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
150 1a14083b Giorgos Korfiatis
            'location': ('django.db.models.fields.CharField', [], {'max_length': '255'})
151 1a14083b Giorgos Korfiatis
        },
152 1a14083b Giorgos Korfiatis
        'im.astakosuser': {
153 1a14083b Giorgos Korfiatis
            'Meta': {'object_name': 'AstakosUser', '_ormbases': ['auth.User']},
154 1a14083b Giorgos Korfiatis
            'accepted_email': ('django.db.models.fields.EmailField', [], {'default': 'None', 'max_length': '75', 'null': 'True', 'blank': 'True'}),
155 1a14083b Giorgos Korfiatis
            'accepted_policy': ('django.db.models.fields.CharField', [], {'default': 'None', 'max_length': '255', 'null': 'True', 'blank': 'True'}),
156 1a14083b Giorgos Korfiatis
            'activation_sent': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
157 1a14083b Giorgos Korfiatis
            'affiliation': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
158 1a14083b Giorgos Korfiatis
            'auth_token': ('django.db.models.fields.CharField', [], {'max_length': '64', 'unique': 'True', 'null': 'True', 'blank': 'True'}),
159 1a14083b Giorgos Korfiatis
            'auth_token_created': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
160 1a14083b Giorgos Korfiatis
            'auth_token_expires': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
161 1a14083b Giorgos Korfiatis
            'date_signed_terms': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
162 1a14083b Giorgos Korfiatis
            'deactivated_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
163 1a14083b Giorgos Korfiatis
            'deactivated_reason': ('django.db.models.fields.TextField', [], {'default': 'None', 'null': 'True'}),
164 1a14083b Giorgos Korfiatis
            'disturbed_quota': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
165 1a14083b Giorgos Korfiatis
            'email_verified': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
166 1a14083b Giorgos Korfiatis
            'has_credits': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
167 1a14083b Giorgos Korfiatis
            'has_signed_terms': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
168 1a14083b Giorgos Korfiatis
            'invitations': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
169 1a14083b Giorgos Korfiatis
            'is_rejected': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
170 1a14083b Giorgos Korfiatis
            'is_verified': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
171 1a14083b Giorgos Korfiatis
            'level': ('django.db.models.fields.IntegerField', [], {'default': '4'}),
172 1a14083b Giorgos Korfiatis
            'moderated': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
173 1a14083b Giorgos Korfiatis
            'moderated_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
174 1a14083b Giorgos Korfiatis
            'moderated_data': ('django.db.models.fields.TextField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
175 1a14083b Giorgos Korfiatis
            'policy': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['im.Resource']", 'null': 'True', 'through': "orm['im.AstakosUserQuota']", 'symmetrical': 'False'}),
176 1a14083b Giorgos Korfiatis
            'rejected_reason': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
177 1a14083b Giorgos Korfiatis
            'updated': ('django.db.models.fields.DateTimeField', [], {}),
178 1a14083b Giorgos Korfiatis
            'user_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True', 'primary_key': 'True'}),
179 1a14083b Giorgos Korfiatis
            'uuid': ('django.db.models.fields.CharField', [], {'max_length': '255', 'unique': 'True', 'null': 'True'}),
180 1a14083b Giorgos Korfiatis
            'verification_code': ('django.db.models.fields.CharField', [], {'max_length': '255', 'unique': 'True', 'null': 'True'}),
181 1a14083b Giorgos Korfiatis
            'verified_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'})
182 1a14083b Giorgos Korfiatis
        },
183 1a14083b Giorgos Korfiatis
        'im.astakosuserauthprovider': {
184 1a14083b Giorgos Korfiatis
            'Meta': {'ordering': "('module', 'created')", 'unique_together': "(('identifier', 'module', 'user'),)", 'object_name': 'AstakosUserAuthProvider'},
185 1a14083b Giorgos Korfiatis
            'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
186 1a14083b Giorgos Korfiatis
            'affiliation': ('django.db.models.fields.CharField', [], {'default': 'None', 'max_length': '255', 'null': 'True', 'blank': 'True'}),
187 1a14083b Giorgos Korfiatis
            'auth_backend': ('django.db.models.fields.CharField', [], {'default': "'astakos'", 'max_length': '255'}),
188 1a14083b Giorgos Korfiatis
            'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
189 1a14083b Giorgos Korfiatis
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
190 1a14083b Giorgos Korfiatis
            'identifier': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
191 1a14083b Giorgos Korfiatis
            'info_data': ('django.db.models.fields.TextField', [], {'default': "''", 'null': 'True', 'blank': 'True'}),
192 1a14083b Giorgos Korfiatis
            'module': ('django.db.models.fields.CharField', [], {'default': "'local'", 'max_length': '255'}),
193 1a14083b Giorgos Korfiatis
            'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'auth_providers'", 'to': "orm['im.AstakosUser']"})
194 1a14083b Giorgos Korfiatis
        },
195 1a14083b Giorgos Korfiatis
        'im.astakosuserquota': {
196 1a14083b Giorgos Korfiatis
            'Meta': {'unique_together': "(('resource', 'user'),)", 'object_name': 'AstakosUserQuota'},
197 1a14083b Giorgos Korfiatis
            'capacity': ('snf_django.lib.db.fields.IntDecimalField', [], {'max_digits': '38', 'decimal_places': '0'}),
198 1a14083b Giorgos Korfiatis
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
199 1a14083b Giorgos Korfiatis
            'resource': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.Resource']"}),
200 1a14083b Giorgos Korfiatis
            'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.AstakosUser']"})
201 1a14083b Giorgos Korfiatis
        },
202 1a14083b Giorgos Korfiatis
        'im.authproviderpolicyprofile': {
203 1a14083b Giorgos Korfiatis
            'Meta': {'ordering': "['priority']", 'object_name': 'AuthProviderPolicyProfile'},
204 1a14083b Giorgos Korfiatis
            'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
205 1a14083b Giorgos Korfiatis
            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'authpolicy_profiles'", 'symmetrical': 'False', 'to': "orm['auth.Group']"}),
206 1a14083b Giorgos Korfiatis
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
207 1a14083b Giorgos Korfiatis
            'is_exclusive': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
208 1a14083b Giorgos Korfiatis
            'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
209 1a14083b Giorgos Korfiatis
            'policy_add': ('django.db.models.fields.NullBooleanField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
210 1a14083b Giorgos Korfiatis
            'policy_automoderate': ('django.db.models.fields.NullBooleanField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
211 1a14083b Giorgos Korfiatis
            'policy_create': ('django.db.models.fields.NullBooleanField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
212 1a14083b Giorgos Korfiatis
            'policy_limit': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True'}),
213 1a14083b Giorgos Korfiatis
            'policy_login': ('django.db.models.fields.NullBooleanField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
214 1a14083b Giorgos Korfiatis
            'policy_remove': ('django.db.models.fields.NullBooleanField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
215 1a14083b Giorgos Korfiatis
            'policy_required': ('django.db.models.fields.NullBooleanField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
216 1a14083b Giorgos Korfiatis
            'policy_switch': ('django.db.models.fields.NullBooleanField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
217 1a14083b Giorgos Korfiatis
            'priority': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
218 1a14083b Giorgos Korfiatis
            'provider': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
219 1a14083b Giorgos Korfiatis
            'users': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'authpolicy_profiles'", 'symmetrical': 'False', 'to': "orm['im.AstakosUser']"})
220 1a14083b Giorgos Korfiatis
        },
221 1a14083b Giorgos Korfiatis
        'im.chain': {
222 1a14083b Giorgos Korfiatis
            'Meta': {'object_name': 'Chain'},
223 1a14083b Giorgos Korfiatis
            'chain': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
224 1a14083b Giorgos Korfiatis
        },
225 1a14083b Giorgos Korfiatis
        'im.component': {
226 1a14083b Giorgos Korfiatis
            'Meta': {'object_name': 'Component'},
227 1a14083b Giorgos Korfiatis
            'auth_token': ('django.db.models.fields.CharField', [], {'max_length': '64', 'unique': 'True', 'null': 'True', 'blank': 'True'}),
228 1a14083b Giorgos Korfiatis
            'auth_token_created': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
229 1a14083b Giorgos Korfiatis
            'auth_token_expires': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
230 1a14083b Giorgos Korfiatis
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
231 1a14083b Giorgos Korfiatis
            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255', 'db_index': 'True'}),
232 1a14083b Giorgos Korfiatis
            'url': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'})
233 1a14083b Giorgos Korfiatis
        },
234 1a14083b Giorgos Korfiatis
        'im.emailchange': {
235 1a14083b Giorgos Korfiatis
            'Meta': {'object_name': 'EmailChange'},
236 1a14083b Giorgos Korfiatis
            'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '40', 'db_index': 'True'}),
237 1a14083b Giorgos Korfiatis
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
238 1a14083b Giorgos Korfiatis
            'new_email_address': ('django.db.models.fields.EmailField', [], {'max_length': '75'}),
239 1a14083b Giorgos Korfiatis
            'requested_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
240 1a14083b Giorgos Korfiatis
            'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'emailchanges'", 'unique': 'True', 'to': "orm['im.AstakosUser']"})
241 1a14083b Giorgos Korfiatis
        },
242 1a14083b Giorgos Korfiatis
        'im.endpoint': {
243 1a14083b Giorgos Korfiatis
            'Meta': {'object_name': 'Endpoint'},
244 1a14083b Giorgos Korfiatis
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
245 1a14083b Giorgos Korfiatis
            'service': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'endpoints'", 'to': "orm['im.Service']"})
246 1a14083b Giorgos Korfiatis
        },
247 1a14083b Giorgos Korfiatis
        'im.endpointdata': {
248 1a14083b Giorgos Korfiatis
            'Meta': {'unique_together': "(('endpoint', 'key'),)", 'object_name': 'EndpointData'},
249 1a14083b Giorgos Korfiatis
            'endpoint': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'data'", 'to': "orm['im.Endpoint']"}),
250 1a14083b Giorgos Korfiatis
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
251 1a14083b Giorgos Korfiatis
            'key': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
252 1a14083b Giorgos Korfiatis
            'value': ('django.db.models.fields.CharField', [], {'max_length': '1024'})
253 1a14083b Giorgos Korfiatis
        },
254 1a14083b Giorgos Korfiatis
        'im.invitation': {
255 1a14083b Giorgos Korfiatis
            'Meta': {'object_name': 'Invitation'},
256 1a14083b Giorgos Korfiatis
            'code': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
257 1a14083b Giorgos Korfiatis
            'consumed': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
258 1a14083b Giorgos Korfiatis
            'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
259 1a14083b Giorgos Korfiatis
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
260 1a14083b Giorgos Korfiatis
            'inviter': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'invitations_sent'", 'null': 'True', 'to': "orm['im.AstakosUser']"}),
261 1a14083b Giorgos Korfiatis
            'is_consumed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
262 1a14083b Giorgos Korfiatis
            'realname': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
263 1a14083b Giorgos Korfiatis
            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'})
264 1a14083b Giorgos Korfiatis
        },
265 1a14083b Giorgos Korfiatis
        'im.pendingthirdpartyuser': {
266 1a14083b Giorgos Korfiatis
            'Meta': {'unique_together': "(('provider', 'third_party_identifier'),)", 'object_name': 'PendingThirdPartyUser'},
267 1a14083b Giorgos Korfiatis
            'affiliation': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
268 1a14083b Giorgos Korfiatis
            'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'blank': 'True'}),
269 1a14083b Giorgos Korfiatis
            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),
270 1a14083b Giorgos Korfiatis
            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}),
271 1a14083b Giorgos Korfiatis
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
272 1a14083b Giorgos Korfiatis
            'info': ('django.db.models.fields.TextField', [], {'default': "''", 'null': 'True', 'blank': 'True'}),
273 1a14083b Giorgos Korfiatis
            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}),
274 1a14083b Giorgos Korfiatis
            'provider': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
275 1a14083b Giorgos Korfiatis
            'third_party_identifier': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
276 1a14083b Giorgos Korfiatis
            'token': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
277 1a14083b Giorgos Korfiatis
            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
278 1a14083b Giorgos Korfiatis
        },
279 1a14083b Giorgos Korfiatis
        'im.project': {
280 1a14083b Giorgos Korfiatis
            'Meta': {'object_name': 'Project'},
281 1a14083b Giorgos Korfiatis
            'application': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'project'", 'unique': 'True', 'to': "orm['im.ProjectApplication']"}),
282 1a14083b Giorgos Korfiatis
            'creation_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
283 1a14083b Giorgos Korfiatis
            'deactivation_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
284 1a14083b Giorgos Korfiatis
            'deactivation_reason': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}),
285 1a14083b Giorgos Korfiatis
            'id': ('django.db.models.fields.BigIntegerField', [], {'primary_key': 'True', 'db_column': "'id'"}),
286 1a14083b Giorgos Korfiatis
            'last_approval_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
287 1a14083b Giorgos Korfiatis
            'members': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['im.AstakosUser']", 'through': "orm['im.ProjectMembership']", 'symmetrical': 'False'}),
288 1a14083b Giorgos Korfiatis
            'name': ('django.db.models.fields.CharField', [], {'max_length': '80', 'unique': 'True', 'null': 'True', 'db_index': 'True'}),
289 1a14083b Giorgos Korfiatis
            'state': ('django.db.models.fields.IntegerField', [], {'default': '1', 'db_index': 'True'})
290 1a14083b Giorgos Korfiatis
        },
291 1a14083b Giorgos Korfiatis
        'im.projectapplication': {
292 1a14083b Giorgos Korfiatis
            'Meta': {'unique_together': "(('chain', 'id'),)", 'object_name': 'ProjectApplication'},
293 1a14083b Giorgos Korfiatis
            'applicant': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'projects_applied'", 'to': "orm['im.AstakosUser']"}),
294 1a14083b Giorgos Korfiatis
            'chain': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'chained_apps'", 'db_column': "'chain'", 'to': "orm['im.Project']"}),
295 1a14083b Giorgos Korfiatis
            'comments': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
296 1a14083b Giorgos Korfiatis
            'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
297 1a14083b Giorgos Korfiatis
            'end_date': ('django.db.models.fields.DateTimeField', [], {}),
298 1a14083b Giorgos Korfiatis
            'homepage': ('django.db.models.fields.URLField', [], {'max_length': '255', 'null': 'True'}),
299 1a14083b Giorgos Korfiatis
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
300 1a14083b Giorgos Korfiatis
            'issue_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
301 1a14083b Giorgos Korfiatis
            'limit_on_members_number': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True'}),
302 1a14083b Giorgos Korfiatis
            'member_join_policy': ('django.db.models.fields.IntegerField', [], {}),
303 1a14083b Giorgos Korfiatis
            'member_leave_policy': ('django.db.models.fields.IntegerField', [], {}),
304 1a14083b Giorgos Korfiatis
            'name': ('django.db.models.fields.CharField', [], {'max_length': '80'}),
305 1a14083b Giorgos Korfiatis
            'owner': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'projects_owned'", 'to': "orm['im.AstakosUser']"}),
306 1a14083b Giorgos Korfiatis
            'resource_grants': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['im.Resource']", 'null': 'True', 'through': "orm['im.ProjectResourceGrant']", 'blank': 'True'}),
307 1a14083b Giorgos Korfiatis
            'response': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
308 1a14083b Giorgos Korfiatis
            'response_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
309 1a14083b Giorgos Korfiatis
            'start_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
310 1a14083b Giorgos Korfiatis
            'state': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'})
311 1a14083b Giorgos Korfiatis
        },
312 1a14083b Giorgos Korfiatis
        'im.projectmembership': {
313 1a14083b Giorgos Korfiatis
            'Meta': {'unique_together': "(('person', 'project'),)", 'object_name': 'ProjectMembership'},
314 1a14083b Giorgos Korfiatis
            'acceptance_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'db_index': 'True'}),
315 1a14083b Giorgos Korfiatis
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
316 1a14083b Giorgos Korfiatis
            'leave_request_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
317 1a14083b Giorgos Korfiatis
            'person': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.AstakosUser']"}),
318 1a14083b Giorgos Korfiatis
            'project': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.Project']"}),
319 1a14083b Giorgos Korfiatis
            'request_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
320 1a14083b Giorgos Korfiatis
            'state': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'})
321 1a14083b Giorgos Korfiatis
        },
322 1a14083b Giorgos Korfiatis
        'im.projectmembershiphistory': {
323 1a14083b Giorgos Korfiatis
            'Meta': {'object_name': 'ProjectMembershipHistory'},
324 1a14083b Giorgos Korfiatis
            'date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
325 1a14083b Giorgos Korfiatis
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
326 1a14083b Giorgos Korfiatis
            'person': ('django.db.models.fields.BigIntegerField', [], {}),
327 1a14083b Giorgos Korfiatis
            'project': ('django.db.models.fields.BigIntegerField', [], {}),
328 1a14083b Giorgos Korfiatis
            'reason': ('django.db.models.fields.IntegerField', [], {}),
329 1a14083b Giorgos Korfiatis
            'serial': ('django.db.models.fields.BigIntegerField', [], {})
330 1a14083b Giorgos Korfiatis
        },
331 1a14083b Giorgos Korfiatis
        'im.projectmembershiplog': {
332 1a14083b Giorgos Korfiatis
            'Meta': {'object_name': 'ProjectMembershipLog'},
333 1a14083b Giorgos Korfiatis
            'actor': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.AstakosUser']", 'null': 'True'}),
334 1a14083b Giorgos Korfiatis
            'comments': ('django.db.models.fields.TextField', [], {'null': 'True'}),
335 1a14083b Giorgos Korfiatis
            'date': ('django.db.models.fields.DateTimeField', [], {}),
336 1a14083b Giorgos Korfiatis
            'from_state': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
337 1a14083b Giorgos Korfiatis
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
338 1a14083b Giorgos Korfiatis
            'membership': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'log'", 'to': "orm['im.ProjectMembership']"}),
339 1a14083b Giorgos Korfiatis
            'reason': ('django.db.models.fields.TextField', [], {'null': 'True'}),
340 1a14083b Giorgos Korfiatis
            'to_state': ('django.db.models.fields.IntegerField', [], {})
341 1a14083b Giorgos Korfiatis
        },
342 1a14083b Giorgos Korfiatis
        'im.projectresourcegrant': {
343 1a14083b Giorgos Korfiatis
            'Meta': {'unique_together': "(('resource', 'project_application'),)", 'object_name': 'ProjectResourceGrant'},
344 1a14083b Giorgos Korfiatis
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
345 1a14083b Giorgos Korfiatis
            'member_capacity': ('snf_django.lib.db.fields.IntDecimalField', [], {'default': '0', 'max_digits': '38', 'decimal_places': '0'}),
346 1a14083b Giorgos Korfiatis
            'project_application': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.ProjectApplication']", 'null': 'True'}),
347 1a14083b Giorgos Korfiatis
            'project_capacity': ('snf_django.lib.db.fields.IntDecimalField', [], {'null': 'True', 'max_digits': '38', 'decimal_places': '0'}),
348 1a14083b Giorgos Korfiatis
            'resource': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.Resource']"})
349 1a14083b Giorgos Korfiatis
        },
350 1a14083b Giorgos Korfiatis
        'im.resource': {
351 1a14083b Giorgos Korfiatis
            'Meta': {'object_name': 'Resource'},
352 1a14083b Giorgos Korfiatis
            'allow_in_projects': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
353 1a14083b Giorgos Korfiatis
            'desc': ('django.db.models.fields.TextField', [], {'null': 'True'}),
354 1a14083b Giorgos Korfiatis
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
355 1a14083b Giorgos Korfiatis
            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
356 1a14083b Giorgos Korfiatis
            'service_origin': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
357 1a14083b Giorgos Korfiatis
            'service_type': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
358 1a14083b Giorgos Korfiatis
            'unit': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}),
359 1a14083b Giorgos Korfiatis
            'uplimit': ('snf_django.lib.db.fields.IntDecimalField', [], {'default': '0', 'max_digits': '38', 'decimal_places': '0'})
360 1a14083b Giorgos Korfiatis
        },
361 1a14083b Giorgos Korfiatis
        'im.serial': {
362 1a14083b Giorgos Korfiatis
            'Meta': {'object_name': 'Serial'},
363 1a14083b Giorgos Korfiatis
            'serial': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
364 1a14083b Giorgos Korfiatis
        },
365 1a14083b Giorgos Korfiatis
        'im.service': {
366 1a14083b Giorgos Korfiatis
            'Meta': {'object_name': 'Service'},
367 1a14083b Giorgos Korfiatis
            'component': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.Component']"}),
368 1a14083b Giorgos Korfiatis
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
369 1a14083b Giorgos Korfiatis
            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
370 1a14083b Giorgos Korfiatis
            'type': ('django.db.models.fields.CharField', [], {'max_length': '255'})
371 1a14083b Giorgos Korfiatis
        },
372 1a14083b Giorgos Korfiatis
        'im.sessioncatalog': {
373 1a14083b Giorgos Korfiatis
            'Meta': {'object_name': 'SessionCatalog'},
374 1a14083b Giorgos Korfiatis
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
375 1a14083b Giorgos Korfiatis
            'session_key': ('django.db.models.fields.CharField', [], {'max_length': '40'}),
376 1a14083b Giorgos Korfiatis
            'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'sessions'", 'null': 'True', 'to': "orm['im.AstakosUser']"})
377 1a14083b Giorgos Korfiatis
        },
378 1a14083b Giorgos Korfiatis
        'im.usersetting': {
379 1a14083b Giorgos Korfiatis
            'Meta': {'unique_together': "(('user', 'setting'),)", 'object_name': 'UserSetting'},
380 1a14083b Giorgos Korfiatis
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
381 1a14083b Giorgos Korfiatis
            'setting': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
382 1a14083b Giorgos Korfiatis
            'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.AstakosUser']"}),
383 1a14083b Giorgos Korfiatis
            'value': ('django.db.models.fields.IntegerField', [], {})
384 1a14083b Giorgos Korfiatis
        }
385 1a14083b Giorgos Korfiatis
    }
386 1a14083b Giorgos Korfiatis
387 1a14083b Giorgos Korfiatis
    complete_apps = ['im']