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'] |