Revision 670de92a

b/snf-astakos-app/README
81 81
ASTAKOS_LOGGING_LEVEL               INFO                                                                            Message logging severity
82 82
ASTAKOS_QUOTA_HOLDER_URL            ''                                                                              The quota holder URI
83 83
                                                                                                                    e.g. ``http://localhost:8080/api/quotaholder/v``
84
ASTAKOS_SERVICES                    {'cyclades': {'url':'https://node1.example.com/ui/', 'quota': {'vm': 2}},       Cloud service default url and quota      
85
                                    'pithos+':  {'url':'https://node2.example.com/ui/', 'quota': {                  
86
                                    'diskspace': 50 * 1024 * 1024 * 1024}}})                                        
84 87
AQUARIUM_URL                        ''                                                                              The billing (aquarium) URI
85 88
                                                                                                                    e.g. ``http://localhost:8888/user``
86 89
=================================== =============================================================================   ===========================================================================================
b/snf-astakos-app/astakos/im/endpoints/quotaholder.py
84 84
    data = []
85 85
    append = data.append
86 86
    for user in users:
87
        for resource, limit in user.quota.iteritems():
87
        for resource, uplimit in user.quota.iteritems():
88 88
            key = ENTITY_KEY
89 89
            quantity = None
90
            capacity = limit
90
            capacity = uplimit
91 91
            import_limit = None
92 92
            export_limit = None
93 93
            flags = 0
b/snf-astakos-app/astakos/im/management/commands/service_list.py
62 62
            self.stdout.write(sep + '\n')
63 63

  
64 64
        for service in services:
65
            fields = (str(service.id), service.name, service.url,
66
                      service.auth_token,
65
            fields = (str(service.id), service.name,
66
                      service.url,
67
                      service.auth_token or '',
67 68
                      service.icon)
68 69

  
69 70
            if options['csv']:
b/snf-astakos-app/astakos/im/migrations/0017_populate_resource_data.py
2 2

  
3 3
from south.v2 import DataMigration
4 4

  
5
d = {
6
    'cyclades': {'vm': 2},
7
    'pithos+': {'diskspace': 50 * 1024 * 1024 * 1024} # 5 GB
8
}
9

  
10

  
11 5
class Migration(DataMigration):
12 6

  
13 7
    def forwards(self, orm):
14
        "Write your forwards methods here."
15

  
16
        try:
17
            default = orm.AstakosGroup.objects.get(name='default')
18
        except orm.AstakosGroup.DoesNotExist:
19
            return
20

  
21
        def create_policies(args):
22
            sn, policy = args
23
            s, created = orm.Service.objects.get_or_create(name=sn)
24

  
25
            for rn, l in policy.iteritems():
26
                try:
27
                    r, created = orm.Resource.objects.get_or_create(
28
                        service=s,
29
                        name=rn
30
                    )
31
                except Exception, e:
32
                    print "Cannot create policy ", policy
33
                    continue
34

  
35
                q, created = orm.AstakosGroupQuota.objects.get_or_create(
36
                    group=default,
37
                    resource=r,
38
                    limit=l
39
                )
40
        map(create_policies, d.iteritems())
41

  
8
        "Obsolete migration."
9
        return
10
    
42 11
    def backwards(self, orm):
43
        try:
44
            default = orm.AstakosGroup.objects.get(name='default')
45
        except orm.AstakosGroup.DoesNotExist:
46
            return
47

  
48
        def destroy_policies(args):
49
            sn, policy = args
50
            for rn, l in policy.iteritems():
51
                try:
52
                    q = orm.AstakosGroupQuota.objects.get(
53
                        group=default,
54
                        resource__name=rn
55
                    )
56
                    if q.limit == l:
57
                        q.delete()
58
                except orm.AstakosGroupQuota.DoesNotExist:
59
                    continue
60

  
61
        map(destroy_policies, d.iteritems())
62

  
12
        "Obsolete migration."
13
        return
14
    
63 15
    models = {
64 16
        'auth.group': {
65 17
            'Meta': {'object_name': 'Group'},
/dev/null
1
# encoding: 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
class Migration(SchemaMigration):
8

  
9
    def forwards(self, orm):
10
        db.alter_column('im.astakosgroupquota', 'limit', models.BigIntegerField())
11
        db.alter_column('im.astakosuserquota', 'limit', models.BigIntegerField())
12

  
13

  
14
    def backwards(self, orm):
15
        pass
16

  
17

  
18
    models = {
19
        'auth.group': {
20
            'Meta': {'object_name': 'Group'},
21
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
22
            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
23
            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
24
        },
25
        'auth.permission': {
26
            'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
27
            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
28
            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
29
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
30
            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
31
        },
32
        'auth.user': {
33
            'Meta': {'object_name': 'User'},
34
            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
35
            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
36
            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
37
            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
38
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
39
            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
40
            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
41
            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
42
            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
43
            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
44
            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
45
            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
46
            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
47
        },
48
        'contenttypes.contenttype': {
49
            'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
50
            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
51
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
52
            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
53
            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
54
        },
55
        'im.additionalmail': {
56
            'Meta': {'object_name': 'AdditionalMail'},
57
            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75'}),
58
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
59
            'owner': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.AstakosUser']"})
60
        },
61
        'im.approvalterms': {
62
            'Meta': {'object_name': 'ApprovalTerms'},
63
            'date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2012, 9, 18, 11, 20, 5, 795917)', 'db_index': 'True'}),
64
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
65
            'location': ('django.db.models.fields.CharField', [], {'max_length': '255'})
66
        },
67
        'im.astakosgroup': {
68
            'Meta': {'object_name': 'AstakosGroup', '_ormbases': ['auth.Group']},
69
            'approval_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
70
            'creation_date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2012, 9, 18, 11, 20, 5, 790126)'}),
71
            'desc': ('django.db.models.fields.TextField', [], {'null': 'True'}),
72
            'estimated_participants': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True'}),
73
            'expiration_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
74
            'group_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.Group']", 'unique': 'True', 'primary_key': 'True'}),
