Exemplo n.º 1
0
    def postOptions(self):
        """Post options processing
        """
        if ((self['user'] and self['global'])
                or (not self['user'] and not self['global'])):
            raise usage.UsageError(
                'you must choose between `user` and `global` installations'
            )

        if self['entry_points'] is not None:
            try:
                self['entry_points'] = json.loads(self['entry_points'])
            except ValueError:
                raise usage.UsageError('invalid JSON entry_points structure')

            if type(self['entry_points']) is not dict:
                raise usage.UsageError(
                    'the entry_points JSON string must be decoded as a dict'
                )
        else:
            self['entry_points'] = {}

        if self['extra_directories'] is not None:
            try:
                self['extra_directories'] = json.loads(
                    self['extra_directories']
                )
            except ValueError:
                raise usage.UsageError(
                    'invalid JSON extra_directories structure'
                )

            if type(self['extra_directories']) is not list:
                raise usage.UsageError(
                    'the extra_directories JSON string '
                    'must be decoded as a list'
                )
        else:
            self['extra_directories'] = []

        if self['author'] is None:
            self['author'] = getpass.getuser()

        if self['email'] is not None:
            if not Checkers.check_email(self['email']):
                print(
                    'error: the given email address {} is not a valid RFC2822 '
                    'email address, '
                    'check http://www.rfc-editor.org/rfc/rfc2822.txt for '
                    'very extended details'.format(self['email'])
                )
                sys.exit(-1)
        else:
            # just set an invalid RFC2822 email address (thats what irony mean)
            self['email'] = '{}@localhost'.format(self['author'])
Exemplo n.º 2
0
    def postOptions(self):
        """Post options processing
        """
        if ((self['user'] and self['global'])
                or (not self['user'] and not self['global'])):
            raise usage.UsageError(
                'you must choose between `user` and `global` installations'
            )

        if self['entry_points'] is not None:
            try:
                self['entry_points'] = json.loads(self['entry_points'])
            except ValueError:
                raise usage.UsageError('invalid JSON entry_points structure')

            if type(self['entry_points']) is not dict:
                raise usage.UsageError(
                    'the entry_points JSON string must be decoded as a dict'
                )
        else:
            self['entry_points'] = {}

        if self['extra_directories'] is not None:
            try:
                self['extra_directories'] = json.loads(
                    self['extra_directories']
                )
            except ValueError:
                raise usage.UsageError(
                    'invalid JSON extra_directories structure'
                )

            if type(self['extra_directories']) is not list:
                raise usage.UsageError(
                    'the extra_directories JSON string '
                    'must be decoded as a list'
                )
        else:
            self['extra_directories'] = []

        if self['author'] is None:
            self['author'] = getpass.getuser()

        if self['email'] is not None:
            if not Checkers.check_email(self['email']):
                print(
                    'error: the given email address {} is not a valid RFC2822 '
                    'email address, '
                    'check http://www.rfc-editor.org/rfc/rfc2822.txt for '
                    'very extended details'.format(self['email'])
                )
                sys.exit(-1)
        else:
            # just set an invalid RFC2822 email address (thats what irony mean)
            self['email'] = '{}@localhost'.format(self['author'])
Exemplo n.º 3
0
    def _parse_request_args(self, route):
        """Parses JSON data and request form if present
        """

        data = self.request.content.read()
        data_json = {}

        if self.request.method in ['POST', 'PUT', 'PATCH']:
            ct = self.request.requestHeaders.getRawHeaders('content-type')
            try:
                if ct is not None and len(
                    [h for h in ct if 'application/json' in h]) > 0:
                    data_json = json.loads(data)
                    self.request.json = data_json
            except ValueError:
                self.request.json = {}

        request_args = self.request.args
        request_headers = self.request.requestHeaders.getRawHeaders(
            'content-type')

        if self.request.method == 'PUT' and request_headers:
            if 'application/x-www-form-urlencoded' in request_headers:
                request_args = parse_qs(data, 1)

        if len(request_args) > 0:
            for key, value in request_args.iteritems():
                if key not in route.callback_args:
                    route.callback_args.update(
                        {key: value if len(value) > 1 else value[0]})
        elif data_json:
            if type(data_json) is dict:
                for key, value in data_json.iteritems():
                    if key not in route.callback_args:
                        route.callback_args.update({key: value})
