def _get_path(kwargs, filename_ns): """Use path from '/content/<path>/v3/' or if user does not specify distribution base path then use an inbound distribution based on filename namespace. """ path = kwargs['path'] if kwargs.get('no_path_specified', None): path = INBOUND_REPO_NAME_FORMAT.format(namespace_name=filename_ns) return path
def test_namespace_api_creates_deletes_inbound_repo(self): self.client.force_authenticate(user=self.admin_user) ns1_name = "unittestnamespace1" repo_name = INBOUND_REPO_NAME_FORMAT.format(namespace_name=ns1_name) with self.settings(GALAXY_DEPLOYMENT_MODE=self.deployment_mode): # Create namespace + repo response = self.client.post( self.ns_url, { "name": ns1_name, "groups": [ { "id": self.pe_group.id, "name": self.pe_group.name, "object_permissions": [ 'galaxy.upload_to_namespace', 'galaxy.change_namespace' ] }, ], }, format='json', ) self.assertEqual(response.status_code, status.HTTP_201_CREATED) self.assertEqual( 1, len(AnsibleRepository.objects.filter(name=repo_name))) self.assertEqual( 1, len(AnsibleDistribution.objects.filter(name=repo_name))) # List namespace response = self.client.get(self.ns_url) self.assertEqual(response.status_code, status.HTTP_200_OK) namespaces = [item['name'] for item in response.data['data']] self.assertIn(ns1_name, namespaces) self.assertEqual(1, len(Namespace.objects.filter(name=ns1_name))) # Delete namespace + repo ns_detail_url = reverse('galaxy:api:v3:namespaces-detail', kwargs={"name": ns1_name}) response = self.client.delete(ns_detail_url) # Namespace deletion is currently disabled via access policy. If we re-enable it # we can re-enable these tests self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
def _check_path_matches_expected_repo(path, filename_ns): """Reject if path does not match expected inbound format containing filename namespace. Examples: Reject if path is "staging". Reject if path does not start with "inbound-". Reject if path is "inbound-alice" but filename namepace is "bob". """ distro = get_object_or_404(AnsibleDistribution, base_path=path) repo_name = distro.repository.name if INBOUND_REPO_NAME_FORMAT.format(namespace_name=filename_ns) == repo_name: return raise APIException( f'Path does not match: "{INBOUND_REPO_NAME_FORMAT.format(namespace_name=filename_ns)}"')