75
            'homepage': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
76
            'issue_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
77
            'kind': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.GroupKind']"}),
78
            'moderation_enabled': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
79
            'policy': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['im.Resource']", 'null': 'True', 'through': "orm['im.AstakosGroupQuota']", 'blank': 'True'})
80
        },
81
        'im.astakosgroupquota': {
82
            'Meta': {'unique_together': "(('resource', 'group'),)", 'object_name': 'AstakosGroupQuota'},
83
            'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.AstakosGroup']", 'blank': 'True'}),
84
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
85
            'limit': ('django.db.models.fields.PositiveIntegerField', [], {}),
86
            'resource': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.Resource']"})
87
        },
88
        'im.astakosuser': {
89
            'Meta': {'unique_together': "(('provider', 'third_party_identifier'),)", 'object_name': 'AstakosUser', '_ormbases': ['auth.User']},
90
            'activation_sent': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
91
            'affiliation': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
92
            'astakos_groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['im.AstakosGroup']", 'symmetrical': 'False', 'through': "orm['im.Membership']", 'blank': 'True'}),
93
            'auth_token': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
94
            'auth_token_created': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
95
            'auth_token_expires': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
96
            'date_signed_terms': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
97
            'email_verified': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
98
            'has_credits': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
99
            'has_signed_terms': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
100
            'invitations': ('django.db.models.fields.IntegerField', [], {'default': '100'}),
101
            'is_verified': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
102
            'level': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
103
            'owner': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'owner'", 'null': 'True', 'to': "orm['im.AstakosGroup']"}),
104
            'policy': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['im.Resource']", 'null': 'True', 'through': "orm['im.AstakosUserQuota']", 'symmetrical': 'False'}),
105
            'provider': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
106
            'third_party_identifier': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
107
            'updated': ('django.db.models.fields.DateTimeField', [], {}),
108
            'user_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True', 'primary_key': 'True'})
109
        },
110
        'im.astakosuserquota': {
111
            'Meta': {'unique_together': "(('resource', 'user'),)", 'object_name': 'AstakosUserQuota'},
112
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
113
            'limit': ('django.db.models.fields.PositiveIntegerField', [], {}),
114
            'resource': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.Resource']"}),
115
            'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.AstakosUser']"})
116
        },
117
        'im.emailchange': {
118
            'Meta': {'object_name': 'EmailChange'},
119
            'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '40', 'db_index': 'True'}),
120
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
121
            'new_email_address': ('django.db.models.fields.EmailField', [], {'max_length': '75'}),
122
            'requested_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2012, 9, 18, 11, 20, 5, 797455)'}),
123
            'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'emailchange_user'", 'unique': 'True', 'to': "orm['im.AstakosUser']"})
124
        },
125
        'im.groupkind': {
126
            'Meta': {'object_name': 'GroupKind'},
127
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
128
            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255', 'db_index': 'True'})
129
        },
130
        'im.invitation': {
131
            'Meta': {'object_name': 'Invitation'},
132
            'code': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
133
            'consumed': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
134
            'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
135
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
136
            'inviter': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'invitations_sent'", 'null': 'True', 'to': "orm['im.AstakosUser']"}),
137
            'is_consumed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
138
            'realname': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
139
            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'})
140
        },
141
        'im.membership': {
142
            'Meta': {'unique_together': "(('person', 'group'),)", 'object_name': 'Membership'},
143
            'date_joined': ('django.db.models.fields.DateField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
144
            'date_requested': ('django.db.models.fields.DateField', [], {'default': 'datetime.datetime(2012, 9, 18, 11, 20, 5, 793914)', 'blank': 'True'}),
145
            'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.AstakosGroup']"}),
146
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
147
            'person': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.AstakosUser']"})
148
        },
149
        'im.resource': {
150
            'Meta': {'object_name': 'Resource'},
151
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
152
            'meta': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['im.ResourceMetadata']", 'symmetrical': 'False'}),
153
            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255', 'db_index': 'True'}),
154
            'service': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.Service']"})
155
        },
156
        'im.resourcemetadata': {
157
            'Meta': {'object_name': 'ResourceMetadata'},
158
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
159
            'key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255', 'db_index': 'True'}),
160
            'value': ('django.db.models.fields.CharField', [], {'max_length': '255'})
161
        },
162
        'im.service': {
163
            'Meta': {'object_name': 'Service'},
164
            'auth_token': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
165
            'auth_token_created': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
166
            'auth_token_expires': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
167
            'icon': ('django.db.models.fields.FilePathField', [], {'max_length': '100', 'blank': 'True'}),
168
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
169
            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255', 'db_index': 'True'}),
170
            'url': ('django.db.models.fields.FilePathField', [], {'max_length': '100'})
171
        }
172
    }
173

  
174
    complete_apps = ['im']
b/snf-astakos-app/astakos/im/migrations/0020_auto__chg_field_astakosgroup_homepage.py
1
# encoding: 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
class Migration(SchemaMigration):
8

  
9
    def forwards(self, orm):
10
        
11
        # Changing field 'AstakosGroup.homepage'
12
        db.alter_column('im_astakosgroup', 'homepage', self.gf('django.db.models.fields.URLField')(max_length=255, null=True))
13

  
14

  
15
    def backwards(self, orm):
16
        
17
        # Changing field 'AstakosGroup.homepage'
18
        db.alter_column('im_astakosgroup', 'homepage', self.gf('django.db.models.fields.CharField')(max_length=255, null=True))
19

  
20

  
21
    models = {
22
        'auth.group': {
23
            'Meta': {'object_name': 'Group'},
24
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
25
            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
26
            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
27
        },
28
        'auth.permission': {
29
            'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
30
            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
31
            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
32
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
33
            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
34
        },
35
        'auth.user': {
36
            'Meta': {'object_name': 'User'},
37
            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
38
            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
39
            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
40
            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
41
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
42
            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
43
            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
44
            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
45
            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
46
            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
47
            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
48
            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
49
            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
50
        },
51
        'contenttypes.contenttype': {
52
            'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
53
            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
54
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
55
            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
56
            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
57
        },
58
        'im.additionalmail': {
59
            'Meta': {'object_name': 'AdditionalMail'},
60
            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75'}),
61
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
62
            'owner': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.AstakosUser']"})
63
        },
64
        'im.approvalterms': {
65
            'Meta': {'object_name': 'ApprovalTerms'},
66
            'date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2012, 9, 18, 14, 54, 13, 70454)', 'db_index': 'True'}),
67
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
68
            'location': ('django.db.models.fields.CharField', [], {'max_length': '255'})
69
        },
70
        'im.astakosgroup': {
71
            'Meta': {'object_name': 'AstakosGroup', '_ormbases': ['auth.Group']},
72
            'approval_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
73
            'creation_date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2012, 9, 18, 14, 54, 13, 64622)'}),
74
            'desc': ('django.db.models.fields.TextField', [], {'null': 'True'}),
75
            'estimated_participants': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True'}),
76
            'expiration_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
77
            'group_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.Group']", 'unique': 'True', 'primary_key': 'True'}),
78
            'homepage': ('django.db.models.fields.URLField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
79
            'issue_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
80
            'kind': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.GroupKind']"}),
81
            'moderation_enabled': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
82
            'policy': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['im.Resource']", 'null': 'True', 'through': "orm['im.AstakosGroupQuota']", 'blank': 'True'})
83
        },
84
        'im.astakosgroupquota': {
85
            'Meta': {'unique_together': "(('resource', 'group'),)", 'object_name': 'AstakosGroupQuota'},
86
            'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.AstakosGroup']", 'blank': 'True'}),
87
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
88
            'limit': ('django.db.models.fields.PositiveIntegerField', [], {}),
89
            'resource': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.Resource']"})
90
        },
91
        'im.astakosuser': {
92
            'Meta': {'unique_together': "(('provider', 'third_party_identifier'),)", 'object_name': 'AstakosUser', '_ormbases': ['auth.User']},
93
            'activation_sent': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
94
            'affiliation': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
95
            'astakos_groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['im.AstakosGroup']", 'symmetrical': 'False', 'through': "orm['im.Membership']", 'blank': 'True'}),
96
            'auth_token': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
97
            'auth_token_created': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
98
            'auth_token_expires': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
99
            'date_signed_terms': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
100
            'email_verified': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
101
            'has_credits': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
102
            'has_signed_terms': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
103
            'invitations': ('django.db.models.fields.IntegerField', [], {'default': '100'}),
104
            'is_verified': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
105
            'level': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
106
            'owner': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'owner'", 'null': 'True', 'to': "orm['im.AstakosGroup']"}),
107
            'policy': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['im.Resource']", 'null': 'True', 'through': "orm['im.AstakosUserQuota']", 'symmetrical': 'False'}),
108
            'provider': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
109
            'third_party_identifier': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
110
            'updated': ('django.db.models.fields.DateTimeField', [], {}),
111
            'user_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True', 'primary_key': 'True'})
112
        },
113
        'im.astakosuserquota': {
114
            'Meta': {'unique_together': "(('resource', 'user'),)", 'object_name': 'AstakosUserQuota'},
115
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
116
            'limit': ('django.db.models.fields.PositiveIntegerField', [], {}),
117
            'resource': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.Resource']"}),
118
            'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.AstakosUser']"})
119
        },
120
        'im.emailchange': {
121
            'Meta': {'object_name': 'EmailChange'},
122
            'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '40', 'db_index': 'True'}),
123
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
124
            'new_email_address': ('django.db.models.fields.EmailField', [], {'max_length': '75'}),
125
            'requested_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2012, 9, 18, 14, 54, 13, 72050)'}),
126
            'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'emailchange_user'", 'unique': 'True', 'to': "orm['im.AstakosUser']"})
127
        },
128
        'im.groupkind': {
129
            'Meta': {'object_name': 'GroupKind'},
130
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
131
            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255', 'db_index': 'True'})
132
        },
133
        'im.invitation': {
134
            'Meta': {'object_name': 'Invitation'},
135
            'code': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
136
            'consumed': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
137
            'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
138
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
139
            'inviter': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'invitations_sent'", 'null': 'True', 'to': "orm['im.AstakosUser']"}),
140
            'is_consumed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
141
            'realname': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
142
            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'})
143
        },
144
        'im.membership': {
145
            'Meta': {'unique_together': "(('person', 'group'),)", 'object_name': 'Membership'},
146
            'date_joined': ('django.db.models.fields.DateField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
147
            'date_requested': ('django.db.models.fields.DateField', [], {'default': 'datetime.datetime(2012, 9, 18, 14, 54, 13, 68464)', 'blank': 'True'}),
148
            'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.AstakosGroup']"}),
149
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
150
            'person': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.AstakosUser']"})
151
        },
152
        'im.resource': {
153
            'Meta': {'object_name': 'Resource'},
154
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
155
            'meta': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['im.ResourceMetadata']", 'symmetrical': 'False'}),
156
            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255', 'db_index': 'True'}),
157
            'service': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.Service']"})
158
        },
