def test_search_fullname_case_insensitive(self): _make_user(email='*****@*****.**', fullname=u'AAAAA') _make_user(email='*****@*****.**', fullname=u'aaaaa') _make_user(email='*****@*****.**', fullname=u'BBBBB') _make_user(email='*****@*****.**', fullname=u'bbbbb') users = User.get_all(search='aaaaa').all() self.assertEqual(len(users), 2) self.assertEqual(users[0].email, '*****@*****.**') self.assertEqual(users[1].email, '*****@*****.**') users = User.get_all(search='AAAAA').all() self.assertEqual(len(users), 2) self.assertEqual(users[0].email, '*****@*****.**') self.assertEqual(users[1].email, '*****@*****.**')
def test_search_email(self): _make_user(email='*****@*****.**') _make_user(email='*****@*****.**') _make_user(email='*****@*****.**') users = User.get_all(search='baz').all() self.assertEqual(len(users), 1) self.assertEqual(users[0].email, '*****@*****.**')
def test_search_fullname(self): _make_user(email='*****@*****.**', fullname=u'aaaaa') _make_user(email='*****@*****.**', fullname=u'ccccc') _make_user(email='*****@*****.**', fullname=u'bbbbb') users = User.get_all(search='ccccc').all() self.assertEqual(len(users), 1) self.assertEqual(users[0].email, '*****@*****.**')
def test_offset(self): _make_user(email='*****@*****.**') _make_user(email='*****@*****.**') _make_user(email='*****@*****.**') users = User.get_all(offset=(1, 2)).all() self.assertEqual(len(users), 1) self.assertEqual(users[0].email, '*****@*****.**')
def test_ordered_by_modified(self): _make_user(email='*****@*****.**') _make_user(email='*****@*****.**') _make_user(email='*****@*****.**') users = User.get_all(order_by='modified', order_direction='desc').all() self.assertEqual(len(users), 3) self.assertEqual(users[0].email, '*****@*****.**') self.assertEqual(users[1].email, '*****@*****.**') self.assertEqual(users[2].email, '*****@*****.**')
def test_override_ordered_by(self): _make_user(email='*****@*****.**', fullname=u'A') _make_user(email='*****@*****.**', fullname=u'C') _make_user(email='*****@*****.**', fullname=u'B') users = User.get_all(order_by='fullname').all() self.assertEqual(len(users), 3) self.assertEqual(users[0].fullname, 'A') self.assertEqual(users[1].fullname, 'B') self.assertEqual(users[2].fullname, 'C')
def test_ordered_by_email_by_default(self): _make_user(email='*****@*****.**') _make_user(email='*****@*****.**') _make_user(email='*****@*****.**') users = User.get_all().all() self.assertEqual(len(users), 3) self.assertEqual(users[0].email, '*****@*****.**') self.assertEqual(users[1].email, '*****@*****.**') self.assertEqual(users[2].email, '*****@*****.**')
def __call__(self): warnings = [] for user in User.get_all(): if user.fullname is None or not user.fullname.strip(): warnings.append( 'User {} ({}) has an empty fullname.'.format( user.email, user.id)) return warnings
def test_ordered_by_created(self): _make_user(email='*****@*****.**') _make_user(email='*****@*****.**') _make_user(email='*****@*****.**') users = User.get_all(order_by='created').all() self.assertEqual(len(users), 3) self.assertEqual(users[0].email, '*****@*****.**') self.assertEqual(users[1].email, '*****@*****.**') self.assertEqual(users[2].email, '*****@*****.**')
def __call__(self): warnings = [] enabled_event_id = AuditLogEventType.by_name('UserEnabled').id disabled_event_id = AuditLogEventType.by_name('UserDisabled').id for user in User.get_all(): last_enabled_entry = AuditLogEntry.get_all( security=False, filter_by={ 'event_type_id': enabled_event_id, 'user_id': user.id }, order_by='timestamp' ).first() last_disabled_entry = AuditLogEntry.get_all( security=False, filter_by={ 'event_type_id': disabled_event_id, 'user_id': user.id }, order_by='timestamp' ).first() if user.enabled: if not last_enabled_entry: warnings.append( 'User {} ({}) is enabled, ' 'but has no UserEnabled entry.'.format( user.email, user.id)) elif last_disabled_entry and ( last_enabled_entry.timestamp < last_disabled_entry.timestamp): # noqa warnings.append( 'User {} ({}) is enabled, ' 'but has an UserDisabled entry ' 'after UserEnabled entry.'.format( user.email, user.id)) else: if not last_disabled_entry: warnings.append( 'User {} ({}) is disabled, ' 'but has no UserDisabled entry.'.format( user.email, user.id)) elif last_enabled_entry and ( last_disabled_entry.timestamp < last_enabled_entry.timestamp): # noqa warnings.append( 'User {} ({}) is disabled, ' 'but has an UserEnabled entry ' 'after UserDisabled entry.'.format( user.email, user.id)) return warnings
def __call__(self): warnings = [] for user in User.get_all(): try: user.product_group except NoResultFound: pass # continue to next user except MultipleResultsFound: warnings.append( 'User {} ({}) has multiple product groups.'.format( user.email, user.id)) return warnings
def expire_subscriptions(): """Find all outstanding subscriptions and expire them.""" with transaction.manager: for user in User.get_all(): if user.enabled: if user.valid_to < date.today(): user.disable() msg = u'Disabled user {} ({}) because its valid_to ({}) ' \ 'has expired.'.format( user.email, user.id, user.valid_to) Session.add( AuditLogEntry( user_id=user.id, event_type_id=AuditLogEventType.by_name( 'UserDisabled').id, comment=msg, )) logger.info(msg) continue # handle addons for prop in user.properties: if not prop.key.startswith('addon_'): continue if not prop.key.endswith('_valid_to'): continue valid_to = datetime.strptime(prop.value, '%Y-%m-%d').date() if valid_to >= date.today(): continue group = Group.by_product_id( prop.key.split('addon_')[1].split('_valid_to')[0]) user.groups.remove(group) msg = u'Addon "{}" disabled for user {} ({}) because ' \ 'its valid_to ({}) has expired.'.format( group.name, user.email, user.id, prop.value) Session.add( AuditLogEntry( user_id=user.id, event_type_id=AuditLogEventType.by_name( 'UserDisabled').id, comment=msg, ))
def __init__(self, request): self.request = request self.schema = SQLAlchemySchemaNode( Group, includes=self.fields, overrides={ 'properties': { 'includes': ['key', 'value'] }, 'name': { 'validator': deferred_group_name_validator }, 'product_id': { 'validator': deferred_group_product_id_validator } # noqa }) # we don't like the way ColanderAlchemy renders SA Relationships so # we manually inject a suitable SchemaNode for users choices = [(user.id, user.email) for user in User.get_all()] self.schema.add(node=colander.SchemaNode( colander.Set(), name='users', missing=[], widget=deform.widget.CheckboxChoiceWidget(values=choices, inline=True), ), ) choices = [ (group.id, group.name) for group in Group.get_all().filter(Group.product_id != None) ] # noqa self.schema.add(node=colander.SchemaNode( colander.Set(), name='upgrade_groups', missing=[], widget=deform.widget.CheckboxChoiceWidget(values=choices, inline=True), ), )
def list(self): self.request.layout_manager.layout.hide_sidebar = True self.request.layout_manager.layout.title = u'Users' return {'count': User.get_all().count()}
def test_no_users(self): users = User.get_all().all() self.assertEqual(len(users), 0)
def test_all_users(self): _make_user(email='*****@*****.**') _make_user(email='*****@*****.**') _make_user(email='*****@*****.**') users = User.get_all().all() self.assertEqual(len(users), 3)
def test_filter_by(self): _make_user(email='*****@*****.**', affiliate=u'John') _make_user(email='*****@*****.**', affiliate=u'Jane') users = User.get_all(filter_by={'affiliate': u'John'}).all() self.assertEqual(len(users), 1) self.assertEqual(users[0].affiliate, 'John')
def test_limit(self): _make_user(email='*****@*****.**') _make_user(email='*****@*****.**') users = User.get_all(limit=1).all() self.assertEqual(len(users), 1) self.assertEqual(users[0].email, '*****@*****.**')