Exemplo n.º 4
0
    def test_database_write(self):
        import os
        import sys
        import json
        currdir = os.getcwd()
        os.mkdir('tmp')
        os.chdir('./tmp')

        data = {
            'uri': 'sqlite:',
            'min_threads': 5,
            'max_threads': 20,
            'auto_adjust_pool_size': False,
            'create_table_behaviours': {
                'create_table_if_not_exists': True,
                'drop_table': False
            },
            'drop_table_behaviours': {
                'drop_if_exists': True,
                'restrict': True,
                'cascade': False
            }
        }
        config.Database().write(data)

        os.chdir(currdir)
        cfg_file = filepath.FilePath('./tmp/config/database.json')
        self.assertTrue(cfg_file.exists())
        if not '__pypy__' in sys.modules:
            self.assertEqual(json.loads(cfg_file.open('r').read()), data)

        cfg_file.remove()
        os.rmdir('tmp/config')
        os.rmdir('tmp')
Exemplo n.º 5
0
    def test_database_write(self):
        import os
        import sys
        import json
        currdir = os.getcwd()
        os.mkdir('tmp')
        os.chdir('./tmp')

        data = {
            'uri': 'sqlite:',
            'min_threads': 5,
            'max_threads': 20,
            'auto_adjust_pool_size': False,
            'create_table_behaviours': {
                'create_table_if_not_exists': True,
                'drop_table': False
            },
            'drop_table_behaviours': {
                'drop_if_exists': True,
                'restrict': True,
                'cascade': False
            }
        }
        config.Database().write(data)

        os.chdir(currdir)
        cfg_file = filepath.FilePath('./tmp/config/database.json')
        self.assertTrue(cfg_file.exists())
        if not '__pypy__' in sys.modules:
            self.assertEqual(json.loads(cfg_file.open('r').read()), data)

        cfg_file.remove()
        os.rmdir('tmp/config')
        os.rmdir('tmp')
Exemplo n.º 6
0
    def test_dispatch_route_returns_json_on_models(self):

        StubController.test2 = routes_generator(DummyModel('Dummy'))

        request = request_generator(['/test2'])

        result = yield StubController().render(request)
        self.assertIsInstance(result, response.Ok)
        self.assertEqual(result.headers, {'content-type': 'application/json'})
        self.assertEqual(json.loads(result.subject), {
            'name': 'Dummy', 'id': None
        })
Exemplo n.º 7
0
    def test_dispatch_route_returns_json_on_models(self):

        StubController.test2 = routes_generator(DummyModel('Dummy'))

        request = request_generator(['/test2'])

        result = yield StubController().render(request)
        self.assertIsInstance(result, response.Ok)
        self.assertEqual(result.headers, {'content-type': 'application/json'})
        self.assertEqual(json.loads(result.subject), {
            'name': 'Dummy',
            'id': None
        })
Exemplo n.º 8
0
    def _parse_request_args(self, route):
        """Parses JSON data and request form if present
        """

        data = self.request.content.read()
        data_json = {}

        if self.request.method in ['POST', 'PUT', 'PATCH']:
            ct = self.request.requestHeaders.getRawHeaders('content-type')
            try:
                if ct is not None and len(
                        [h for h in ct if 'application/json' in h]) > 0:
                    data_json = json.loads(data)
                    self.request.json = data_json
            except ValueError:
                self.request.json = {}

        request_args = self.request.args
        request_headers = self.request.requestHeaders.getRawHeaders(
            'content-type'
        )

        if self.request.method == 'PUT' and request_headers:
            if 'application/x-www-form-urlencoded' in request_headers:
                request_args = parse_qs(data, 1)

        if len(request_args) > 0:
            for key, value in request_args.iteritems():
                if key not in route.callback_args:
                    route.callback_args.update(
                        {key: value if len(value) > 1 else value[0]}
                    )
        elif data_json:
            if type(data_json) is dict:
                for key, value in data_json.iteritems():
                    if key not in route.callback_args:
                        route.callback_args.update({key: value})