159
        'im.resourcemetadata': {
160
            'Meta': {'object_name': 'ResourceMetadata'},
161
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
162
            'key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255', 'db_index': 'True'}),
163
            'value': ('django.db.models.fields.CharField', [], {'max_length': '255'})
164
        },
165
        'im.service': {
166
            'Meta': {'object_name': 'Service'},
167
            'auth_token': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
168
            'auth_token_created': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
169
            'auth_token_expires': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
170
            'icon': ('django.db.models.fields.FilePathField', [], {'max_length': '100', 'blank': 'True'}),
171
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
172
            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255', 'db_index': 'True'}),
173
            'url': ('django.db.models.fields.FilePathField', [], {'max_length': '100'})
174
        }
175
    }
176

  
177
    complete_apps = ['im']
b/snf-astakos-app/astakos/im/migrations/0021_auto__add_field_astakosgroupquota_uplimit__add_field_astakosuserquota_.py
1
# encoding: 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
class Migration(SchemaMigration):
8

  
9
    def forwards(self, orm):
10
        
11
        # Adding field 'AstakosGroupQuota.uplimit'
12
        db.add_column('im_astakosgroupquota', 'uplimit', self.gf('django.db.models.fields.BigIntegerField')(null=True), keep_default=False)
13

  
14
        # Adding field 'AstakosUserQuota.uplimit'
15
        db.add_column('im_astakosuserquota', 'uplimit', self.gf('django.db.models.fields.BigIntegerField')(null=True), keep_default=False)
16

  
17

  
18
    def backwards(self, orm):
19
        
20
        # Deleting field 'AstakosGroupQuota.uplimit'
21
        db.delete_column('im_astakosgroupquota', 'uplimit')
22

  
23
        # Deleting field 'AstakosUserQuota.uplimit'
24
        db.delete_column('im_astakosuserquota', 'uplimit')
25

  
26

  
27
    models = {
28
        'auth.group': {
29
            'Meta': {'object_name': 'Group'},
30
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
31
            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
32
            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
33
        },
34
        'auth.permission': {
35
            'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
36
            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
37
            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
38
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
39
            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
40
        },
41
        'auth.user': {
42
            'Meta': {'object_name': 'User'},
43
            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
44
            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
45
            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
46
            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
47
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
48
            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
49
            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
50
            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
51
            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
52
            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
53
            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
54
            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
55
            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
56
        },
57
        'contenttypes.contenttype': {
58
            'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
59
            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
60
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
61
            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
62
            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
63
        },
64
        'im.additionalmail': {
65
            'Meta': {'object_name': 'AdditionalMail'},
66
            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75'}),
67
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
68
            'owner': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.AstakosUser']"})
69
        },
70
        'im.approvalterms': {
71
            'Meta': {'object_name': 'ApprovalTerms'},
72
            'date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2012, 9, 18, 14, 54, 24, 940454)', 'db_index': 'True'}),
73
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
74
            'location': ('django.db.models.fields.CharField', [], {'max_length': '255'})
75
        },
76
        'im.astakosgroup': {
77
            'Meta': {'object_name': 'AstakosGroup', '_ormbases': ['auth.Group']},
78
            'approval_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
79
            'creation_date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2012, 9, 18, 14, 54, 24, 934376)'}),
80
            'desc': ('django.db.models.fields.TextField', [], {'null': 'True'}),
81
            'estimated_participants': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True'}),
82
            'expiration_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
83
            'group_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.Group']", 'unique': 'True', 'primary_key': 'True'}),
84
            'homepage': ('django.db.models.fields.URLField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
85
            'issue_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
86
            'kind': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.GroupKind']"}),
87
            'moderation_enabled': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
88
            'policy': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['im.Resource']", 'null': 'True', 'through': "orm['im.AstakosGroupQuota']", 'blank': 'True'})
89
        },
90
        'im.astakosgroupquota': {
91
            'Meta': {'unique_together': "(('resource', 'group'),)", 'object_name': 'AstakosGroupQuota'},
92
            'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.AstakosGroup']", 'blank': 'True'}),
93
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
94
            'limit': ('django.db.models.fields.PositiveIntegerField', [], {}),
95
            'resource': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.Resource']"}),
96
            'uplimit': ('django.db.models.fields.BigIntegerField', [], {'null': 'True'})
97
        },
98
        'im.astakosuser': {
99
            'Meta': {'unique_together': "(('provider', 'third_party_identifier'),)", 'object_name': 'AstakosUser', '_ormbases': ['auth.User']},
100
            'activation_sent': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
101
            'affiliation': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
102
            'astakos_groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['im.AstakosGroup']", 'symmetrical': 'False', 'through': "orm['im.Membership']", 'blank': 'True'}),
103
            'auth_token': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
104
            'auth_token_created': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
105
            'auth_token_expires': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
106
            'date_signed_terms': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
107
            'email_verified': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
108
            'has_credits': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
109
            'has_signed_terms': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
110
            'invitations': ('django.db.models.fields.IntegerField', [], {'default': '100'}),
111
            'is_verified': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
112
            'level': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
113
            'owner': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'owner'", 'null': 'True', 'to': "orm['im.AstakosGroup']"}),
114
            'policy': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['im.Resource']", 'null': 'True', 'through': "orm['im.AstakosUserQuota']", 'symmetrical': 'False'}),
115
            'provider': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
116
            'third_party_identifier': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
117
            'updated': ('django.db.models.fields.DateTimeField', [], {}),
118
            'user_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True', 'primary_key': 'True'})
119
        },
120
        'im.astakosuserquota': {
121
            'Meta': {'unique_together': "(('resource', 'user'),)", 'object_name': 'AstakosUserQuota'},
122
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
123
            'limit': ('django.db.models.fields.PositiveIntegerField', [], {}),
124
            'resource': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.Resource']"}),
125
            'uplimit': ('django.db.models.fields.BigIntegerField', [], {'null': 'True'}),
126
            'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.AstakosUser']"})
127
        },
128
        'im.emailchange': {
129
            'Meta': {'object_name': 'EmailChange'},
130
            'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '40', 'db_index': 'True'}),
131
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
132
            'new_email_address': ('django.db.models.fields.EmailField', [], {'max_length': '75'}),
133
            'requested_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2012, 9, 18, 14, 54, 24, 942004)'}),
134
            'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'emailchange_user'", 'unique': 'True', 'to': "orm['im.AstakosUser']"})
135
        },
136
        'im.groupkind': {
137
            'Meta': {'object_name': 'GroupKind'},
138
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
139
            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255', 'db_index': 'True'})
140
        },
141
        'im.invitation': {
142
            'Meta': {'object_name': 'Invitation'},
143
            'code': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
144
            'consumed': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
145
            'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
146
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
147
            'inviter': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'invitations_sent'", 'null': 'True', 'to': "orm['im.AstakosUser']"}),
148
            'is_consumed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
149
            'realname': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
150
            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'})
151
        },
152
        'im.membership': {
153
            'Meta': {'unique_together': "(('person', 'group'),)", 'object_name': 'Membership'},
154
            'date_joined': ('django.db.models.fields.DateField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
155
            'date_requested': ('django.db.models.fields.DateField', [], {'default': 'datetime.datetime(2012, 9, 18, 14, 54, 24, 938314)', 'blank': 'True'}),
156
            'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.AstakosGroup']"}),
157
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
158
            'person': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.AstakosUser']"})
159
        },
160
        'im.resource': {
161
            'Meta': {'object_name': 'Resource'},
162
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
163
            'meta': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['im.ResourceMetadata']", 'symmetrical': 'False'}),
164
            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255', 'db_index': 'True'}),
165
            'service': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.Service']"})
166
        },
167
        'im.resourcemetadata': {
168
            'Meta': {'object_name': 'ResourceMetadata'},
169
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
170
            'key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255', 'db_index': 'True'}),
171
            'value': ('django.db.models.fields.CharField', [], {'max_length': '255'})
172
        },
173
        'im.service': {
174
            'Meta': {'object_name': 'Service'},
175
            'auth_token': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
176
            'auth_token_created': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
177
            'auth_token_expires': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
178
            'icon': ('django.db.models.fields.FilePathField', [], {'max_length': '100', 'blank': 'True'}),
179
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
180
            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255', 'db_index': 'True'}),
181
            'url': ('django.db.models.fields.FilePathField', [], {'max_length': '100'})
182
        }
183
    }
184

  
185
    complete_apps = ['im']
b/snf-astakos-app/astakos/im/migrations/0022_copy_limit_to_uplimit.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

  
7
class Migration(DataMigration):
8

  
9
    def forwards(self, orm):
10
        for q in orm.AstakosGroupQuota.objects.all():
11
            q.uplimit = q.limit
12
            q.save()
13
    
14
    def backwards(self, orm):
15
        return
16

  
17
    models = {
18
        'auth.group': {
19
            'Meta': {'object_name': 'Group'},
20
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
21
            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
22
            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
23
        },
24
        'auth.permission': {
25
            'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
26
            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
27
            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
28
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
29
            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
30
        },
31
        'auth.user': {
32
            'Meta': {'object_name': 'User'},
33
            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
34
            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
35
            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
36
            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
37
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
38
            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
39
            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
40
            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
41
            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
42
            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
43
            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
44
            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
45
            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
46
        },
47
        'contenttypes.contenttype': {
48
            'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
49
            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
50
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
51
            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
52
            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
53
        },
54
        'im.additionalmail': {
55
            'Meta': {'object_name': 'AdditionalMail'},
56
            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75'}),
57
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
58
            'owner': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.AstakosUser']"})
59
        },
60
        'im.approvalterms': {
61
            'Meta': {'object_name': 'ApprovalTerms'},
62
            'date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2012, 9, 18, 14, 56, 37, 729945)', 'db_index': 'True'}),
63
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
64
            'location': ('django.db.models.fields.CharField', [], {'max_length': '255'})
65
        },
66
        'im.astakosgroup': {
67
            'Meta': {'object_name': 'AstakosGroup', '_ormbases': ['auth.Group']},
68
            'approval_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
69
            'creation_date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2012, 9, 18, 14, 56, 37, 723535)'}),
70
            'desc': ('django.db.models.fields.TextField', [], {'null': 'True'}),
71
            'estimated_participants': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True'}),
72
            'expiration_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
73
            'group_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.Group']", 'unique': 'True', 'primary_key': 'True'}),
74
            'homepage': ('django.db.models.fields.URLField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
75
            'issue_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
76
            'kind': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.GroupKind']"}),
77
            'moderation_enabled': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
78
            'policy': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['im.Resource']", 'null': 'True', 'through': "orm['im.AstakosGroupQuota']", 'blank': 'True'})
79
        },
80
        'im.astakosgroupquota': {
81
            'Meta': {'unique_together': "(('resource', 'group'),)", 'object_name': 'AstakosGroupQuota'},
82
            'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.AstakosGroup']", 'blank': 'True'}),
83
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
84
            'limit': ('django.db.models.fields.PositiveIntegerField', [], {}),
85
            'resource': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.Resource']"}),
86
            'uplimit': ('django.db.models.fields.BigIntegerField', [], {'null': 'True'})
87
        },
88
        'im.astakosuser': {
89
            'Meta': {'unique_together': "(('provider', 'third_party_identifier'),)", 'object_name': 'AstakosUser', '_ormbases': ['auth.User']},
90
            'activation_sent': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
91
            'affiliation': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
92
            'astakos_groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['im.AstakosGroup']", 'symmetrical': 'False', 'through': "orm['im.Membership']", 'blank': 'True'}),
93
            'auth_token': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
94
            'auth_token_created': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
95
            'auth_token_expires': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
96
            'date_signed_terms': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
97
            'email_verified': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
98
            'has_credits': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
99
            'has_signed_terms': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
100
            'invitations': ('django.db.models.fields.IntegerField', [], {'default': '100'}),
101
            'is_verified': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
102
            'level': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
103
            'owner': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'owner'", 'null': 'True', 'to': "orm['im.AstakosGroup']"}),
104
            'policy': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['im.Resource']", 'null': 'True', 'through': "orm['im.AstakosUserQuota']", 'symmetrical': 'False'}),
105
            'provider': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
106
            'third_party_identifier': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
107
            'updated': ('django.db.models.fields.DateTimeField', [], {}),
108
            'user_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True', 'primary_key': 'True'})
109
        },
110
        'im.astakosuserquota': {
111
            'Meta': {'unique_together': "(('resource', 'user'),)", 'object_name': 'AstakosUserQuota'},
112
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
113
            'limit': ('django.db.models.fields.PositiveIntegerField', [], {}),
114
            'resource': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.Resource']"}),
115
            'uplimit': ('django.db.models.fields.BigIntegerField', [], {'null': 'True'}),
116
            'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.AstakosUser']"})
117
        },
118
        'im.emailchange': {
119
            'Meta': {'object_name': 'EmailChange'},
120
            'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '40', 'db_index': 'True'}),
121
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
122
            'new_email_address': ('django.db.models.fields.EmailField', [], {'max_length': '75'}),
123
            'requested_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2012, 9, 18, 14, 56, 37, 731491)'}),
124
            'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'emailchange_user'", 'unique': 'True', 'to': "orm['im.AstakosUser']"})
125
        },
126
        'im.groupkind': {
127
            'Meta': {'object_name': 'GroupKind'},
128
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
129
            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255', 'db_index': 'True'})
130
        },
131
        'im.invitation': {
132
            'Meta': {'object_name': 'Invitation'},
133
            'code': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
134
            'consumed': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
135
            'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
136
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
137
            'inviter': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'invitations_sent'", 'null': 'True', 'to': "orm['im.AstakosUser']"}),
138
            'is_consumed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
139
            'realname': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
140
            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'})
141
        },
142
        'im.membership': {
143
            'Meta': {'unique_together': "(('person', 'group'),)", 'object_name': 'Membership'},
144
            'date_joined': ('django.db.models.fields.DateField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
145
            'date_requested': ('django.db.models.fields.DateField', [], {'default': 'datetime.datetime(2012, 9, 18, 14, 56, 37, 727517)', 'blank': 'True'}),
146
            'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.AstakosGroup']"}),
147
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
148
            'person': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.AstakosUser']"})
149
        },
150
        'im.resource': {
151
            'Meta': {'object_name': 'Resource'},
152
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
153
            'meta': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['im.ResourceMetadata']", 'symmetrical': 'False'}),
154
            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255', 'db_index': 'True'}),
155
            'service': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.Service']"})
156
        },
157
        'im.resourcemetadata': {
158
            'Meta': {'object_name': 'ResourceMetadata'},
159
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
160
            'key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255', 'db_index': 'True'}),
161
            'value': ('django.db.models.fields.CharField', [], {'max_length': '255'})
162
        },
163
        'im.service': {
164
            'Meta': {'object_name': 'Service'},
165
            'auth_token': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
166
            'auth_token_created': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
167
            'auth_token_expires': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
168
            'icon': ('django.db.models.fields.FilePathField', [], {'max_length': '100', 'blank': 'True'}),
169
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
170
            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255', 'db_index': 'True'}),
171
            'url': ('django.db.models.fields.FilePathField', [], {'max_length': '100'})
172
        }
173
    }
174

  
175
    complete_apps = ['im']
b/snf-astakos-app/astakos/im/migrations/0023_populate_resource_data.py
1
# encoding: utf-8
2

  
3
from south.v2 import DataMigration
4

  
5
from astakos.im.settings import SERVICES
6

  
7

  
8
class Migration(DataMigration):
9

  
10
    def forwards(self, orm):
11
        "Write your forwards methods here."
12

  
13
        try:
14
            default = orm.AstakosGroup.objects.get(name='default')
15
        except orm.AstakosGroup.DoesNotExist:
16
            return
17

  
18
        def create_policies(args):
19
            sn, dict = args
20
            url = dict.get('url') 
21
            policy = dict.get('quota') or ()
22
            s, created = orm.Service.objects.get_or_create(name=sn, url=url)
23
            if not created and not s.url:
24
                s.url = url
25
                s.save()
26

  
27
            for rn, l in policy.iteritems():
28
                try:
29
                    r, created = orm.Resource.objects.get_or_create(
30
                        service=s,
31
                        name=rn)
32
                except Exception, e:
33
                    print "Cannot create policy ", policy
34
                    continue
35

  
36
                q, created = orm.AstakosGroupQuota.objects.get_or_create(
37
                    group=default,
38
                    resource=r,
39
                    uplimit=l)
40
        map(create_policies, SERVICES.iteritems())
41

  
42
    def backwards(self, orm):
43
        try:
44
            default = orm.AstakosGroup.objects.get(name='default')
45
        except orm.AstakosGroup.DoesNotExist:
46
            return
47

  
48
        def destroy_policies(args):
49
            sn, dict = args
50
            url = dict.get('url') 
51
            policy = dict.get('quota') or ()
52
            for rn, l in policy.iteritems():
53
                try:
