Ejemplo n.º 1
0
 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()
Ejemplo n.º 2
0
    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",)])
Ejemplo n.º 3
0
 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()
Ejemplo n.º 4
0
    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)
Ejemplo n.º 5
0
    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')
Ejemplo n.º 6
0
    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', )])
Ejemplo n.º 7
0
    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)
Ejemplo n.º 8
0
    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})
Ejemplo n.º 9
0
    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,
            )
Ejemplo n.º 10
0
 def add(self, args):
     "Add new user"
     user = User(args.user, args.name, args.email, args.password)
     User.add(user)
     commit()
Ejemplo n.º 11
0
 def add(self, args):
     "Add new user"
     user = User(args.user, args.name, args.email, args.password)
     User.add(user)
     commit()
Ejemplo n.º 12
0
    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,
                        )