def remove(self, args): "Remove user and his/her jobs" user = User.by_id(args.user) for jobmeta in user.jobs: print jobmeta.jobid self.job_factory.fromId(jobmeta.jobid).delete() User.delete(user) commit()
def testChangeJobOwner(self): user1 = User(u"someone", u"somename", u"someemail", "secret") User.add(user1) user2 = User(u"someone2", u"somename2", u"someemail2", "secret2") User.add(user2) job = FakeJob() self.command.job_factory.fromId = MagicMock(name="fromId", return_value=job) JobMeta.add(job.meta) commit() args = Namespace(job=u"37dc6b15-2013-429c-98b7-f058bcf0c274", user=u"someone2") self.command.owner(args) self.assertEqual(DBSession().query(JobMeta.owner).all(), [(u"someone2",)])
def update(self, args): "Update user data" user = User.by_id(args.userid) if 'user' in args: user.userid = args.user for job in user.jobs: job.owner = args.user JobMeta.add(job) if 'name' in args: user.displayname = args.name if 'email' in args: user.email = args.email if 'password' in args: user.password = args.password User.add(user) commit()
def test_allinone_with_ms_data_as_text(self): post = {'ms_data': 'somexml', 'ms_data_file': ''} request = testing.DummyRequest(post=post) request.user = User('bob', 'Bob Example', '*****@*****.**') job = self.fake_job() jobquery = Mock(JobQuery) job.jobquery.return_value = jobquery views = Views(request) views.job_factory = Mock(JobFactory) views.job_factory.fromScratch = Mock(return_value=job) response = views.allinone() views.job_factory.fromScratch.assert_called_with('bob') jobquery.allinone.assert_called_with(post) views.job_factory.submitQuery.assert_called_with( jobquery.allinone(), job) self.assertEqual(response, {'success': True, 'jobid': 'foo'}) self.assertEqual(job.ms_filename, 'Uploaded as text') job.jobquery.assert_called_with('http://example.com/status/foo.json', False, 1)
def test_login_auto_register(self, user, remember): user.generate.return_value = User('bob', 'bob dob', '*****@*****.**') from pyramid.httpexceptions import HTTPFound self.config.add_route('home', '/') self.config.add_route('login', '/login') self.config.add_route('workspace', '/workspace') request = testing.DummyRequest() request.user = None request.url = 'http://example.com/workspace' route_mapper = self.config.get_routes_mapper() request.matched_route = route_mapper.get_route('workspace') request.registry.settings['auto_register'] = True views = Views(request) response = views.login() self.assertIsInstance(response, HTTPFound) self.assertEqual(response.location, 'http://example.com/workspace') user.generate.assert_called_with() remember.assert_called_with(request, 'bob')
def testChangeJobOwner(self): user1 = User(u'someone', u'somename', u'someemail', 'secret') User.add(user1) user2 = User(u'someone2', u'somename2', u'someemail2', 'secret2') User.add(user2) job = FakeJob() self.command.job_factory.fromId = MagicMock(name='fromId', return_value=job) JobMeta.add(job.meta) commit() args = Namespace(job=u'37dc6b15-2013-429c-98b7-f058bcf0c274', user=u'someone2') self.command.owner(args) self.assertEqual(DBSession().query(JobMeta.owner).all(), [(u'someone2', )])
def test_allinone_with_ms_data_as_file(self): from cgi import FieldStorage ms_file = FieldStorage() ms_file.filename = r'c:\bla\bla\F1234.mzxml' post = {'ms_data_file': ms_file} request = testing.DummyRequest(post=post) request.user = User('bob', 'Bob Example', '*****@*****.**') job = self.fake_job() jobquery = Mock(JobQuery) job.jobquery.return_value = jobquery views = Views(request) views.job_factory = Mock(JobFactory) views.job_factory.fromScratch = Mock(return_value=job) response = views.allinone() views.job_factory.fromScratch.assert_called_with('bob') jobquery.allinone.assert_called_with(post) views.job_factory.submitQuery.assert_called_with( jobquery.allinone(), job) self.assertEqual(response, {'success': True, 'jobid': 'foo'}) self.assertEqual(job.ms_filename, r'c:\bla\bla\F1234.mzxml') job.jobquery.assert_called_with('http://example.com/status/foo.json', False, 1)
def test_workspace(self): import uuid self.config.add_route('results', '/results/{jobid}') request = testing.DummyRequest() request.user = User('bob', 'Bob Example', '*****@*****.**') created_at = datetime.datetime(2012, 11, 14, 10, 48, 26, 504478) jobs = [ JobMeta( uuid.UUID('11111111-1111-1111-1111-111111111111'), 'bob', description='My job', created_at=created_at, ms_filename='F1234.mzxml', state='STOPPED', is_public=False, ) ] request.user.jobs = jobs views = Views(request) views.job_factory.dbSize = Mock(return_value=1234) response = views.workspace() id1 = '11111111-1111-1111-1111-111111111111' url1 = 'http://example.com/results/' + id1 expected_jobs = [{ 'id': '11111111-1111-1111-1111-111111111111', 'url': url1, 'description': 'My job', 'is_public': False, 'ms_filename': 'F1234.mzxml', 'state': 'STOPPED', 'created_at': '2012-11-14T10:48:26', 'size': 1234, }] self.assertEqual(response, {'jobs': expected_jobs})
def login(self): """Login page * Authenticated -> forbidden exception * Unauthenticated * GET login page + MAC challenge * POST -> authenticated -> redirect came_from or home if came_from=login * POST -> unauthenticated -> login page Or if auto_register=True then generates user and redirects back to request.url except when route is PUT status.json then auto_register is ignored """ is_authenticated = self.request.user is not None if is_authenticated: return self.request.exception referrer = self.request.url login_url = self.request.route_url('login') if referrer == login_url: # never use the login form itself as came_from referrer = self.request.route_url('home') auto_register = self.request.registry.settings['auto_register'] # in anonymous mode we don't want the job status to be updated # by anyone so return the login form is_put = self.request.method == u'PUT' route_name = self.request.matched_route.name status_update = route_name == 'status.json' and is_put if auto_register and not status_update: user = User.generate() userid = user.userid # Force committing as this is an exception handler # which causes pyramid_tm to do a rollback instead of commit try: transaction.commit() except: pass headers = remember(self.request, userid) return HTTPFound(location=referrer, headers=headers) else: came_from = self.request.params.get('came_from', referrer) userid = '' password = '' if self.request.method == 'POST': userid = self.request.POST['userid'] password = self.request.POST['password'] user = User.by_id(userid) if user is not None and user.validate_password(password): headers = remember(self.request, userid) return HTTPFound(location=came_from, headers=headers) else: self.request.response.status_int = 401 # Add MAC challenge self.request.response.headers["WWW-Authenticate"] = "MAC" return dict( came_from=came_from, userid=userid, password=password, )
def add(self, args): "Add new user" user = User(args.user, args.name, args.email, args.password) User.add(user) commit()
def login(self): """Login page * Authenticated -> forbidden exception * Unauthenticated * GET login page + MAC challenge * POST -> authenticated -> redirect came_from or home if came_from=login * POST -> unauthenticated -> login page Or if auto_register=True then generates user and redirects back to request.url except when route is PUT status.json then auto_register is ignored """ is_authenticated = self.request.user is not None if is_authenticated: return self.request.exception referrer = self.request.url login_url = self.request.route_url('login') if referrer == login_url: # never use the login form itself as came_from referrer = self.request.route_url('home') auto_register = self.request.registry.settings['auto_register'] # in anonymous mode we don't want the job status to be updated # by anyone so return the login form is_put = self.request.method == u'PUT' route_name = self.request.matched_route.name status_update = route_name == 'status.json' and is_put if auto_register and not status_update: user = User.generate() userid = user.userid # Force committing as this is an exception handler # which causes pyramid_tm to do a rollback instead of commit try: transaction.commit() except: pass headers = remember(self.request, userid) return HTTPFound(location=referrer, headers=headers) else: came_from = self.request.params.get('came_from', referrer) userid = '' password = '' if self.request.method == 'POST': userid = self.request.POST['userid'] password = self.request.POST['password'] user = User.by_id(userid) if user is not None and user.validate_password(password): headers = remember(self.request, userid) return HTTPFound(location=came_from, headers=headers) else: self.request.response.status_int = 401 # Add MAC challenge self.request.response.headers["WWW-Authenticate"] = "MAC" return dict(came_from=came_from, userid=userid, password=password, )