def create(Self, request): """Create a Package Repository. :param name: The name of the Package Repository. :type name: unicode :param url: The url of the Package Repository. :type url: unicode :param distributions: Which package distributions to include. :type distributions: unicode :param disabled_pockets: The list of pockets to disable. :param disabled_components: The list of components to disable. Only applicable to the default Ubuntu repositories. :param components: The list of components to enable. Only applicable to custom repositories. :param arches: The list of supported architectures. :param key: The authentication key to use with the repository. :type key: unicode :param enabled: Whether or not the repository is enabled. :type enabled: boolean """ form = PackageRepositoryForm(data=request.data) if form.is_valid(): return form.save(ENDPOINT.API, request) else: raise MAASAPIValidationError(form.errors)
def update(self, params): """Update the object from params iff admin.""" if not reload_object(self.user).is_superuser: raise HandlerPermissionError() obj = self.get_object(params) request = HttpRequest() request.user = self.user # Update by using form. form = PackageRepositoryForm(instance=obj, request=request, data=params) if form.is_valid(): try: obj = form.save(ENDPOINT.UI, request) except ValidationError as e: raise HandlerValidationError(e.error_dict) return self.full_dehydrate(obj) else: raise HandlerValidationError(form.errors) # Update by updating the fields on the object. obj = self.full_hydrate(obj, params) obj.save() return self.full_dehydrate(obj)
def create(self, params): """Create the object from params iff admin.""" if not reload_object(self.user).is_superuser: raise HandlerPermissionError() request = HttpRequest() request.user = self.user # Create by using form. form = PackageRepositoryForm(request=request, data=params) if form.is_valid(): try: obj = form.save(ENDPOINT.UI, request) except ValidationError as e: try: raise HandlerValidationError(e.message_dict) except AttributeError: raise HandlerValidationError({"__all__": e.message}) return self.full_dehydrate(obj) else: raise HandlerValidationError(form.errors) # Create by updating the fields on the object. obj = self._meta.object_class() obj = self.full_hydrate(obj, params) obj.save() return self.full_dehydrate(obj)
def test__creates_package_repository(self): repo = factory.make_PackageRepository() params = self.make_valid_repo_params(repo) form = PackageRepositoryForm(data=params) self.assertTrue(form.is_valid(), form.errors) package_repository = form.save() self.assertAttributes(package_repository, params)
def test__default_repository_cannot_be_disabled(self): repo = factory.make_PackageRepository(default=True) params = self.make_valid_repo_params(repo) params['enabled'] = False form = PackageRepositoryForm(data=params, instance=repo) self.assertFalse(form.is_valid()) self.assertRaises(ValidationError, form.clean)
def test__updates_enabled(self): package_repository = factory.make_PackageRepository() enabled = not package_repository.enabled form = PackageRepositoryForm(instance=package_repository, data={'enabled': enabled}) self.assertTrue(form.is_valid(), form.errors) package_repository = form.save() self.assertEqual(enabled, package_repository.enabled)
def test__updates_url(self): package_repository = factory.make_PackageRepository() url = factory.make_url(scheme='http') form = PackageRepositoryForm(instance=package_repository, data={'url': url}) self.assertTrue(form.is_valid(), form.errors) package_repository = form.save() self.assertEqual(url, package_repository.url)
def test__updates_name(self): package_repository = factory.make_PackageRepository() name = factory.make_name('name') form = PackageRepositoryForm(instance=package_repository, data={'name': name}) self.assertTrue(form.is_valid(), form.errors) package_repository = form.save() self.assertEqual(name, package_repository.name)
def test__fail_validation_on_create_cleans_url(self): PackageRepository.objects.all().delete() repo = factory.make_PackageRepository() params = self.make_valid_repo_params(repo) params['url'] = factory.make_string() repo.delete() form = PackageRepositoryForm(data=params) self.assertFalse(form.is_valid()) self.assertItemsEqual([], PackageRepository.objects.all())
def test_update_failure_doesnt_delete_url(self): package_repository = factory.make_PackageRepository() url = package_repository.url form = PackageRepositoryForm( instance=package_repository, data={"url": factory.make_url(scheme="fake")}, ) self.assertFalse(form.is_valid()) self.assertEquals(url, reload_object(package_repository).url)
def test__create_package_repository_defaults_to_enabled(self): repo = factory.make_PackageRepository() params = self.make_valid_repo_params(repo) del params['enabled'] form = PackageRepositoryForm(data=params) self.assertTrue(form.is_valid(), form.errors) package_repository = form.save() self.assertAttributes(package_repository, params) self.assertTrue(package_repository.enabled)
def update(self, request, id): """@description-title Update a package repository @description Update the package repository with the given id. @param (int) "{id}" [required=true] A package repository id. @param (string) "name" [required=false] The name of the package repository. @param (string) "url" [required=false] The url of the package repository. @param (string) "distributions" [required=false] Which package distributions to include. @param (string) "disabled_pockets" [required=false] The list of pockets to disable. @param (string) "disabled_components" [required=false] The list of components to disable. Only applicable to the default Ubuntu repositories. @param (string) "disable_sources" [required=false] Disable deb-src lines. @param (string) "components" [required=false] The list of components to enable. Only applicable to custom repositories. @param (string) "arches" [required=false] The list of supported architectures. @param (string) "key" [required=false] The authentication key to use with the repository. @param (boolean) "enabled" [required=false] Whether or not the repository is enabled. @success (http-status-code) "server-success" 200 @success (json) "success-json" A JSON object containing information about the updated package repository. @success-example "success-json" [exkey=pkg-repos-update] placeholder text @error (http-status-code) "404" 404 @error (content) "not-found" The requested package repository is not found. @error-example "not-found" Not Found """ package_repository = PackageRepository.objects.get_object_or_404(id) form = PackageRepositoryForm(instance=package_repository, data=request.data) if form.is_valid(): return form.save(ENDPOINT.API, request) else: raise MAASAPIValidationError(form.errors)
def test__creates_package_repository_defaults_main_arches(self): repo = factory.make_PackageRepository(arches=[]) params = self.make_valid_repo_params(repo) del params['arches'] form = PackageRepositoryForm(data=params) self.assertTrue(form.is_valid(), form.errors) package_repository = form.save() self.assertAttributes(package_repository, params) self.assertItemsEqual(package_repository.arches, PackageRepository.MAIN_ARCHES)
def test__updates_arches(self): package_repository = factory.make_PackageRepository() arch1 = random.choice(PackageRepository.KNOWN_ARCHES) arch2 = random.choice(PackageRepository.KNOWN_ARCHES) arch3 = random.choice(PackageRepository.KNOWN_ARCHES) form = PackageRepositoryForm(instance=package_repository, data={'arches': [arch1, arch2, arch3]}) self.assertTrue(form.is_valid(), form.errors) package_repository = form.save() self.assertEqual([arch1, arch2, arch3], package_repository.arches)
def test__updates_enabled(self): package_repository = factory.make_PackageRepository() enabled = not package_repository.enabled form = PackageRepositoryForm(instance=package_repository, data={'enabled': enabled}) self.assertTrue(form.is_valid(), form.errors) request = HttpRequest() request.user = factory.make_User() endpoint = factory.pick_choice(ENDPOINT_CHOICES) package_repository = form.save(endpoint, request) self.assertEqual(enabled, package_repository.enabled)
def test__updates_url(self): package_repository = factory.make_PackageRepository() url = factory.make_url(scheme='http') form = PackageRepositoryForm(instance=package_repository, data={'url': url}) self.assertTrue(form.is_valid(), form.errors) request = HttpRequest() request.user = factory.make_User() endpoint = factory.pick_choice(ENDPOINT_CHOICES) package_repository = form.save(endpoint, request) self.assertEqual(url, package_repository.url)
def test__create_package_repository_defaults_to_enabled(self): repo = factory.make_PackageRepository() params = self.make_valid_repo_params(repo) del params['enabled'] form = PackageRepositoryForm(data=params) self.assertTrue(form.is_valid(), form.errors) request = HttpRequest() request.user = factory.make_User() endpoint = factory.pick_choice(ENDPOINT_CHOICES) package_repository = form.save(endpoint, request) self.assertAttributes(package_repository, params) self.assertTrue(package_repository.enabled)
def test_default_ports_package_repository_arches(self): package_repository = PackageRepository.objects.get( name="ports_archive") form = PackageRepositoryForm(instance=package_repository, data={"arches": []}) self.assertTrue(form.is_valid(), form.errors) request = HttpRequest() request.user = factory.make_User() endpoint = factory.pick_choice(ENDPOINT_CHOICES) package_repository = form.save(endpoint, request) self.assertItemsEqual(package_repository.arches, PackageRepository.PORTS_ARCHES)
def test__updates_arches(self): package_repository = factory.make_PackageRepository() arch1 = random.choice(PackageRepository.KNOWN_ARCHES) arch2 = random.choice(PackageRepository.KNOWN_ARCHES) arch3 = random.choice(PackageRepository.KNOWN_ARCHES) form = PackageRepositoryForm(instance=package_repository, data={'arches': [arch1, arch2, arch3]}) self.assertTrue(form.is_valid(), form.errors) request = HttpRequest() request.user = factory.make_User() endpoint = factory.pick_choice(ENDPOINT_CHOICES) package_repository = form.save(endpoint, request) self.assertEqual([arch1, arch2, arch3], package_repository.arches)
def test__creates_package_repository_defaults_main_arches(self): repo = factory.make_PackageRepository(arches=[]) params = self.make_valid_repo_params(repo) del params['arches'] form = PackageRepositoryForm(data=params) self.assertTrue(form.is_valid(), form.errors) request = HttpRequest() request.user = factory.make_User() endpoint = factory.pick_choice(ENDPOINT_CHOICES) package_repository = form.save(endpoint, request) self.assertAttributes(package_repository, params) self.assertItemsEqual(package_repository.arches, PackageRepository.MAIN_ARCHES)
def test__creates_package_repository(self): repo = factory.make_PackageRepository() params = self.make_valid_repo_params(repo) form = PackageRepositoryForm(data=params) self.assertTrue(form.is_valid(), form.errors) request = HttpRequest() request.user = factory.make_User() endpoint = factory.pick_choice(ENDPOINT_CHOICES) package_repository = form.save(endpoint, request) self.assertAttributes(package_repository, params) event = Event.objects.get(type__level=AUDIT) self.assertIsNotNone(event) self.assertEqual( event.description, "Created package repository '%s'." % package_repository.name)
def test__updates_disable_sources(self): package_repository = factory.make_PackageRepository() form = PackageRepositoryForm(instance=package_repository, data={'disable_sources': True}) self.assertTrue(form.is_valid(), form.errors) request = HttpRequest() request.user = factory.make_User() endpoint = factory.pick_choice(ENDPOINT_CHOICES) package_repository = form.save(endpoint, request) self.assertTrue(package_repository.disable_sources) event = Event.objects.get(type__level=AUDIT) self.assertIsNotNone(event) self.assertEqual( event.description, "Updated package repository '%s'." % (package_repository.name))
def test__updates_name(self): package_repository = factory.make_PackageRepository() name = factory.make_name('name') form = PackageRepositoryForm(instance=package_repository, data={'name': name}) self.assertTrue(form.is_valid(), form.errors) request = HttpRequest() request.user = factory.make_User() endpoint = factory.pick_choice(ENDPOINT_CHOICES) package_repository = form.save(endpoint, request) self.assertEqual(name, package_repository.name) event = Event.objects.get(type__level=AUDIT) self.assertIsNotNone(event) self.assertEqual( event.description, "Package repository '%s'" % package_repository.name + " updated by '%(username)s'.")
def create(Self, request): """@description-title Create a package repository @description Create a new package repository. @param (string) "name" [required=true] The name of the package repository. @param (string) "url" [required=true] The url of the package repository. @param (string) "distributions" [required=false] Which package distributions to include. @param (string) "disabled_pockets" [required=false] The list of pockets to disable. @param (string) "disabled_components" [required=false] The list of components to disable. Only applicable to the default Ubuntu repositories. @param (string) "components" [required=false] The list of components to enable. Only applicable to custom repositories. @param (string) "arches" [required=false] The list of supported architectures. @param (string) "key" [required=false] The authentication key to use with the repository. @param (boolean) "enabled" [required=false] Whether or not the repository is enabled. @success (http-status-code) "server-success" 200 @success (json) "success-json" A JSON object containing information about the new package repository. @success-example "success-json" [exkey=pkg-repos-update] placeholder text """ form = PackageRepositoryForm(data=request.data) if form.is_valid(): return form.save(ENDPOINT.API, request) else: raise MAASAPIValidationError(form.errors)
def update(self, request, id): """Update a Package Repository. :param name: The name of the Package Repository. :type name: unicode :param url: The url of the Package Repository. :type url: unicode :param distributions: Which package distributions to include. :type distributions: unicode :param disabled_pockets: The list of pockets to disable. :param disabled_components: The list of components to disable. Only applicable to the default Ubuntu repositories. :param disable_sources: Disable deb-src lines. :param components: The list of components to enable. Only applicable to custom repositories. :param arches: The list of supported architectures. :param key: The authentication key to use with the repository. :type key: unicode :param enabled: Whether or not the repository is enabled. :type enabled: boolean Returns 404 if the Package Repository is not found. """ package_repository = PackageRepository.objects.get_object_or_404(id) form = PackageRepositoryForm(instance=package_repository, data=request.data) if form.is_valid(): return form.save(ENDPOINT.API, request) else: raise MAASAPIValidationError(form.errors)
def test_create_package_repository_requires_name(self): form = PackageRepositoryForm( data={"url": factory.make_url(scheme="http")} ) self.assertFalse(form.is_valid())
def test__create_package_repository_requires_url(self): form = PackageRepositoryForm(data={'name': factory.make_name('name')}) self.assertFalse(form.is_valid())