Beispiel #1
0
    def create(self, request):

        if not request.user.is_staff:  # Only an admin could register a new repository
            return build_response(request, 403, 'Forbidden')

        # Get request info
        name = None
        host = None
        try:
            content = json.loads(request.raw_post_data)
            name = content['name']
            host = content['host']
        except:
            msg = "Request body is not valid JSON data"
            return build_response(request, 400, msg)

        # Check data formats
        if not is_valid_id(name):
            return build_response(request, 400, 'Invalid name format')

        if not is_valid_url(host):
            return build_response(request, 400, 'Invalid URL format')

        # Register repository
        try:
            register_repository(name, host)
        except Exception, e:
            return build_response(request, 400, e.message)
Beispiel #2
0
    def test_first_repository_registering(self):

        for r in Repository.objects.all():
            r.delete()

        register_repository('test_repository', 'http://testrepository.com', 'testColl', 2, False)
        rep = Repository.objects.get(name='test_repository')
        self.assertTrue(rep.is_default)
Beispiel #3
0
    def test_basic_registering_rep(self):

        name = 'test_repository'
        host = 'http://testrepository.com/'
        register_repository(name, host)

        rep = Repository.objects.get(name=name, host=host)
        self.assertEqual(name, rep.name)
        self.assertEqual(host, rep.host)
Beispiel #4
0
    def test_register_existing_repository(self):

        name = 'test_repository1'
        host = 'http://testrepository.com/'

        error = False
        msg = None

        try:
            register_repository(name, host)
        except Exception, e:
            error = True
            msg = e.message
Beispiel #5
0
    def test_repository_registering(self, name, data, err_type=None, err_msg=None):

        error = None
        try:
            register_repository(
                data['name'],
                data['host'],
                data['offering_collection'],
                data['resource_collection'],
                data['api_version'],
                default=data['default']
            )
        except Exception as e:
            error = e

        if err_type is None:
            self.assertEquals(error, None)

            if not data['host'].endswith('/'):
                data['host'] += '/'

            rep = Repository.objects.get(name=data['name'], host=data['host'])

            self.assertEqual(data['name'], rep.name)
            self.assertEqual(data['host'], rep.host)
            self.assertEquals(data['default'], rep.is_default)
            self.assertEquals(data['offering_collection'], rep.offering_collection)
            self.assertEquals(data['resource_collection'], rep.resource_collection)
            self.assertEqual(data['api_version'], rep.api_version)

            # Check that the default repository has been to to false
            if data['default']:
                self.assertFalse(Repository.objects.get(pk="61001bba8e05ac2115f11111").is_default)

        else:
            self.assertTrue(isinstance(error, err_type))
            self.assertEquals(unicode(error), err_msg)
Beispiel #6
0
    def create(self, request):

        if not request.user.is_staff:  # Only an admin could register a new repository
            return build_response(request, 403, 'You are not authorized to register a repository')

        # Get request info
        try:
            content = json.loads(request.raw_post_data)
            is_default = content.get('is_default', False)
        except:
            msg = "Request body is not valid JSON data"
            return build_response(request, 400, msg)

        if 'name' not in content:
            return build_response(request, 400, 'Missing required field: name')

        if 'host' not in content:
            return build_response(request, 400, 'Missing required field: host')

        if 'api_version' not in content:
            return build_response(request, 400, 'Missing required field: api_version')

        if 'offering_collection' not in content:
            return build_response(request, 400, 'Missing required field: offering_collection')

        if 'resource_collection' not in content:
            return build_response(request, 400, 'Missing required field: resource_collection')

        # Check data formats
        if not is_valid_id(content['name']):
            return build_response(request, 400, 'Invalid name format')

        if not is_valid_id(content['offering_collection']) or ' ' in content['offering_collection']:
            return build_response(request, 400, 'Invalid offering_collection format: Invalid character found')

        if not is_valid_id(content['resource_collection']) or ' ' in content['resource_collection']:
            return build_response(request, 400, 'Invalid resource_collection format: Invalid character found')

        if not is_valid_url(content['host']):
            return build_response(request, 400, 'Invalid URL format')

        if not content['api_version'].isdigit():
            return build_response(request, 400, 'Invalid api_version format: must be an integer')

        api_version = int(content['api_version'])
        if api_version != 1 and api_version != 2:
            return build_response(request, 400, 'Invalid api_version: Only versions 1 and 2 are supported')

        # Register repository
        try:
            register_repository(
                content['name'],
                content['host'],
                content['offering_collection'],
                content['resource_collection'],
                api_version,
                is_default
            )
        except ConflictError as e:
            return build_response(request, 409, unicode(e))
        except Exception as e:
            return build_response(request, 500, unicode(e))

        return build_response(request, 201, 'Created')