Revision 88f5242e

b/snf-astakos-app/astakos/api/projects.py
128 128
    for application in applications:
129 129
        d = {
130 130
            "id": application.id,
131
            "project": application.chain_id,
131
            "project": application.chain.uuid,
132 132
            "state": APPLICATION_STATE_SHOW[application.state],
133 133
            "comments": application.comments,
134 134
        }
......
151 151
    for project in projects:
152 152
        application = project.application
153 153
        d = {
154
            "id": project.id,
154
            "id": project.uuid,
155 155
            "application": application.id,
156 156
            "state": PROJECT_STATE_SHOW[project.overall_state()],
157 157
            "creation_date": project.creation_date,
......
189 189
        d = {
190 190
            "id": membership.id,
191 191
            "user": membership.person.uuid,
192
            "project": membership.project_id,
192
            "project": membership.project.uuid,
193 193
            "state": MEMBERSHIP_STATE_SHOW[membership.state],
194 194
            "allowed_actions": allowed_actions,
195 195
        }
......
332 332

  
333 333

  
334 334
def _get_project(project_id, request_user=None):
335
    project = functions.get_project_by_id(project_id)
335
    project = functions.get_project_by_uuid(project_id)
336 336
    functions.project_check_allowed(
337 337
        project, request_user, level=functions.ANY_LEVEL)
338 338
    return project
......
447 447
            request_user=user)
448 448

  
449 449
    result = {"application": application.id,
450
              "id": application.chain_id
450
              "id": application.chain.uuid,
451 451
              }
452 452
    return json_response(result, status_code=201)
453 453

  
......
501 501
def make_application_query(input_data):
502 502
    project_id = input_data.get("project")
503 503
    if project_id is not None:
504
        if not isinstance(project_id, (int, long)):
505
            raise faults.BadRequest("'project' must be integer")
506
        return Q(chain=project_id)
504
        return Q(chain__uuid=project_id)
507 505
    return Q()
508 506

  
509 507

  
......
585 583
def make_membership_query(input_data):
586 584
    project_id = input_data.get("project")
587 585
    if project_id is not None:
588
        if not isinstance(project_id, (int, long)):
589
            raise faults.BadRequest("'project' must be integer")
590
        return Q(project=project_id)
586
        return Q(project__uuid=project_id)
591 587
    return Q()
592 588

  
593 589

  
b/snf-astakos-app/astakos/api/urls.py
60 60
astakos_account_v1_0 += patterns(
61 61
    'astakos.api.projects',
62 62
    url(r'^projects/?$', 'projects', name='api_projects'),
63
    url(r'^projects/(?P<project_id>\d+)/?$', 'project', name='api_project'),
64
    url(r'^projects/(?P<project_id>\d+)/action/?$', 'project_action',
65
        name='api_project_action'),
66 63
    url(r'^projects/apps/?$', 'applications', name='api_applications'),
67 64
    url(r'^projects/apps/(?P<app_id>\d+)/?$', 'application',
68 65
        name='api_application'),
......
73 70
        name='api_membership'),
74 71
    url(r'^projects/memberships/(?P<memb_id>\d+)/action/?$',
75 72
        'membership_action', name='api_membership_action'),
73
    url(r'^projects/(?P<project_id>[^/]+)/?$', 'project', name='api_project'),
74
    url(r'^projects/(?P<project_id>[^/]+)/action/?$', 'project_action',
75
        name='api_project_action'),
76 76
)
77 77

  
78 78
urlpatterns = patterns(
b/snf-astakos-app/astakos/im/functions.py
43 43

  
44 44
from synnefo.lib import join_urls
45 45
from astakos.im.models import AstakosUser, Invitation, ProjectMembership, \
46
    ProjectApplication, Project, new_chain, Resource, ProjectLock
46
    ProjectApplication, Project, new_chain, Resource, ProjectLock, \
47
    create_project
47 48
from astakos.im import quotas
48 49
from astakos.im import project_notif
49 50
from astakos.im import settings
......
283 284
        raise ProjectNotFound(m)
284 285

  
285 286

  
287
def get_project_by_uuid(uuid):
288
    try:
289
        return Project.objects.get(uuid=uuid)
290
    except Project.DoesNotExist:
291
        m = _(astakos_messages.UNKNOWN_PROJECT_ID) % uuid
292
        raise ProjectNotFound(m)
293

  
294

  
286 295
def get_project_for_update(project_id):
287 296
    try:
288
        return Project.objects.select_for_update().get(id=project_id)
297
        try:
298
            project_id = int(project_id)
299
            return Project.objects.select_for_update().get(id=project_id)
300
        except ValueError:
301
            return Project.objects.select_for_update().get(uuid=project_id)
289 302
    except Project.DoesNotExist:
290 303
        m = _(astakos_messages.UNKNOWN_PROJECT_ID) % project_id
291 304
        raise ProjectNotFound(m)
......
385 398

  
386 399
def checkAlive(project):
387 400
    if not project.is_alive:
388
        m = _(astakos_messages.NOT_ALIVE_PROJECT) % project.id
401
        m = _(astakos_messages.NOT_ALIVE_PROJECT) % project.uuid
389 402
        raise ProjectConflict(m)
390 403

  
391 404

  
......
513 526
    accept_membership_project_checks(project, request_user)
514 527

  
515 528
    try:
516
        membership = get_membership(project_id, user.id)
529
        membership = get_membership(project.id, user.id)
517 530
        if not membership.check_action("enroll"):
518 531
            m = _(astakos_messages.MEMBERSHIP_ACCEPTED)
519 532
            raise ProjectConflict(m)
......
708 721
        chain = new_chain()
709 722
        application.chain_id = chain.chain
710 723
        application.save()
711
        Project.objects.create(id=chain.chain, application=application)
724
        create_project(id=chain.chain, application=application)
712 725
    else:
713 726
        application.chain = project
714 727
        application.save()
......
826 839
        if (conflicting_project != project):
827 840
            m = (_("cannot approve: project with name '%s' "
828 841
                   "already exists (id: %s)") %
829
                 (new_project_name, conflicting_project.id))
842
                 (new_project_name, conflicting_project.uuid))
830 843
            raise ProjectConflict(m)  # invalid argument
831 844
    except Project.DoesNotExist:
832 845
        pass
......
905 918
    project_check_allowed(project, request_user, level=ADMIN_LEVEL)
906 919

  
907 920
    if not project.is_suspended:
908
        m = _(astakos_messages.NOT_SUSPENDED_PROJECT) % project.id
921
        m = _(astakos_messages.NOT_SUSPENDED_PROJECT) % project.uuid
909 922
        raise ProjectConflict(m)
910 923

  
911 924
    project.resume(actor=request_user, reason=reason)
