Revision 6e3bb9c8

b/snf-astakos-app/astakos/im/forms.py
471 471
             commit=True, **kwargs):
472 472
        ec = super(EmailChangeForm, self).save(commit=False, **kwargs)
473 473
        ec.user = request.user
474

  
474 475
        # delete pending email changes
475 476
        request.user.emailchanges.all().delete()
476 477

  
477 478
        activation_key = hashlib.sha1(
478 479
            str(random()) + smart_str(ec.new_email_address))
480
        cancel_key = hashlib.sha1(
481
            str(random()) + smart_str("cancel_%s" % ec.new_email_address))
479 482
        ec.activation_key = activation_key.hexdigest()
483
        ec.cancel_key = activation_key.hexdigest()
484

  
480 485
        if commit:
481 486
            ec.save(**kwargs)
482 487
        send_change_email(ec, request, email_template_name=email_template_name)
b/snf-astakos-app/astakos/im/management/commands/email-address-log.py
1
# Copyright 2013 GRNET S.A. All rights reserved.
2
#
3
# Redistribution and use in source and binary forms, with or
4
# without modification, are permitted provided that the following
5
# conditions are met:
6
#
7
#   1. Redistributions of source code must retain the above
8
#      copyright notice, this list of conditions and the following
9
#      disclaimer.
10
#
11
#   2. Redistributions in binary form must reproduce the above
12
#      copyright notice, this list of conditions and the following
13
#      disclaimer in the documentation and/or other materials
14
#      provided with the distribution.
15
#
16
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27
# POSSIBILITY OF SUCH DAMAGE.
28
#
29
# The views and conclusions contained in the software and
30
# documentation are those of the authors and should not be
31
# interpreted as representing official policies, either expressed
32
# or implied, of GRNET S.A.
33

  
34
from django.core.management.base import CommandError
35
from optparse import make_option
36

  
37
from django.db.models import Q
38

  
39
from astakos.im import util
40

  
41
from snf_django.management.commands import SynnefoCommand
42
from snf_django.management import utils
43

  
44
import uuid
45

  
46

  
47
class Command(SynnefoCommand):
48
    args = "<email>"
49
    help = "Show email address log"
50

  
51
    option_list = SynnefoCommand.option_list + (
52
        make_option('--user-field',
53
                    action='store',
54
                    dest='user_field',
55
                    default='uuid',
56
                    help="User field to display in user column"),
57
    )
58

  
59
    def handle(self, *args, **options):
60
        if len(args) != 1:
61
            raise CommandError("Please provide an email address")
62

  
63
        email = args[0]
64
        fields = ('in use', 'user', 'used from', 'used until')
65
        log = util.email_address_log(email,
66
                                     user_field=options.get('user_field',
67
                                                            'uuid'))
68
        utils.pprint_table(self.stdout, log, fields,
69
                           options["output_format"], vertical=False)
b/snf-astakos-app/astakos/im/management/commands/user-show.py
35 35
from optparse import make_option
36 36

  
37 37
from django.db.models import Q
38
from astakos.im.models import AstakosUser, get_latest_terms, Project
38
from astakos.im.models import AstakosUser, get_latest_terms, Project, \
39
                              EmailChange
39 40
from astakos.im.quotas import list_user_quotas
40 41

  
41 42
from synnefo.lib.ordereddict import OrderedDict
......
52 53
    help = "Show user info"
53 54

  
54 55
    option_list = SynnefoCommand.option_list + (
56
        make_option('--email-history',
57
                    action='store_true',
58
                    dest='list_email_history',
59
                    default=False,
60
                    help="List account email changes history"),
55 61
        make_option('--quota',
56 62
                    action='store_true',
57 63
                    dest='list_quotas',
......
153 159
                                       options["output_format"],
154 160
                                       title="Project Memberships")
155 161

  
162
            if options["list_email_history"] and user.is_accepted:
163
                labels = ('email', 'date_set', 'replaced')
164
                activation_email = [user.accepted_email, user.moderated_at,
165
                                    None]
166
                consumed_emails = EmailChange.objects.consumed()
167
                emails = list(consumed_emails.filter(user=user).values_list(
168
                    'new_email_address', 'consumed_at',
169
                    'replaced_email_address'))
170
                emails.insert(0, activation_email)
171
                if user.email_change_is_pending():
172
                    change = user.get_pending_email_change()
173
                    emails.append([u"%s" % change.new_email_address,
174
                                   "pending", None])
175
                self.stdout.write("\n")
176
                utils.pprint_table(self.stdout, emails, labels,
177
                                   options["output_format"],
178
                                   title="Email history")
179

  
156 180

  
157 181
def memberships(user):
158 182
    ms = user.projectmembership_set.all()
b/snf-astakos-app/astakos/im/messages.py
78 78
    'Thank you for contacting us. We will process your message carefully '
79 79
    'and get back to you.')
80 80
EMAIL_CHANGED = 'The email of your account changed successfully.'
81
INVALID_CHANGE_EMAIL_ACTIVATION_KEY = "Invalid change email url."
81 82
EMAIL_CHANGE_REGISTERED = (
82 83
    'Your request for changing your email has been registered successfully. '
83 84
    'A verification email will be sent to your new address.')