54
                    q = orm.AstakosGroupQuota.objects.get(
55
                        group=default,
56
                        resource__name=rn)
57
                    q.delete()
58
                except orm.AstakosGroupQuota.DoesNotExist:
59
                    continue
60
        
61
        map(destroy_policies, SERVICES.iteritems())
62
    
63
    models = {
64
        'auth.group': {
65
            'Meta': {'object_name': 'Group'},
66
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
67
            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
68
            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
69
        },
70
        'auth.permission': {
71
            'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
72
            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
73
            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
74
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
75
            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
76
        },
77
        'auth.user': {
78
            'Meta': {'object_name': 'User'},
79
            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
80
            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
81
            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
82
            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
83
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
84
            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
85
            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
86
            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
87
            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
88
            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
89
            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
90
            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
91
            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
92
        },
93
        'contenttypes.contenttype': {
94
            'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
95
            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
96
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
97
            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
98
            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
99
        },
100
        'im.additionalmail': {
101
            'Meta': {'object_name': 'AdditionalMail'},
102
            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75'}),
103
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
104
            'owner': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.AstakosUser']"})
105
        },
106
        'im.approvalterms': {
107
            'Meta': {'object_name': 'ApprovalTerms'},
108
            'date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2012, 8, 9, 11, 14, 9, 289091)', 'db_index': 'True'}),
109
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
110
            'location': ('django.db.models.fields.CharField', [], {'max_length': '255'})
111
        },
112
        'im.astakosgroup': {
113
            'Meta': {'object_name': 'AstakosGroup', '_ormbases': ['auth.Group']},
114
            'approval_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
115
            'creation_date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2012, 8, 9, 11, 14, 9, 283154)'}),
116
            'desc': ('django.db.models.fields.TextField', [], {'null': 'True'}),
117
            'estimated_participants': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True'}),
118
            'expiration_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
119
            'group_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.Group']", 'unique': 'True', 'primary_key': 'True'}),
120
            'issue_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
121
            'kind': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.GroupKind']"}),
122
            'moderation_enabled': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
123
            'policy': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['im.Resource']", 'null': 'True', 'through': "orm['im.AstakosGroupQuota']", 'blank': 'True'})
124
        },
125
        'im.astakosgroupquota': {
126
            'Meta': {'unique_together': "(('resource', 'group'),)", 'object_name': 'AstakosGroupQuota'},
127
            'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.AstakosGroup']", 'blank': 'True'}),
128
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
129
            'limit': ('django.db.models.fields.PositiveIntegerField', [], {}),
130
            'resource': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.Resource']"}),
131
            'uplimit': ('django.db.models.fields.BigIntegerField', [], {'null': 'True'})
132
        },
133
        'im.astakosuser': {
134
            'Meta': {'unique_together': "(('provider', 'third_party_identifier'),)", 'object_name': 'AstakosUser', '_ormbases': ['auth.User']},
135
            'activation_sent': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
136
            'affiliation': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
137
            'astakos_groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['im.AstakosGroup']", 'symmetrical': 'False', 'through': "orm['im.Membership']", 'blank': 'True'}),
138
            'auth_token': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
139
            'auth_token_created': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
140
            'auth_token_expires': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
141
            'date_signed_terms': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
142
            'email_verified': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
143
            'has_credits': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
144
            'has_signed_terms': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
145
            'invitations': ('django.db.models.fields.IntegerField', [], {'default': '100'}),
146
            'is_verified': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
147
            'level': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
148
            'owner': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'owner'", 'null': 'True', 'to': "orm['im.AstakosGroup']"}),
149
            'policy': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['im.Resource']", 'null': 'True', 'through': "orm['im.AstakosUserQuota']", 'symmetrical': 'False'}),
150
            'provider': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
151
            'third_party_identifier': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
152
            'updated': ('django.db.models.fields.DateTimeField', [], {}),
153
            'user_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True', 'primary_key': 'True'})
154
        },
155
        'im.astakosuserquota': {
156
            'Meta': {'unique_together': "(('resource', 'user'),)", 'object_name': 'AstakosUserQuota'},
157
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
158
            'limit': ('django.db.models.fields.PositiveIntegerField', [], {}),
159
            'resource': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.Resource']"}),
160
            'uplimit': ('django.db.models.fields.BigIntegerField', [], {'null': 'True'}),
161
            'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.AstakosUser']"})
162
        },
163
        'im.emailchange': {
164
            'Meta': {'object_name': 'EmailChange'},
165
            'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '40', 'db_index': 'True'}),
166
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
167
            'new_email_address': ('django.db.models.fields.EmailField', [], {'max_length': '75'}),
168
            'requested_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2012, 8, 9, 11, 14, 9, 290713)'}),
169
            'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'emailchange_user'", 'unique': 'True', 'to': "orm['im.AstakosUser']"})
170
        },
171
        'im.groupkind': {
172
            'Meta': {'object_name': 'GroupKind'},
173
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
174
            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255', 'db_index': 'True'})
175
        },
176
        'im.invitation': {
177
            'Meta': {'object_name': 'Invitation'},
178
            'code': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
179
            'consumed': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
180
            'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
181
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
182
            'inviter': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'invitations_sent'", 'null': 'True', 'to': "orm['im.AstakosUser']"}),
183
            'is_consumed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
184
            'realname': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
185
            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'})
186
        },
187
        'im.membership': {
188
            'Meta': {'unique_together': "(('person', 'group'),)", 'object_name': 'Membership'},
189
            'date_joined': ('django.db.models.fields.DateField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
190
            'date_requested': ('django.db.models.fields.DateField', [], {'default': 'datetime.datetime(2012, 8, 9, 11, 14, 9, 286925)', 'blank': 'True'}),
191
            'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.AstakosGroup']"}),
192
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
193
            'person': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.AstakosUser']"})
194
        },
195
        'im.resource': {
196
            'Meta': {'object_name': 'Resource'},
197
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
198
            'meta': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['im.ResourceMetadata']", 'symmetrical': 'False'}),
199
            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255', 'db_index': 'True'}),
200
            'service': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['im.Service']"})
201
        },
202
        'im.resourcemetadata': {
203
            'Meta': {'object_name': 'ResourceMetadata'},
204
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
205
            'key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255', 'db_index': 'True'}),
206
            'value': ('django.db.models.fields.CharField', [], {'max_length': '255'})
207
        },
208
        'im.service': {
209
            'Meta': {'object_name': 'Service'},
210
            'auth_token': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
211
            'auth_token_created': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
212
            'auth_token_expires': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
213
            'icon': ('django.db.models.fields.FilePathField', [], {'max_length': '100', 'blank': 'True'}),
214
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
215
            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255', 'db_index': 'True'}),
216
            'url': ('django.db.models.fields.FilePathField', [], {'max_length': '100'})
217
        }
218
    }
219

  
220
    complete_apps = ['im']
b/snf-astakos-app/astakos/im/models.py
197 197
    def quota(self):
198 198
        d = defaultdict(int)
199 199
        for q in self.astakosgroupquota_set.all():
200
            d[q.resource] += q.limit
200
            d[q.resource] += q.uplimit
201 201
        return d
202 202

  
203 203
    @property
......
296 296
    def quota(self):
297 297
        d = defaultdict(int)
298 298
        for q in self.astakosuserquota_set.all():
299
            d[q.resource.name] += q.limit
299
            d[q.resource.name] += q.uplimit
300 300
        for m in self.membership_set.all():
301 301
            if not m.is_approved:
302 302
                continue
303 303
            g = m.group
304 304
            if not g.is_enabled:
305 305
                continue
306
            for r, limit in g.quota.iteritems():
307
                d[r] += limit
306
            for r, uplimit in g.quota.iteritems():
307
                d[r] += uplimit
308 308
        # TODO set default for remaining
309 309
        return d
310 310

  
......
417 417

  
418 418

  
419 419
class AstakosGroupQuota(models.Model):
420
    limit = models.PositiveIntegerField('Limit')
420
    limit = models.PositiveIntegerField('Limit')    # obsolete field
421
    uplimit = models.BigIntegerField('Up limit', null=True)
421 422
    resource = models.ForeignKey(Resource)
422 423
    group = models.ForeignKey(AstakosGroup, blank=True)
423 424

  
......
426 427

  
427 428

  
428 429
class AstakosUserQuota(models.Model):
429
    limit = models.PositiveIntegerField('Limit')
430
    limit = models.PositiveIntegerField('Limit')    # obsolete field
431
    uplimit = models.BigIntegerField('Up limit', null=True)
430 432
    resource = models.ForeignKey(Resource)
431 433
    user = models.ForeignKey(AstakosUser)
432 434

  
b/snf-astakos-app/astakos/im/settings.py
105 105
# Set the quota holder component URI
106 106
QUOTA_HOLDER_URL = getattr(settings, 'ASTAKOS_QUOTA_HOLDER_URL', '')
107 107

  
108
# Set the cloud service properties
109
SERVICES = getattr(settings, 'ASTAKOS_SERVICES',
110
                   {'cyclades': {'url':'https://node1.example.com/ui/',
111
                                 'quota': {'vm': 2}},
112
                    'pithos+':  {'url':'https://node2.example.com/ui/',
113
                                 'quota': {'diskspace': 50 * 1024 * 1024 * 1024}}})
114

  
108 115
# Set the billing URI
109 116
AQUARIUM_URL = getattr(settings, 'ASTAKOS_AQUARIUM_URL', '')
110 117

  
......
125 132
        'Email change on %s alpha2 testing' % SITENAME)
126 133
PASSWORD_RESET_EMAIL_SUBJECT = getattr(settings, 'ASTAKOS_PASSWORD_RESET_EMAIL_SUBJECT',
127 134
        'Password reset on %s alpha2 testing' % SITENAME)
135

  
b/snf-astakos-app/astakos/im/views.py
662 662
            new_object.owners = [request.user]
663 663

  
664 664
            # save quota policies
665
            for (rid, limit) in form.resources():
665
            for (rid, uplimit) in form.resources():
666 666
                try:
667 667
                    r = resources[rid]
668 668
                except KeyError, e:
......
672 672
                else:
673 673
                    new_object.astakosgroupquota_set.create(
674 674
                        resource=r,
675
                        limit=limit
675
                        uplimit=uplimit
676 676
                    )
677
                policies.append('%s %d' % (r, limit))
677
                policies.append('%s %d' % (r, uplimit))
678 678
            msg = _("The %(verbose_name)s was created successfully.") %\
679 679
                {"verbose_name": model._meta.verbose_name}
680 680
            messages.success(request, msg, fail_silently=True)
b/snf-astakos-app/conf/20-snf-astakos-app-settings.conf
103 103
# Set the quota holder component URI
104 104
#ASTAKOS_QUOTA_HOLDER_URL = ''
105 105

  
106
# Set the cloud service properties
107
# SERVICES = getattr(settings, 'ASTAKOS_SERVICES',
108
#                    {'cyclades': {'url':'https://node1.example.com/ui/',
109
#                                  'quota': {'vm': 2}},
110
#                     'pithos+':  {'url':'https://node2.example.com/ui/',
111
#                                  'quota': {'diskspace': 50 * 1024 * 1024 * 1024}}})
112

  
106 113
# Set the billing URI
107 114
#ASTAKOS_AQUARIUM_URL = ''
108 115

  

Also available in: Unified diff