......
920 933
    project_check_allowed(project, request_user, level=ADMIN_LEVEL)
921 934

  
922 935
    if not project.is_terminated:
923
        m = _(astakos_messages.NOT_TERMINATED_PROJECT) % project.id
936
        m = _(astakos_messages.NOT_TERMINATED_PROJECT) % project.uuid
924 937
        raise ProjectConflict(m)
925 938

  
926 939
    check_conflicting_projects(project.application)
b/snf-astakos-app/astakos/im/management/commands/project-list.py
128 128
            if preds:
129 129
                chains = filter_preds(preds, chains)
130 130

  
131
        labels = ('ProjID', 'Name', 'Owner', 'Email', 'Status',
132
                  'Pending AppID')
131
        labels = ('ProjID', 'Name', 'Owner', 'Status', 'Pending AppID')
133 132

  
134 133
        info = chain_info(chains)
135 134
        utils.pprint_table(self.stdout, info, labels,
......
160 159
        pending_appid = pending_app.id if pending_app is not None else ""
161 160
        application = project.application
162 161

  
163
        t = (project.pk,
162
        t = (project.uuid,
164 163
             application.name,
165
             application.owner.realname,
166 164
             application.owner.email,
167 165
             status,
168 166
             pending_appid,
b/snf-astakos-app/astakos/im/management/commands/project-show.py
84 84
        self.output_format = options['output_format']
85 85

  
86 86
        id_ = args[0]
87
        try:
88
            id_ = int(id_)
89
        except ValueError:
90
            raise CommandError("id should be an integer value.")
91

  
92 87
        if search_apps:
93 88
            app = get_app(id_)
94 89
            self.print_app(app)
......
132 127

  
133 128
def get_app(app_id):
134 129
    try:
130
        app_id = int(app_id)
131
    except ValueError:
132
        raise CommandError("id should be an integer value.")
133
    try:
135 134
        return ProjectApplication.objects.get(id=app_id)
136 135
    except ProjectApplication.DoesNotExist:
137 136
        raise CommandError("Application with id %s not found." % app_id)
......
139 138

  
140 139
def get_chain_state(project_id):
141 140
    try:
142
        chain = Project.objects.get(id=project_id)
141
        chain = Project.objects.get(uuid=project_id)
143 142
        return chain, chain.last_pending_application()
144 143
    except Project.DoesNotExist:
145 144
        raise CommandError("Project with id %s not found." % project_id)
......
163 162
    mem_limit_show = mem_limit if mem_limit is not None else "unlimited"
164 163

  
165 164
    d = OrderedDict([
166
        ('project id', app.chain_id),
165
        ('project id', app.chain.uuid),
167 166
        ('application id', app.id),
168 167
        ('name', app.name),
169 168
        ('status', app.state_display()),
......
187 186
    app = project.application
188 187

  
189 188
    d = OrderedDict([
190
        ('project id', project.id),
189
        ('project id', project.uuid),
191 190
        ('application id', app.id),
192 191
        ('name', app.name),
193 192
        ('status', project.state_display()),
b/snf-astakos-app/astakos/im/management/commands/user-show.py
161 161

  
162 162
    for m in ms:
163 163
        project = m.project
164
        print_data.append((project.id,
164
        print_data.append((project.uuid,
165 165
                           project.application.name,
166 166
                           m.state_display(),
167 167
                           ))
......
181 181
        pending_appid = pending_app.id if pending_app is not None else ""
182 182
        application = project.application
183 183

  
184
        t = (project.pk,
184
        t = (project.uuid,
185 185
             application.name,
186 186
             status,
187 187
             pending_appid,
b/snf-astakos-app/astakos/im/migrations/0064_auto__add_field_project_uuid.py
1
# -*- coding: utf-8 -*-
2
import datetime
3
from south.db import db
4
from south.v2 import SchemaMigration
5
from django.db import models
6

  
7

  
8
class Migration(SchemaMigration):
9

  
10
    def forwards(self, orm):
11
        # Adding field 'Project.uuid'
12
        db.add_column('im_project', 'uuid',
13
                      self.gf('django.db.models.fields.CharField')(max_length=255, unique=True, null=True),
14
                      keep_default=False)
15

  
16

  
17
    def backwards(self, orm):
18
        # Deleting field 'Project.uuid'
19
        db.delete_column('im_project', 'uuid')
20

  
21

  
22
    models = {
23
        'auth.group': {
24
            'Meta': {'object_name': 'Group'},
25
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
26
            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
27
            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
28
        },
29
        'auth.permission': {
30
            'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
31
            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
32
            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
33
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
34
            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
35
        },
36
        'auth.user': {
37
            'Meta': {'object_name': 'User'},
38
            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
39
            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
40
            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
41
            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
42
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
43
            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
44
            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
45
            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
46
            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
47
            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
48
            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
49
            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
50
            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
51
        },
52
        'contenttypes.contenttype': {
53
            'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
54
            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
55
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
56
            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
57
            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
58
        },
59
        'im.additionalmail': {
60
            'Meta': {'object_name': 'AdditionalMail'},
61
            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75'}),
62
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
63
            'owner': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.AstakosUser']"})
64
        },
65
        'im.approvalterms': {
66
            'Meta': {'object_name': 'ApprovalTerms'},
67
            'date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'db_index': 'True', 'blank': 'True'}),
68
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
69
            'location': ('django.db.models.fields.CharField', [], {'max_length': '255'})
70
        },
71
        'im.astakosuser': {
72
            'Meta': {'object_name': 'AstakosUser', '_ormbases': ['auth.User']},
73
            'accepted_email': ('django.db.models.fields.EmailField', [], {'default': 'None', 'max_length': '75', 'null': 'True', 'blank': 'True'}),
74
            'accepted_policy': ('django.db.models.fields.CharField', [], {'default': 'None', 'max_length': '255', 'null': 'True', 'blank': 'True'}),
75
            'activation_sent': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
76
            'affiliation': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
77
            'auth_token': ('django.db.models.fields.CharField', [], {'max_length': '64', 'unique': 'True', 'null': 'True', 'blank': 'True'}),
78
            'auth_token_created': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
79
            'auth_token_expires': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
80
            'date_signed_terms': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
81
            'deactivated_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
82
            'deactivated_reason': ('django.db.models.fields.TextField', [], {'default': 'None', 'null': 'True'}),
83
            'disturbed_quota': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
84
            'email_verified': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
85
            'has_credits': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
86
            'has_signed_terms': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
87
            'invitations': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
88
            'is_rejected': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
89
            'is_verified': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
90
            'level': ('django.db.models.fields.IntegerField', [], {'default': '4'}),
91
            'moderated': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
92
            'moderated_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
93
            'moderated_data': ('django.db.models.fields.TextField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
94
            'policy': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['im.Resource']", 'null': 'True', 'through': "orm['im.AstakosUserQuota']", 'symmetrical': 'False'}),
95
            'rejected_reason': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
96
            'updated': ('django.db.models.fields.DateTimeField', [], {}),
97
            'user_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True', 'primary_key': 'True'}),
98
            'uuid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
99
            'verification_code': ('django.db.models.fields.CharField', [], {'max_length': '255', 'unique': 'True', 'null': 'True'}),
100
            'verified_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'})
101
        },
102
        'im.astakosuserauthprovider': {
103
            'Meta': {'ordering': "('module', 'created')", 'unique_together': "(('identifier', 'module', 'user'),)", 'object_name': 'AstakosUserAuthProvider'},
104
            'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
105
            'affiliation': ('django.db.models.fields.CharField', [], {'default': 'None', 'max_length': '255', 'null': 'True', 'blank': 'True'}),
106
            'auth_backend': ('django.db.models.fields.CharField', [], {'default': "'astakos'", 'max_length': '255'}),
107
            'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
108
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
109
            'identifier': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
110
            'info_data': ('django.db.models.fields.TextField', [], {'default': "''", 'null': 'True', 'blank': 'True'}),
111
            'module': ('django.db.models.fields.CharField', [], {'default': "'local'", 'max_length': '255'}),
112
            'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'auth_providers'", 'to': "orm['im.AstakosUser']"})
113
        },
114
        'im.astakosuserquota': {
115
            'Meta': {'unique_together': "(('resource', 'user'),)", 'object_name': 'AstakosUserQuota'},
116
            'capacity': ('django.db.models.fields.BigIntegerField', [], {}),
117
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
118
            'resource': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.Resource']"}),
119
            'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.AstakosUser']"})
120
        },
121
        'im.authproviderpolicyprofile': {
122
            'Meta': {'ordering': "['priority']", 'object_name': 'AuthProviderPolicyProfile'},
123
            'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
124
            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'authpolicy_profiles'", 'symmetrical': 'False', 'to': "orm['auth.Group']"}),
125
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
126
            'is_exclusive': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
127
            'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
128
            'policy_add': ('django.db.models.fields.NullBooleanField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
129
            'policy_automoderate': ('django.db.models.fields.NullBooleanField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
130
            'policy_create': ('django.db.models.fields.NullBooleanField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
131
            'policy_limit': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True'}),
132
            'policy_login': ('django.db.models.fields.NullBooleanField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
133
            'policy_remove': ('django.db.models.fields.NullBooleanField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
134
            'policy_required': ('django.db.models.fields.NullBooleanField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
135
            'policy_switch': ('django.db.models.fields.NullBooleanField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
136
            'priority': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
137
            'provider': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
138
            'users': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'authpolicy_profiles'", 'symmetrical': 'False', 'to': "orm['im.AstakosUser']"})
139
        },
140
        'im.chain': {
141
            'Meta': {'object_name': 'Chain'},
142
            'chain': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
143
        },
144
        'im.component': {
145
            'Meta': {'object_name': 'Component'},
146
            'auth_token': ('django.db.models.fields.CharField', [], {'max_length': '64', 'unique': 'True', 'null': 'True', 'blank': 'True'}),
147
            'auth_token_created': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
148
            'auth_token_expires': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
149
            'base_url': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}),
150
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
151
            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255', 'db_index': 'True'}),
152
            'url': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'})
153
        },
154
        'im.emailchange': {
155
            'Meta': {'object_name': 'EmailChange'},
156
            'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '40', 'db_index': 'True'}),
157
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
158
            'new_email_address': ('django.db.models.fields.EmailField', [], {'max_length': '75'}),
159
            'requested_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
160
            'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'emailchanges'", 'unique': 'True', 'to': "orm['im.AstakosUser']"})
161
        },
162
        'im.endpoint': {
163
            'Meta': {'object_name': 'Endpoint'},
164
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
165
            'service': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'endpoints'", 'to': "orm['im.Service']"})
166
        },
167
        'im.endpointdata': {
168
            'Meta': {'unique_together': "(('endpoint', 'key'),)", 'object_name': 'EndpointData'},
169
            'endpoint': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'data'", 'to': "orm['im.Endpoint']"}),
170
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
171
            'key': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
172
            'value': ('django.db.models.fields.CharField', [], {'max_length': '1024'})
173
        },
174
        'im.invitation': {
175
            'Meta': {'object_name': 'Invitation'},
176
            'code': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
177
            'consumed': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
178
            'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
179
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
180
            'inviter': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'invitations_sent'", 'null': 'True', 'to': "orm['im.AstakosUser']"}),
181
            'is_consumed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
182
            'realname': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
183
            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'})
184
        },
185
        'im.pendingthirdpartyuser': {
186
            'Meta': {'unique_together': "(('provider', 'third_party_identifier'),)", 'object_name': 'PendingThirdPartyUser'},
187
            'affiliation': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
188
            'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'blank': 'True'}),
189
            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),
190
            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}),
191
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
192
            'info': ('django.db.models.fields.TextField', [], {'default': "''", 'null': 'True', 'blank': 'True'}),
193
            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}),
194
            'provider': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
195
            'third_party_identifier': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
196
            'token': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
197
            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
198
        },
199
        'im.project': {
200
            'Meta': {'object_name': 'Project'},
201
            'application': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'project'", 'unique': 'True', 'to': "orm['im.ProjectApplication']"}),
202
            'creation_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
203
            'id': ('django.db.models.fields.BigIntegerField', [], {'primary_key': 'True', 'db_column': "'id'"}),
204
            'members': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['im.AstakosUser']", 'through': "orm['im.ProjectMembership']", 'symmetrical': 'False'}),
205
            'name': ('django.db.models.fields.CharField', [], {'max_length': '80', 'unique': 'True', 'null': 'True', 'db_index': 'True'}),
206
            'state': ('django.db.models.fields.IntegerField', [], {'default': '1', 'db_index': 'True'}),
207
            'uuid': ('django.db.models.fields.CharField', [], {'max_length': '255', 'unique': 'True', 'null': 'True'})
208
        },
209
        'im.projectapplication': {
210
            'Meta': {'unique_together': "(('chain', 'id'),)", 'object_name': 'ProjectApplication'},
211
            'applicant': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'projects_applied'", 'to': "orm['im.AstakosUser']"}),
212
            'chain': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'chained_apps'", 'db_column': "'chain'", 'to': "orm['im.Project']"}),
213
            'comments': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
214
            'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
215
            'end_date': ('django.db.models.fields.DateTimeField', [], {}),
216
            'homepage': ('django.db.models.fields.URLField', [], {'max_length': '255', 'null': 'True'}),
217
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
218
            'issue_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
219
            'limit_on_members_number': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True'}),
220
            'member_join_policy': ('django.db.models.fields.IntegerField', [], {}),
221
            'member_leave_policy': ('django.db.models.fields.IntegerField', [], {}),
222
            'name': ('django.db.models.fields.CharField', [], {'max_length': '80'}),
223
            'owner': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'projects_owned'", 'to': "orm['im.AstakosUser']"}),
224
            'private': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
225
            'resource_grants': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['im.Resource']", 'null': 'True', 'through': "orm['im.ProjectResourceGrant']", 'blank': 'True'}),
226
            'response': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
227
            'response_actor': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'responded_apps'", 'null': 'True', 'to': "orm['im.AstakosUser']"}),
228
            'response_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
229
            'start_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
230
            'state': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
231
            'waive_actor': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'waived_apps'", 'null': 'True', 'to': "orm['im.AstakosUser']"}),
232
            'waive_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
233
            'waive_reason': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'})
234
        },
235
        'im.projectlock': {
236
            'Meta': {'object_name': 'ProjectLock'},
237
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
238
        },
239
        'im.projectlog': {
240
            'Meta': {'object_name': 'ProjectLog'},
241
            'actor': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.AstakosUser']", 'null': 'True'}),
242
            'comments': ('django.db.models.fields.TextField', [], {'null': 'True'}),
243
            'date': ('django.db.models.fields.DateTimeField', [], {}),
244
            'from_state': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
245
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
246
            'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'log'", 'to': "orm['im.Project']"}),
247
            'reason': ('django.db.models.fields.TextField', [], {'null': 'True'}),
248
            'to_state': ('django.db.models.fields.IntegerField', [], {})
249
        },
250
        'im.projectmembership': {
251
            'Meta': {'unique_together': "(('person', 'project'),)", 'object_name': 'ProjectMembership'},
252
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
253
            'person': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.AstakosUser']"}),
254
            'project': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.Project']"}),
255
            'state': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'})
256
        },
257
        'im.projectmembershiplog': {
258
            'Meta': {'object_name': 'ProjectMembershipLog'},
259
            'actor': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.AstakosUser']", 'null': 'True'}),
260
            'comments': ('django.db.models.fields.TextField', [], {'null': 'True'}),
261
            'date': ('django.db.models.fields.DateTimeField', [], {}),
262
            'from_state': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
263
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
264
            'membership': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'log'", 'to': "orm['im.ProjectMembership']"}),
265
            'reason': ('django.db.models.fields.TextField', [], {'null': 'True'}),
266
            'to_state': ('django.db.models.fields.IntegerField', [], {})
267
        },
268
        'im.projectresourcegrant': {
269
            'Meta': {'unique_together': "(('resource', 'project_application'),)", 'object_name': 'ProjectResourceGrant'},
270
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
271
            'member_capacity': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}),
272
            'project_application': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.ProjectApplication']", 'null': 'True'}),
273
            'project_capacity': ('django.db.models.fields.BigIntegerField', [], {'null': 'True'}),
274
            'resource': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.Resource']"})
275
        },
276
        'im.resource': {
277
            'Meta': {'object_name': 'Resource'},
278
            'api_visible': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
279
            'desc': ('django.db.models.fields.TextField', [], {'null': 'True'}),
280
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
281
            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
282
            'service_origin': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
283
            'service_type': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
284
            'ui_visible': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
285
            'unit': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}),
286
            'uplimit': ('django.db.models.fields.BigIntegerField', [], {'default': '0'})
287
        },
288
        'im.service': {
289
            'Meta': {'object_name': 'Service'},
290
            'component': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.Component']"}),
291
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
292
            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
293
            'type': ('django.db.models.fields.CharField', [], {'max_length': '255'})
294
        },
295
        'im.sessioncatalog': {
296
            'Meta': {'object_name': 'SessionCatalog'},
297
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
298
            'session_key': ('django.db.models.fields.CharField', [], {'max_length': '40'}),
299
            'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'sessions'", 'null': 'True', 'to': "orm['im.AstakosUser']"})
300
        },
301
        'im.usersetting': {
302
            'Meta': {'unique_together': "(('user', 'setting'),)", 'object_name': 'UserSetting'},
303
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
304
            'setting': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
305
            'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.AstakosUser']"}),
306
            'value': ('django.db.models.fields.IntegerField', [], {})
307
        }
308
    }
309

  
310
    complete_apps = ['im']
b/snf-astakos-app/astakos/im/migrations/0065_project_uuid.py
1
# encoding: utf-8
2
import datetime
3
from south.db import db
4
from south.v2 import DataMigration
5
from django.db import models
6
import uuid
7
import itertools
8

  
9

  
10
class Migration(DataMigration):
11

  
12
    def forwards(self, orm):
13
        users = orm.AstakosUser.objects.all()
14
        current_uuids = set(u.uuid for u in users)
15
        projects = orm.Project.objects.all()
16
        for project in projects:
17
            while True:
18
                u = str(uuid.uuid4())
19
                if not u in current_uuids:
20
                    current_uuids.add(u)
21
                    project.uuid = u
22
                    project.save()
23
                    break
24

  
25
    def backwards(self, orm):
26
        "Write your backwards methods here."
27

  
28
    models = {
29
        'auth.group': {
30
            'Meta': {'object_name': 'Group'},
31
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
32
            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
33
            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
34
        },
35
        'auth.permission': {
36
            'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
37
            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
38
            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
39
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
40
            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
41
        },
42
        'auth.user': {
43
            'Meta': {'object_name': 'User'},
44
            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
45
            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
46
            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
47
            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
48
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
49
            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
50
            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
51
            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
52
            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
53
            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
54
            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
55
            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
56
            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
57
        },
58
        'contenttypes.contenttype': {
59
            'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
60
            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
61
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
62
            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
63
            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
64
        },
65
        'im.additionalmail': {
66
            'Meta': {'object_name': 'AdditionalMail'},
67
            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75'}),
68
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
69
            'owner': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.AstakosUser']"})
70
        },
71
        'im.approvalterms': {
72
            'Meta': {'object_name': 'ApprovalTerms'},
73
            'date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'db_index': 'True', 'blank': 'True'}),
74
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
75
            'location': ('django.db.models.fields.CharField', [], {'max_length': '255'})
76
        },
77
        'im.astakosuser': {
78
            'Meta': {'object_name': 'AstakosUser', '_ormbases': ['auth.User']},
79
            'accepted_email': ('django.db.models.fields.EmailField', [], {'default': 'None', 'max_length': '75', 'null': 'True', 'blank': 'True'}),
80
            'accepted_policy': ('django.db.models.fields.CharField', [], {'default': 'None', 'max_length': '255', 'null': 'True', 'blank': 'True'}),
81
            'activation_sent': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
82
            'affiliation': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
83
            'auth_token': ('django.db.models.fields.CharField', [], {'max_length': '64', 'unique': 'True', 'null': 'True', 'blank': 'True'}),
84
            'auth_token_created': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
85
            'auth_token_expires': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
86
            'date_signed_terms': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
87
            'deactivated_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
88
            'deactivated_reason': ('django.db.models.fields.TextField', [], {'default': 'None', 'null': 'True'}),
89
            'disturbed_quota': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
90
            'email_verified': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
91
            'has_credits': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
92
            'has_signed_terms': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
93
            'invitations': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
94
            'is_rejected': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
95
            'is_verified': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
96
            'level': ('django.db.models.fields.IntegerField', [], {'default': '4'}),
97
            'moderated': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
98
            'moderated_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
99
            'moderated_data': ('django.db.models.fields.TextField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
100
            'policy': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['im.Resource']", 'null': 'True', 'through': "orm['im.AstakosUserQuota']", 'symmetrical': 'False'}),
101
            'rejected_reason': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
102
            'updated': ('django.db.models.fields.DateTimeField', [], {}),
103
            'user_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True', 'primary_key': 'True'}),
104
            'uuid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
105
            'verification_code': ('django.db.models.fields.CharField', [], {'max_length': '255', 'unique': 'True', 'null': 'True'}),
106
            'verified_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'})
107
        },
108
        'im.astakosuserauthprovider': {
109
            'Meta': {'ordering': "('module', 'created')", 'unique_together': "(('identifier', 'module', 'user'),)", 'object_name': 'AstakosUserAuthProvider'},
110
            'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
111
            'affiliation': ('django.db.models.fields.CharField', [], {'default': 'None', 'max_length': '255', 'null': 'True', 'blank': 'True'}),
112
            'auth_backend': ('django.db.models.fields.CharField', [], {'default': "'astakos'", 'max_length': '255'}),
113
            'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
114
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
115
            'identifier': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
116
            'info_data': ('django.db.models.fields.TextField', [], {'default': "''", 'null': 'True', 'blank': 'True'}),
117
            'module': ('django.db.models.fields.CharField', [], {'default': "'local'", 'max_length': '255'}),
118
            'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'auth_providers'", 'to': "orm['im.AstakosUser']"})
119
        },
120
        'im.astakosuserquota': {
121
            'Meta': {'unique_together': "(('resource', 'user'),)", 'object_name': 'AstakosUserQuota'},
122
            'capacity': ('django.db.models.fields.BigIntegerField', [], {}),
123
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
124
            'resource': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.Resource']"}),
125
            'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.AstakosUser']"})
126
        },
127
        'im.authproviderpolicyprofile': {
128
            'Meta': {'ordering': "['priority']", 'object_name': 'AuthProviderPolicyProfile'},
129
            'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
130
            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'authpolicy_profiles'", 'symmetrical': 'False', 'to': "orm['auth.Group']"}),
131
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
132
            'is_exclusive': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
133
            'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
134
            'policy_add': ('django.db.models.fields.NullBooleanField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
135
            'policy_automoderate': ('django.db.models.fields.NullBooleanField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
136
            'policy_create': ('django.db.models.fields.NullBooleanField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
137
            'policy_limit': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True'}),
138
            'policy_login': ('django.db.models.fields.NullBooleanField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
139
            'policy_remove': ('django.db.models.fields.NullBooleanField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
140
            'policy_required': ('django.db.models.fields.NullBooleanField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
141
            'policy_switch': ('django.db.models.fields.NullBooleanField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
142
            'priority': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
143
            'provider': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
144
            'users': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'authpolicy_profiles'", 'symmetrical': 'False', 'to': "orm['im.AstakosUser']"})
145
        },
146
        'im.chain': {
147
            'Meta': {'object_name': 'Chain'},
148
            'chain': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
149
        },
150
        'im.component': {
151
            'Meta': {'object_name': 'Component'},
152
            'auth_token': ('django.db.models.fields.CharField', [], {'max_length': '64', 'unique': 'True', 'null': 'True', 'blank': 'True'}),
153
            'auth_token_created': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
154
            'auth_token_expires': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
155
            'base_url': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}),
156
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
157
            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255', 'db_index': 'True'}),
158
            'url': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'})
159
        },
160
        'im.emailchange': {
161
            'Meta': {'object_name': 'EmailChange'},
162
            'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '40', 'db_index': 'True'}),
163
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
164
            'new_email_address': ('django.db.models.fields.EmailField', [], {'max_length': '75'}),
165
            'requested_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
166
            'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'emailchanges'", 'unique': 'True', 'to': "orm['im.AstakosUser']"})
167
        },
168
        'im.endpoint': {
169
            'Meta': {'object_name': 'Endpoint'},
170
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
171
            'service': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'endpoints'", 'to': "orm['im.Service']"})
172
        },
173
        'im.endpointdata': {
174
            'Meta': {'unique_together': "(('endpoint', 'key'),)", 'object_name': 'EndpointData'},
175
            'endpoint': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'data'", 'to': "orm['im.Endpoint']"}),
176
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
177
            'key': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
178
            'value': ('django.db.models.fields.CharField', [], {'max_length': '1024'})
179
        },
180
        'im.invitation': {
181
            'Meta': {'object_name': 'Invitation'},
182
            'code': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
183
            'consumed': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
184
            'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
185
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
186
            'inviter': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'invitations_sent'", 'null': 'True', 'to': "orm['im.AstakosUser']"}),
187
            'is_consumed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
188
            'realname': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
189
            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'})
190
        },
191
        'im.pendingthirdpartyuser': {
192
            'Meta': {'unique_together': "(('provider', 'third_party_identifier'),)", 'object_name': 'PendingThirdPartyUser'},
193
            'affiliation': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
194
            'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'blank': 'True'}),
195
            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),
196
            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}),
197
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
198
            'info': ('django.db.models.fields.TextField', [], {'default': "''", 'null': 'True', 'blank': 'True'}),
199
            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}),
200
            'provider': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
201
            'third_party_identifier': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
202
            'token': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
203
            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
204
        },