......
102 103
    'This Project reached its maximum number of members. No other member '
103 104
    'can be added.')
104 105
NO_APPROVAL_TERMS = 'There are no terms of service to approve.'
106
PENDING_EMAIL_CHANGE_WARNING = ('A request for an email change (%(email)s) '
107
                                'is pending for your profile<br />'
108
                                '<a href="%(cancel_url)s">Cancel pending '
109
                                'request</a>')
110
EMAIL_CHANGE_REQUEST_CANCELED = 'Email change request canceled successfully.'
105 111
PENDING_EMAIL_CHANGE_REQUEST = (
106 112
    'It seems there is already a pending request for an email change. '
107 113
    'Submitting a new request to change your email will cancel all previous '
b/snf-astakos-app/astakos/im/migrations/0062_auto__add_field_emailchange_replaced_email_address__add_field_emailcha.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
        # Removing unique constraint on 'EmailChange', fields ['user']
12
        db.delete_unique('im_emailchange', ['user_id'])
13

  
14
        # Adding field 'EmailChange.replaced_email_address'
15
        db.add_column('im_emailchange', 'replaced_email_address', self.gf('django.db.models.fields.EmailField')(default=None, max_length=75, null=True, blank=True), keep_default=False)
16

  
17
        # Adding field 'EmailChange.is_consumed'
18
        db.add_column('im_emailchange', 'is_consumed', self.gf('django.db.models.fields.BooleanField')(default=False), keep_default=False)
19

  
20
        # Adding field 'EmailChange.consumed_at'
21
        db.add_column('im_emailchange', 'consumed_at', self.gf('django.db.models.fields.DateTimeField')(null=True, blank=True), keep_default=False)
22

  
23

  
24
    def backwards(self, orm):
25
        
26
        # Deleting field 'EmailChange.replaced_email_address'
27
        db.delete_column('im_emailchange', 'replaced_email_address')
28

  
29
        # Deleting field 'EmailChange.is_consumed'
30
        db.delete_column('im_emailchange', 'is_consumed')
31

  
32
        # Deleting field 'EmailChange.consumed_at'
33
        db.delete_column('im_emailchange', 'consumed_at')
34

  
35
        # Adding unique constraint on 'EmailChange', fields ['user']
36
        db.create_unique('im_emailchange', ['user_id'])
37

  
38

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

  
328
    complete_apps = ['im']
b/snf-astakos-app/astakos/im/migrations/0063_auto__add_field_emailchange_cancel_key.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 'EmailChange.cancel_key'
12
        db.add_column('im_emailchange', 'cancel_key', self.gf('django.db.models.fields.CharField')(default=None, max_length=40, null=True), keep_default=False)
13

  
14

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

  
311
    complete_apps = ['im']
b/snf-astakos-app/astakos/im/migrations/0064_email_change_cancel_keys.py
1
# encoding: utf-8
2
import datetime
3
import hashlib
4

  
5
from random import random
6
from south.db import db
7
from south.v2 import DataMigration
8
from django.db import models
9
from django.utils.encoding import smart_str
10

  
11
class Migration(DataMigration):
12

  
13
    def forwards(self, orm):
14
        email_changes = orm.EmailChange.objects.filter()
15
        for email_change in email_changes:
16
            sha1 = hashlib.sha1
17
            rnd = str(random())
18
            key = smart_str("cancel_%s" % email_change.new_email_address)
19
            email_change.cancel_key = sha1(rnd + key).hexdigest()
20
            email_change.save()
21

  
22

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

  
317
    complete_apps = ['im']
b/snf-astakos-app/astakos/im/migrations/0065_auto__chg_field_emailchange_cancel_key__add_unique_emailchange_cancel_.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 'EmailChange.cancel_key'
12
        db.alter_column('im_emailchange', 'cancel_key', self.gf('django.db.models.fields.CharField')(default='', unique=True, max_length=40))
13

  
14
        # Adding index on 'EmailChange', fields ['cancel_key']
15
        db.create_index('im_emailchange', ['cancel_key'])
16

  
17
        # Adding unique constraint on 'EmailChange', fields ['cancel_key']
18
        db.create_unique('im_emailchange', ['cancel_key'])
19

  
20

  
21
    def backwards(self, orm):
22
        
23
        # Removing unique constraint on 'EmailChange', fields ['cancel_key']
24
        db.delete_unique('im_emailchange', ['cancel_key'])
25

  
26
        # Removing index on 'EmailChange', fields ['cancel_key']
27
        db.delete_index('im_emailchange', ['cancel_key'])
28

  
29
        # Changing field 'EmailChange.cancel_key'
30
        db.alter_column('im_emailchange', 'cancel_key', self.gf('django.db.models.fields.CharField')(max_length=40, null=True))
31

  
32

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

  
323
    complete_apps = ['im']
b/snf-astakos-app/astakos/im/models.py
596 596
    def email_change_is_pending(self):
597 597
        return self.emailchanges.count() > 0
598 598

  
599
    def get_pending_email_change(self):
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff