def setUp(self): super(TestActivityLogCount, self).setUp() now = datetime.now() bom = datetime(now.year, now.month, 1) self.lm = bom - timedelta(days=1) self.user = UserProfile.objects.get() amo.set_user(self.user)
def wrapper(*args, **kw): old_user = get_user() set_user(get_task_user()) try: result = f(*args, **kw) finally: set_user(old_user) return result
def process_request(self, request): """Attach authentication/permission helpers to request.""" request.check_ownership = partial(acl.check_ownership, request) # Persist the user in the thread to make it accessible in log() # statements etc. if request.user.is_authenticated(): amo.set_user(request.user)
def process_request(self, request): """Attach authentication/permission helpers to request.""" request.check_ownership = partial(acl.check_ownership, request) # figure out our list of groups... if request.user.is_authenticated(): amo.set_user(request.user) request.groups = request.user.groups.all()
def test_set_task_user(self): @decorators.set_task_user def some_func(): return get_user() set_user(UserProfile.objects.get(username='******')) eq_(get_user().pk, 999) eq_(some_func().pk, int(settings.TASK_USER_ID)) eq_(get_user().pk, 999)
def test_set_task_user(self): @decorators.set_task_user def some_func(): return get_user() set_user(UserProfile.objects.get(username='******')) assert get_user().pk == 999 assert some_func().pk == int(settings.TASK_USER_ID) assert get_user().pk == 999
def authenticate_credentials(self, request): """ Mimic what our ACLMiddleware does after a successful authentication, because otherwise that behaviour would be missing in the API since API auth happens after the middleware process request phase. """ result = super( JSONWebTokenAuthentication, self).authenticate_credentials(request) amo.set_user(result) return result
def authenticate_credentials(self, request): """ Mimic what our ACLMiddleware does after a successful authentication, because otherwise that behaviour would be missing in the API since API auth happens after the middleware process request phase. """ result = super(JSONWebTokenAuthentication, self).authenticate_credentials(request) amo.set_user(result) return result
def test_unreviewed_addon(self): u = UserProfile.objects.get(email='*****@*****.**') addon = Addon.objects.all()[0] addon.status = amo.STATUS_NOMINATED c = u.favorites_collection() amo.set_user(u) c.add_addon(addon) self.client.login(email='*****@*****.**') response = self.client.get(c.get_url_path()) assert list(response.context['addons'].object_list) == [addon]
def test_unreviewed_addon(self): u = UserProfile.objects.get(email='*****@*****.**') addon = Addon.objects.all()[0] addon.status = amo.STATUS_UNREVIEWED c = u.favorites_collection() amo.set_user(u) c.add_addon(addon) self.client.login(username='******', password='******') response = self.client.get(c.get_url_path()) eq_(list(response.context['addons'].object_list), [addon])
def test_user_approve_reviews(self): self.add_approve_logs(3) other = UserProfile.objects.create(email="*****@*****.**", username="******") amo.set_user(other) self.add_approve_logs(2) result = ActivityLog.objects.user_approve_reviews(self.user).count() eq_(result, 3) result = ActivityLog.objects.user_approve_reviews(other).count() eq_(result, 2) another = UserProfile.objects.create( email="*****@*****.**", username="******") result = ActivityLog.objects.user_approve_reviews(another).count() eq_(result, 0)
def test_user_approve_reviews(self): self.add_approve_logs(3) other = UserProfile.objects.create(email="*****@*****.**", username="******") amo.set_user(other) self.add_approve_logs(2) result = ActivityLog.objects.user_approve_reviews(self.user).count() assert result == 3 result = ActivityLog.objects.user_approve_reviews(other).count() assert result == 2 another = UserProfile.objects.create(email="*****@*****.**", username="******") result = ActivityLog.objects.user_approve_reviews(another).count() assert result == 0
def update_maxversions(version_pks, job_pk, data, **kw): log.info('[%s@%s] Updating max version for job %s.' % (len(version_pks), update_maxversions.rate_limit, job_pk)) job = ValidationJob.objects.get(pk=job_pk) set_user(get_task_user()) dry_run = data['preview_only'] app_id = job.target_version.application stats = collections.defaultdict(int) stats['processed'] = 0 stats['is_dry_run'] = int(dry_run) for version in Version.objects.filter(pk__in=version_pks): stats['processed'] += 1 file_pks = version.files.values_list('pk', flat=True) errors = (ValidationResult.objects.filter( validation_job=job, file__pk__in=file_pks).values_list('errors', flat=True)) if any(errors): stats['invalid'] += 1 log.info('Version %s for addon %s not updated, ' 'one of the files did not pass validation' % (version.pk, version.addon.pk)) continue for app in version.apps.filter( application=job.curr_max_version.application, max__version_int__gte=job.curr_max_version.version_int, max__version_int__lt=job.target_version.version_int): stats['bumped'] += 1 log.info( 'Updating version %s%s for addon %s from version %s ' 'to version %s' % (version.pk, ' [DRY RUN]' if dry_run else '', version.addon.pk, job.curr_max_version.version, job.target_version.version)) app.max = job.target_version if not dry_run: app.save() amo.log(amo.LOG.MAX_APPVERSION_UPDATED, version.addon, version, details={ 'version': version.version, 'target': job.target_version.version, 'application': app_id }) log.info('[%s@%s] bulk update stats for job %s: {%s}' % (len(version_pks), update_maxversions.rate_limit, job_pk, ', '.join('%s: %s' % (k, stats[k]) for k in sorted(stats.keys()))))
def setUp(self): super(TestTagsForm, self).setUp() self.addon = Addon.objects.get(pk=3615) category = Category.objects.get(pk=22) category.name = 'test' category.save() self.data = { 'summary': str(self.addon.summary), 'name': str(self.addon.name), 'slug': self.addon.slug, } self.user = self.addon.authors.all()[0] amo.set_user(self.user)
def update_maxversions(version_pks, job_pk, data, **kw): log.info('[%s@%s] Updating max version for job %s.' % (len(version_pks), update_maxversions.rate_limit, job_pk)) job = ValidationJob.objects.get(pk=job_pk) set_user(get_task_user()) dry_run = data['preview_only'] app_id = job.target_version.application stats = collections.defaultdict(int) stats['processed'] = 0 stats['is_dry_run'] = int(dry_run) for version in Version.objects.filter(pk__in=version_pks): stats['processed'] += 1 file_pks = version.files.values_list('pk', flat=True) errors = (ValidationResult.objects.filter(validation_job=job, file__pk__in=file_pks) .values_list('errors', flat=True)) if any(errors): stats['invalid'] += 1 log.info('Version %s for addon %s not updated, ' 'one of the files did not pass validation' % (version.pk, version.addon.pk)) continue for app in version.apps.filter( application=job.curr_max_version.application, max__version_int__gte=job.curr_max_version.version_int, max__version_int__lt=job.target_version.version_int): stats['bumped'] += 1 log.info('Updating version %s%s for addon %s from version %s ' 'to version %s' % (version.pk, ' [DRY RUN]' if dry_run else '', version.addon.pk, job.curr_max_version.version, job.target_version.version)) app.max = job.target_version if not dry_run: app.save() amo.log(amo.LOG.MAX_APPVERSION_UPDATED, version.addon, version, details={'version': version.version, 'target': job.target_version.version, 'application': app_id}) log.info('[%s@%s] bulk update stats for job %s: {%s}' % (len(version_pks), update_maxversions.rate_limit, job_pk, ', '.join('%s: %s' % (k, stats[k]) for k in sorted(stats.keys()))))
def test_mine(self): u = UserProfile.objects.get(email='*****@*****.**') addon = addon = Addon.objects.all()[0] c = u.favorites_collection() amo.set_user(u) c.add_addon(addon) assert self.client.login(email='*****@*****.**') # My Collections. response = self.client.get('/en-US/firefox/collections/mine/') assert response.context['author'] == (UserProfile.objects.get( email='*****@*****.**')) # My Favorites. response = self.client.get( reverse('collections.detail', args=['mine', 'favorites'])) assert response.status_code == 200 assert list(response.context['addons'].object_list) == [addon]
def test_mine(self): u = UserProfile.objects.get(email='*****@*****.**') addon = addon = Addon.objects.all()[0] c = u.favorites_collection() amo.set_user(u) c.add_addon(addon) assert self.client.login(email='*****@*****.**') # My Collections. response = self.client.get('/en-US/firefox/collections/mine/') assert response.context['author'] == ( UserProfile.objects.get(email='*****@*****.**')) # My Favorites. response = self.client.get(reverse('collections.detail', args=['mine', 'favorites'])) assert response.status_code == 200 assert list(response.context['addons'].object_list) == [addon]
def authenticate_credentials(self, payload): """ Mimic what our ACLMiddleware does after a successful authentication, because otherwise that behaviour would be missing in the API since API auth happens after the middleware process request phase. """ if 'user_id' not in payload: log.info('No user_id in JWT payload {}'.format(payload)) raise exceptions.AuthenticationFailed('No user_id in JWT.') try: user = UserProfile.objects.get(pk=payload['user_id']) except UserProfile.DoesNotExist: log.info('User not found from JWT payload {}'.format(payload)) raise exceptions.AuthenticationFailed('User not found.') if user.deleted: log.info('Not allowing deleted user to log in {}'.format(user.pk)) raise exceptions.AuthenticationFailed('User account is disabled.') amo.set_user(user) return user
def authenticate_credentials(self, payload): """ Returns a verified AMO user who is active and allowed to make API requests. """ if 'orig_iat' in payload: msg = ("API key based tokens are not refreshable, don't include " "`orig_iat` in their payload.") raise exceptions.AuthenticationFailed(msg) try: api_key = APIKey.get_jwt_key(key=payload['iss']) except APIKey.DoesNotExist: msg = 'Invalid API Key.' raise exceptions.AuthenticationFailed(msg) if api_key.user.deleted: msg = 'User account is disabled.' raise exceptions.AuthenticationFailed(msg) if not api_key.user.read_dev_agreement: msg = 'User has not read developer agreement.' raise exceptions.AuthenticationFailed(msg) amo.set_user(api_key.user) return api_key.user
def setUp(self): """Start with one user, two add-ons.""" super(TestActivity, self).setUp() self.clone_addon(2) amo.set_user(self.user_profile) self.addon, self.addon2 = list(self.user_profile.addons.all())
def process_exception(self, request, exception): amo.set_user(None)
def notify_compatibility_chunk(users, job, data, **kw): log.info('[%s@%s] Sending notification mail for job %s.' % (len(users), notify_compatibility.rate_limit, job.pk)) set_user(get_task_user()) dry_run = data['preview_only'] app_id = job.target_version.application stats = collections.defaultdict(int) stats['processed'] = 0 stats['is_dry_run'] = int(dry_run) for user in users: stats['processed'] += 1 try: for a in chain(user.passing_addons, user.failing_addons): try: results = job.result_set.filter(file__version__addon=a) a.links = [ absolutify( reverse('devhub.bulk_compat_result', args=[a.slug, r.pk])) for r in results ] v = a.current_version or a.latest_version a.compat_link = absolutify( reverse('devhub.versions.edit', args=[a.pk, v.pk])) except: task_error = sys.exc_info() log.error( u'Bulk validation email error for user %s, ' u'addon %s: %s: %s' % (user.email, a.slug, task_error[0], task_error[1]), exc_info=False) context = Context({ 'APPLICATION': unicode(amo.APP_IDS[job.application].pretty), 'VERSION': job.target_version.version, 'PASSING_ADDONS': user.passing_addons, 'FAILING_ADDONS': user.failing_addons, }) log.info( u'Emailing %s%s for %d addons about ' 'bulk validation job %s' % (user.email, ' [PREVIEW]' if dry_run else '', len(user.passing_addons) + len(user.failing_addons), job.pk)) args = (Template(data['subject']).render(context), Template(data['text']).render(context)) kwargs = dict(from_email=settings.DEFAULT_FROM_EMAIL, recipient_list=[user.email]) if dry_run: job.preview_notify_mail(*args, **kwargs) else: stats['author_emailed'] += 1 send_mail(*args, **kwargs) amo.log(amo.LOG.BULK_VALIDATION_USER_EMAILED, user, details={ 'passing': [a.id for a in user.passing_addons], 'failing': [a.id for a in user.failing_addons], 'target': job.target_version.version, 'application': app_id }) except: task_error = sys.exc_info() log.error(u'Bulk validation email error for user %s: %s: %s' % (user.email, task_error[0], task_error[1]), exc_info=False) log.info('[%s@%s] bulk email stats for job %s: {%s}' % (len(users), notify_compatibility.rate_limit, job.pk, ', '.join( '%s: %s' % (k, stats[k]) for k in sorted(stats.keys()))))
def tearDown(self): amo.set_user(None) super(TestActivityLog, self).tearDown()
def process_response(self, request, response): amo.set_user(None) return response
def test_no_user(self): amo.set_user(None) count = ActivityLog.objects.count() amo.log(amo.LOG.CUSTOM_TEXT, 'hi') assert count == ActivityLog.objects.count()
def setUp(self): super(TestActivityLog, self).setUp() u = UserProfile.objects.create(username='******') self.request = Mock() self.request.user = self.user = u amo.set_user(u)
def test_no_user(self): amo.set_user(None) count = ActivityLog.objects.count() amo.log(amo.LOG.CUSTOM_TEXT, 'hi') eq_(count, ActivityLog.objects.count())
def notify_compatibility_chunk(users, job, data, **kw): log.info('[%s@%s] Sending notification mail for job %s.' % (len(users), notify_compatibility.rate_limit, job.pk)) set_user(get_task_user()) dry_run = data['preview_only'] app_id = job.target_version.application stats = collections.defaultdict(int) stats['processed'] = 0 stats['is_dry_run'] = int(dry_run) for user in users: stats['processed'] += 1 try: for a in chain(user.passing_addons, user.failing_addons): try: results = job.result_set.filter(file__version__addon=a) a.links = [absolutify(reverse('devhub.bulk_compat_result', args=[a.slug, r.pk])) for r in results] v = a.current_version or a.latest_version a.compat_link = absolutify(reverse('devhub.versions.edit', args=[a.pk, v.pk])) except: task_error = sys.exc_info() log.error(u'Bulk validation email error for user %s, ' u'addon %s: %s: %s' % (user.email, a.slug, task_error[0], task_error[1]), exc_info=False) context = Context({ 'APPLICATION': unicode(amo.APP_IDS[job.application].pretty), 'VERSION': job.target_version.version, 'PASSING_ADDONS': user.passing_addons, 'FAILING_ADDONS': user.failing_addons, }) log.info(u'Emailing %s%s for %d addons about ' 'bulk validation job %s' % (user.email, ' [PREVIEW]' if dry_run else '', len(user.passing_addons) + len(user.failing_addons), job.pk)) args = (Template(data['subject']).render(context), Template(data['text']).render(context)) kwargs = dict(from_email=settings.DEFAULT_FROM_EMAIL, recipient_list=[user.email]) if dry_run: job.preview_notify_mail(*args, **kwargs) else: stats['author_emailed'] += 1 send_mail(*args, **kwargs) amo.log( amo.LOG.BULK_VALIDATION_USER_EMAILED, user, details={'passing': [a.id for a in user.passing_addons], 'failing': [a.id for a in user.failing_addons], 'target': job.target_version.version, 'application': app_id}) except: task_error = sys.exc_info() log.error(u'Bulk validation email error for user %s: %s: %s' % (user.email, task_error[0], task_error[1]), exc_info=False) log.info('[%s@%s] bulk email stats for job %s: {%s}' % (len(users), notify_compatibility.rate_limit, job.pk, ', '.join('%s: %s' % (k, stats[k]) for k in sorted(stats.keys()))))
def setUp(self): super(LogTest, self).setUp() u = UserProfile.objects.create(username='******') amo.set_user(u)
def setUp(self): super(TestCollections, self).setUp() self.user = UserProfile.objects.create(username='******', email='uh@hh') self.other = UserProfile.objects.exclude(id=self.user.id)[0] amo.set_user(self.user)
def test_post_teardown(): amo.set_user(None) clean_translations(None) # Make sure queued translations are removed. # Make sure we revert everything we might have changed to prefixers. amo.urlresolvers.clean_url_prefixes()