205
        'im.project': {
206
            'Meta': {'object_name': 'Project'},
207
            'application': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'project'", 'unique': 'True', 'to': "orm['im.ProjectApplication']"}),
208
            'creation_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
209
            'id': ('django.db.models.fields.BigIntegerField', [], {'primary_key': 'True', 'db_column': "'id'"}),
210
            'members': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['im.AstakosUser']", 'through': "orm['im.ProjectMembership']", 'symmetrical': 'False'}),
211
            'name': ('django.db.models.fields.CharField', [], {'max_length': '80', 'unique': 'True', 'null': 'True', 'db_index': 'True'}),
212
            'state': ('django.db.models.fields.IntegerField', [], {'default': '1', 'db_index': 'True'}),
213
            'uuid': ('django.db.models.fields.CharField', [], {'max_length': '255', 'unique': 'True', 'null': 'True'})
214
        },
215
        'im.projectapplication': {
216
            'Meta': {'unique_together': "(('chain', 'id'),)", 'object_name': 'ProjectApplication'},
217
            'applicant': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'projects_applied'", 'to': "orm['im.AstakosUser']"}),
218
            'chain': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'chained_apps'", 'db_column': "'chain'", 'to': "orm['im.Project']"}),
219
            'comments': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
220
            'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
221
            'end_date': ('django.db.models.fields.DateTimeField', [], {}),
222
            'homepage': ('django.db.models.fields.URLField', [], {'max_length': '255', 'null': 'True'}),
223
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
224
            'issue_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
225
            'limit_on_members_number': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True'}),
226
            'member_join_policy': ('django.db.models.fields.IntegerField', [], {}),
227
            'member_leave_policy': ('django.db.models.fields.IntegerField', [], {}),
228
            'name': ('django.db.models.fields.CharField', [], {'max_length': '80'}),
229
            'owner': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'projects_owned'", 'to': "orm['im.AstakosUser']"}),
230
            'private': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
231
            'resource_grants': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['im.Resource']", 'null': 'True', 'through': "orm['im.ProjectResourceGrant']", 'blank': 'True'}),
232
            'response': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
233
            'response_actor': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'responded_apps'", 'null': 'True', 'to': "orm['im.AstakosUser']"}),
234
            'response_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
235
            'start_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
236
            'state': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
237
            'waive_actor': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'waived_apps'", 'null': 'True', 'to': "orm['im.AstakosUser']"}),
238
            'waive_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
239
            'waive_reason': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'})
240
        },
241
        'im.projectlock': {
242
            'Meta': {'object_name': 'ProjectLock'},
243
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
244
        },
245
        'im.projectlog': {
246
            'Meta': {'object_name': 'ProjectLog'},
247
            'actor': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.AstakosUser']", 'null': 'True'}),
248
            'comments': ('django.db.models.fields.TextField', [], {'null': 'True'}),
249
            'date': ('django.db.models.fields.DateTimeField', [], {}),
250
            'from_state': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
251
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
252
            'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'log'", 'to': "orm['im.Project']"}),
253
            'reason': ('django.db.models.fields.TextField', [], {'null': 'True'}),
254
            'to_state': ('django.db.models.fields.IntegerField', [], {})
255
        },
256
        'im.projectmembership': {
257
            'Meta': {'unique_together': "(('person', 'project'),)", 'object_name': 'ProjectMembership'},
258
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
259
            'person': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.AstakosUser']"}),
260
            'project': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.Project']"}),
261
            'state': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'})
262
        },
263
        'im.projectmembershiplog': {
264
            'Meta': {'object_name': 'ProjectMembershipLog'},
265
            'actor': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.AstakosUser']", 'null': 'True'}),
266
            'comments': ('django.db.models.fields.TextField', [], {'null': 'True'}),
267
            'date': ('django.db.models.fields.DateTimeField', [], {}),
268
            'from_state': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
269
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
270
            'membership': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'log'", 'to': "orm['im.ProjectMembership']"}),
271
            'reason': ('django.db.models.fields.TextField', [], {'null': 'True'}),
272
            'to_state': ('django.db.models.fields.IntegerField', [], {})
273
        },
274
        'im.projectresourcegrant': {
275
            'Meta': {'unique_together': "(('resource', 'project_application'),)", 'object_name': 'ProjectResourceGrant'},
276
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
277
            'member_capacity': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}),
278
            'project_application': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.ProjectApplication']", 'null': 'True'}),
279
            'project_capacity': ('django.db.models.fields.BigIntegerField', [], {'null': 'True'}),
280
            'resource': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.Resource']"})
281
        },
282
        'im.resource': {
283
            'Meta': {'object_name': 'Resource'},
284
            'api_visible': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
285
            'desc': ('django.db.models.fields.TextField', [], {'null': 'True'}),
286
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
287
            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
288
            'service_origin': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
289
            'service_type': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
290
            'ui_visible': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
291
            'unit': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}),
292
            'uplimit': ('django.db.models.fields.BigIntegerField', [], {'default': '0'})
293
        },
294
        'im.service': {
295
            'Meta': {'object_name': 'Service'},
296
            'component': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.Component']"}),
297
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
298
            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
299
            'type': ('django.db.models.fields.CharField', [], {'max_length': '255'})
300
        },
301
        'im.sessioncatalog': {
302
            'Meta': {'object_name': 'SessionCatalog'},
303
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
304
            'session_key': ('django.db.models.fields.CharField', [], {'max_length': '40'}),
305
            'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'sessions'", 'null': 'True', 'to': "orm['im.AstakosUser']"})
306
        },
307
        'im.usersetting': {
308
            'Meta': {'unique_together': "(('user', 'setting'),)", 'object_name': 'UserSetting'},
309
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
310
            'setting': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
311
            'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.AstakosUser']"}),
312
            'value': ('django.db.models.fields.IntegerField', [], {})
313
        }
314
    }
315

  
316
    complete_apps = ['im']
317
    symmetrical = True
b/snf-astakos-app/astakos/im/migrations/0066_auto__chg_field_project_uuid.py
1
# -*- coding: utf-8 -*-
2
import datetime
3
from south.db import db
4
from south.v2 import SchemaMigration
5
from django.db import models
6

  
7

  
8
class Migration(SchemaMigration):
9

  
10
    def forwards(self, orm):
11

  
12
        # Changing field 'Project.uuid'
13
        db.alter_column('im_project', 'uuid', self.gf('django.db.models.fields.CharField')(default=None, unique=True, max_length=255))
14

  
15
    def backwards(self, orm):
16

  
17
        # Changing field 'Project.uuid'
18
        db.alter_column('im_project', 'uuid', self.gf('django.db.models.fields.CharField')(unique=True, max_length=255, null=True))
19

  
20
    models = {
21
        'auth.group': {
22
            'Meta': {'object_name': 'Group'},
23
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
24
            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
25
            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
26
        },
27
        'auth.permission': {
28
            'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
29
            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
30
            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
31
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
32
            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
33
        },
34
        'auth.user': {
35
            'Meta': {'object_name': 'User'},
36
            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
37
            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
38
            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
39
            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
40
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
41
            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
42
            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
43
            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
44
            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
45
            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
46
            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
47
            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
48
            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
49
        },
50
        'contenttypes.contenttype': {
51
            'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
52
            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
53
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
54
            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
55
            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
56
        },
57
        'im.additionalmail': {
58
            'Meta': {'object_name': 'AdditionalMail'},
59
            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75'}),
60
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
61
            'owner': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.AstakosUser']"})
62
        },
63
        'im.approvalterms': {
64
            'Meta': {'object_name': 'ApprovalTerms'},
65
            'date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'db_index': 'True', 'blank': 'True'}),
66
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
67
            'location': ('django.db.models.fields.CharField', [], {'max_length': '255'})
68
        },
69
        'im.astakosuser': {
70
            'Meta': {'object_name': 'AstakosUser', '_ormbases': ['auth.User']},
71
            'accepted_email': ('django.db.models.fields.EmailField', [], {'default': 'None', 'max_length': '75', 'null': 'True', 'blank': 'True'}),
72
            'accepted_policy': ('django.db.models.fields.CharField', [], {'default': 'None', 'max_length': '255', 'null': 'True', 'blank': 'True'}),
73
            'activation_sent': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
74
            'affiliation': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
75
            'auth_token': ('django.db.models.fields.CharField', [], {'max_length': '64', 'unique': 'True', 'null': 'True', 'blank': 'True'}),
76
            'auth_token_created': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
77
            'auth_token_expires': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
78
            'date_signed_terms': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
79
            'deactivated_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
80
            'deactivated_reason': ('django.db.models.fields.TextField', [], {'default': 'None', 'null': 'True'}),
81
            'disturbed_quota': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
82
            'email_verified': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
83
            'has_credits': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
84
            'has_signed_terms': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
85
            'invitations': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
86
            'is_rejected': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
87
            'is_verified': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
88
            'level': ('django.db.models.fields.IntegerField', [], {'default': '4'}),
89
            'moderated': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
90
            'moderated_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
91
            'moderated_data': ('django.db.models.fields.TextField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
92
            'policy': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['im.Resource']", 'null': 'True', 'through': "orm['im.AstakosUserQuota']", 'symmetrical': 'False'}),
93
            'rejected_reason': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
94
            'updated': ('django.db.models.fields.DateTimeField', [], {}),
95
            'user_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True', 'primary_key': 'True'}),
96
            'uuid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
97
            'verification_code': ('django.db.models.fields.CharField', [], {'max_length': '255', 'unique': 'True', 'null': 'True'}),
98
            'verified_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'})
99
        },
100
        'im.astakosuserauthprovider': {
101
            'Meta': {'ordering': "('module', 'created')", 'unique_together': "(('identifier', 'module', 'user'),)", 'object_name': 'AstakosUserAuthProvider'},
102
            'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
103
            'affiliation': ('django.db.models.fields.CharField', [], {'default': 'None', 'max_length': '255', 'null': 'True', 'blank': 'True'}),
104
            'auth_backend': ('django.db.models.fields.CharField', [], {'default': "'astakos'", 'max_length': '255'}),
105
            'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
106
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
107
            'identifier': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
108
            'info_data': ('django.db.models.fields.TextField', [], {'default': "''", 'null': 'True', 'blank': 'True'}),
109
            'module': ('django.db.models.fields.CharField', [], {'default': "'local'", 'max_length': '255'}),
110
            'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'auth_providers'", 'to': "orm['im.AstakosUser']"})
111
        },
112
        'im.astakosuserquota': {
113
            'Meta': {'unique_together': "(('resource', 'user'),)", 'object_name': 'AstakosUserQuota'},
114
            'capacity': ('django.db.models.fields.BigIntegerField', [], {}),
115
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
116
            'resource': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.Resource']"}),
117
            'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.AstakosUser']"})
118
        },
119
        'im.authproviderpolicyprofile': {
120
            'Meta': {'ordering': "['priority']", 'object_name': 'AuthProviderPolicyProfile'},
121
            'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
122
            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'authpolicy_profiles'", 'symmetrical': 'False', 'to': "orm['auth.Group']"}),
123
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
124
            'is_exclusive': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
125
            'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
126
            'policy_add': ('django.db.models.fields.NullBooleanField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
127
            'policy_automoderate': ('django.db.models.fields.NullBooleanField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
128
            'policy_create': ('django.db.models.fields.NullBooleanField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
129
            'policy_limit': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True'}),
130
            'policy_login': ('django.db.models.fields.NullBooleanField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
131
            'policy_remove': ('django.db.models.fields.NullBooleanField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
132
            'policy_required': ('django.db.models.fields.NullBooleanField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
133
            'policy_switch': ('django.db.models.fields.NullBooleanField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
134
            'priority': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
135
            'provider': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
136
            'users': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'authpolicy_profiles'", 'symmetrical': 'False', 'to': "orm['im.AstakosUser']"})
137
        },
138
        'im.chain': {
139
            'Meta': {'object_name': 'Chain'},
140
            'chain': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
141
        },
142
        'im.component': {
143
            'Meta': {'object_name': 'Component'},
144
            'auth_token': ('django.db.models.fields.CharField', [], {'max_length': '64', 'unique': 'True', 'null': 'True', 'blank': 'True'}),
145
            'auth_token_created': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
146
            'auth_token_expires': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
147
            'base_url': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}),
148
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
149
            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255', 'db_index': 'True'}),
150
            'url': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'})
151
        },
152
        'im.emailchange': {
153
            'Meta': {'object_name': 'EmailChange'},
154
            'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '40', 'db_index': 'True'}),
155
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
156
            'new_email_address': ('django.db.models.fields.EmailField', [], {'max_length': '75'}),
157
            'requested_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
158
            'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'emailchanges'", 'unique': 'True', 'to': "orm['im.AstakosUser']"})
159
        },
160
        'im.endpoint': {
161
            'Meta': {'object_name': 'Endpoint'},
162
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
163
            'service': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'endpoints'", 'to': "orm['im.Service']"})
164
        },
165
        'im.endpointdata': {
166
            'Meta': {'unique_together': "(('endpoint', 'key'),)", 'object_name': 'EndpointData'},
167
            'endpoint': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'data'", 'to': "orm['im.Endpoint']"}),
168
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
169
            'key': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
170
            'value': ('django.db.models.fields.CharField', [], {'max_length': '1024'})
171
        },
172
        'im.invitation': {
173
            'Meta': {'object_name': 'Invitation'},
174
            'code': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
175
            'consumed': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
176
            'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
177
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
178
            'inviter': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'invitations_sent'", 'null': 'True', 'to': "orm['im.AstakosUser']"}),
179
            'is_consumed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
180
            'realname': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
181
            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'})
182
        },
183
        'im.pendingthirdpartyuser': {
184
            'Meta': {'unique_together': "(('provider', 'third_party_identifier'),)", 'object_name': 'PendingThirdPartyUser'},
185
            'affiliation': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
186
            'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'blank': 'True'}),
187
            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),
188
            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}),
189
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
190
            'info': ('django.db.models.fields.TextField', [], {'default': "''", 'null': 'True', 'blank': 'True'}),
191
            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}),
192
            'provider': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
193
            'third_party_identifier': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
194
            'token': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
195
            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
196
        },
197
        'im.project': {
198
            'Meta': {'object_name': 'Project'},
199
            'application': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'project'", 'unique': 'True', 'to': "orm['im.ProjectApplication']"}),
200
            'creation_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
201
            'id': ('django.db.models.fields.BigIntegerField', [], {'primary_key': 'True', 'db_column': "'id'"}),
202
            'members': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['im.AstakosUser']", 'through': "orm['im.ProjectMembership']", 'symmetrical': 'False'}),
203
            'name': ('django.db.models.fields.CharField', [], {'max_length': '80', 'unique': 'True', 'null': 'True', 'db_index': 'True'}),
204
            'state': ('django.db.models.fields.IntegerField', [], {'default': '1', 'db_index': 'True'}),
205
            'uuid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'})
206
        },
207
        'im.projectapplication': {
208
            'Meta': {'unique_together': "(('chain', 'id'),)", 'object_name': 'ProjectApplication'},
209
            'applicant': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'projects_applied'", 'to': "orm['im.AstakosUser']"}),
210
            'chain': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'chained_apps'", 'db_column': "'chain'", 'to': "orm['im.Project']"}),
211
            'comments': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
212
            'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
213
            'end_date': ('django.db.models.fields.DateTimeField', [], {}),
214
            'homepage': ('django.db.models.fields.URLField', [], {'max_length': '255', 'null': 'True'}),
215
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
216
            'issue_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
217
            'limit_on_members_number': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True'}),
218
            'member_join_policy': ('django.db.models.fields.IntegerField', [], {}),
219
            'member_leave_policy': ('django.db.models.fields.IntegerField', [], {}),
220
            'name': ('django.db.models.fields.CharField', [], {'max_length': '80'}),
221
            'owner': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'projects_owned'", 'to': "orm['im.AstakosUser']"}),
222
            'private': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
223
            'resource_grants': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['im.Resource']", 'null': 'True', 'through': "orm['im.ProjectResourceGrant']", 'blank': 'True'}),
224
            'response': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
225
            'response_actor': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'responded_apps'", 'null': 'True', 'to': "orm['im.AstakosUser']"}),
226
            'response_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
227
            'start_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
228
            'state': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
229
            'waive_actor': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'waived_apps'", 'null': 'True', 'to': "orm['im.AstakosUser']"}),
230
            'waive_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
231
            'waive_reason': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'})
232
        },
233
        'im.projectlock': {
234
            'Meta': {'object_name': 'ProjectLock'},
235
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
236
        },
237
        'im.projectlog': {
238
            'Meta': {'object_name': 'ProjectLog'},
239
            'actor': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.AstakosUser']", 'null': 'True'}),
240
            'comments': ('django.db.models.fields.TextField', [], {'null': 'True'}),
241
            'date': ('django.db.models.fields.DateTimeField', [], {}),
242
            'from_state': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
243
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
244
            'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'log'", 'to': "orm['im.Project']"}),
245
            'reason': ('django.db.models.fields.TextField', [], {'null': 'True'}),
246
            'to_state': ('django.db.models.fields.IntegerField', [], {})
247
        },
248
        'im.projectmembership': {
249
            'Meta': {'unique_together': "(('person', 'project'),)", 'object_name': 'ProjectMembership'},
250
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
251
            'person': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.AstakosUser']"}),
252
            'project': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.Project']"}),
253
            'state': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'})
254
        },
255
        'im.projectmembershiplog': {
256
            'Meta': {'object_name': 'ProjectMembershipLog'},
257
            'actor': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.AstakosUser']", 'null': 'True'}),
258
            'comments': ('django.db.models.fields.TextField', [], {'null': 'True'}),
259
            'date': ('django.db.models.fields.DateTimeField', [], {}),
260
            'from_state': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
261
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
262
            'membership': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'log'", 'to': "orm['im.ProjectMembership']"}),
263
            'reason': ('django.db.models.fields.TextField', [], {'null': 'True'}),
264
            'to_state': ('django.db.models.fields.IntegerField', [], {})
265
        },
266
        'im.projectresourcegrant': {
267
            'Meta': {'unique_together': "(('resource', 'project_application'),)", 'object_name': 'ProjectResourceGrant'},
268
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
269
            'member_capacity': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}),
270
            'project_application': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.ProjectApplication']", 'null': 'True'}),
271
            'project_capacity': ('django.db.models.fields.BigIntegerField', [], {'null': 'True'}),
272
            'resource': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.Resource']"})
273
        },
274
        'im.resource': {
275
            'Meta': {'object_name': 'Resource'},
276
            'api_visible': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
277
            'desc': ('django.db.models.fields.TextField', [], {'null': 'True'}),
278
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
279
            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
280
            'service_origin': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
281
            'service_type': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
282
            'ui_visible': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
283
            'unit': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}),
284
            'uplimit': ('django.db.models.fields.BigIntegerField', [], {'default': '0'})
285
        },
286
        'im.service': {
287
            'Meta': {'object_name': 'Service'},
288
            'component': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.Component']"}),
289
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
290
            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
291
            'type': ('django.db.models.fields.CharField', [], {'max_length': '255'})
292
        },
293
        'im.sessioncatalog': {
294
            'Meta': {'object_name': 'SessionCatalog'},
295
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
296
            'session_key': ('django.db.models.fields.CharField', [], {'max_length': '40'}),
297
            'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'sessions'", 'null': 'True', 'to': "orm['im.AstakosUser']"})
298
        },
299
        'im.usersetting': {
300
            'Meta': {'unique_together': "(('user', 'setting'),)", 'object_name': 'UserSetting'},
301
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
302
            'setting': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
303
            'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.AstakosUser']"}),
304
            'value': ('django.db.models.fields.IntegerField', [], {})
305
        }
306
    }
307

  
308
    complete_apps = ['im']
b/snf-astakos-app/astakos/im/models.py
1585 1585

  
1586 1586
    state = models.IntegerField(default=NORMAL,
1587 1587
                                db_index=True)
1588
    uuid = models.CharField(max_length=255, unique=True)
1588 1589

  
1589 1590
    objects = ProjectManager()
1590 1591

  
......
1766 1767
        return [m.person for m in self.approved_memberships]
1767 1768

  
1768 1769

  
1770
def create_project(**kwargs):
1771
    if "uuid" not in kwargs:
1772
        kwargs["uuid"] = str(uuid.uuid4())
1773
    return Project.objects.create(**kwargs)
1774

  
1775

  
1769 1776
class ProjectLogManager(models.Manager):
1770 1777
    def last_deactivations(self, projects):
1771 1778
        logs = self.filter(

Also available in: Unified diff