def handle(self, *args, **options): projects = options['projects'] if 'all' in projects: queryset = Project.objects.all() else: queryset = Project.objects.filter(slug__in=projects) for proj in queryset: tasks.symlink_project(project_pk=proj.pk)
def handle(self, *args, **options): projects = options['projects'] if 'all' in projects: pks = Project.objects.values_list('pk', flat=True) else: pks = Project.objects.filter(slug__in=projects).values_list('pk', flat=True) for proj in pks: try: tasks.symlink_project(project_pk=proj) except Exception: log.exception('Failed symlink management command')
def handle(self, *args, **options): projects = options['projects'] if 'all' in projects: pks = Project.objects.values_list('pk', flat=True) else: pks = Project.objects.filter(slug__in=projects).values_list( 'pk', flat=True) for proj in pks: try: tasks.symlink_project(project_pk=proj) except Exception: log.exception('Failed symlink management command')
def test_change_subproject_privacy(self): """ Change subproject's ``privacy_level`` creates proper symlinks. When the ``privacy_level`` changes in the subprojects, we need to re-symlink the superproject also to keep in sync its symlink under the private/public roots. """ filesystem_before = { 'private_cname_project': {}, 'private_cname_root': {}, 'private_web_root': { 'project': { 'en': {}, }, 'subproject': { 'en': {}, }, }, 'public_cname_project': {}, 'public_cname_root': {}, 'public_web_root': { 'project': { 'en': { 'latest': { 'type': 'link', 'target': 'user_builds/project/rtd-builds/latest', }, }, 'projects': { 'subproject': { 'type': 'link', 'target': 'public_web_root/subproject', }, }, }, 'subproject': { 'en': { 'latest': { 'type': 'link', 'target': 'user_builds/subproject/rtd-builds/latest', }, }, }, }, } filesystem_after = { 'private_cname_project': {}, 'private_cname_root': {}, 'private_web_root': { 'project': { 'en': {}, 'projects': { 'subproject': { 'type': 'link', 'target': 'private_web_root/subproject', }, }, }, 'subproject': { 'en': { 'latest': { 'type': 'link', 'target': 'user_builds/subproject/rtd-builds/latest', }, }, }, }, 'public_cname_project': {}, 'public_cname_root': {}, 'public_web_root': { 'project': { 'en': { 'latest': { 'type': 'link', 'target': 'user_builds/project/rtd-builds/latest', }, }, 'projects': {}, }, 'subproject': { 'en': {}, }, }, } self.assertEqual(self.project.subprojects.all().count(), 0) self.assertEqual(self.subproject.superprojects.all().count(), 0) self.project.add_subproject(self.subproject) self.assertEqual(self.project.subprojects.all().count(), 1) self.assertEqual(self.subproject.superprojects.all().count(), 1) self.assertTrue(self.project.versions.first().active) self.assertTrue(self.subproject.versions.first().active) symlink_project(self.project.pk) self.assertFilesystem(filesystem_before) self.client.force_login(self.user) self.client.post( reverse('project_version_detail', kwargs={ 'project_slug': self.subproject.slug, 'version_slug': self.subproject.versions.first().slug, }), data={ 'privacy_level': 'private', 'active': True }, ) self.assertEqual(self.subproject.versions.first().privacy_level, 'private') self.assertTrue(self.subproject.versions.first().active) self.client.post( reverse('projects_advanced', kwargs={ 'project_slug': self.subproject.slug, }), data={ # Required defaults 'python_interpreter': 'python', 'default_version': 'latest', 'privacy_level': 'private', }, ) self.assertTrue(self.subproject.versions.first().active) self.subproject.refresh_from_db() self.assertEqual(self.subproject.privacy_level, 'private') self.assertFilesystem(filesystem_after)
def test_change_subproject_privacy(self): """ Change subproject's ``privacy_level`` creates proper symlinks. When the ``privacy_level`` changes in the subprojects, we need to re-symlink the superproject also to keep in sync its symlink under the private/public roots. """ filesystem_before = { 'private_cname_project': {}, 'private_cname_root': {}, 'private_web_root': { 'project': { 'en': {}, }, 'subproject': { 'en': {}, }, }, 'public_cname_project': {}, 'public_cname_root': {}, 'public_web_root': { 'project': { 'en': { 'latest': { 'type': 'link', 'target': 'user_builds/project/rtd-builds/latest', }, }, 'projects': { 'subproject': { 'type': 'link', 'target': 'public_web_root/subproject', }, }, }, 'subproject': { 'en': { 'latest': { 'type': 'link', 'target': 'user_builds/subproject/rtd-builds/latest', }, }, }, }, } filesystem_after = { 'private_cname_project': {}, 'private_cname_root': {}, 'private_web_root': { 'project': { 'en': {}, 'projects': { 'subproject': { 'type': 'link', 'target': 'private_web_root/subproject', }, }, }, 'subproject': { 'en': { 'latest': { 'type': 'link', 'target': 'user_builds/subproject/rtd-builds/latest', }, }, }, }, 'public_cname_project': {}, 'public_cname_root': {}, 'public_web_root': { 'project': { 'en': { 'latest': { 'type': 'link', 'target': 'user_builds/project/rtd-builds/latest', }, }, 'projects': {}, }, 'subproject': { 'en': {}, }, }, } self.assertEqual(self.project.subprojects.all().count(), 0) self.assertEqual(self.subproject.superprojects.all().count(), 0) self.project.add_subproject(self.subproject) self.assertEqual(self.project.subprojects.all().count(), 1) self.assertEqual(self.subproject.superprojects.all().count(), 1) self.assertTrue(self.project.versions.first().active) self.assertTrue(self.subproject.versions.first().active) symlink_project(self.project.pk) self.assertFilesystem(filesystem_before) self.client.force_login(self.user) self.client.post( reverse('project_version_detail', kwargs={ 'project_slug': self.subproject.slug, 'version_slug': self.subproject.versions.first().slug, }), data={'privacy_level': 'private', 'active': True}, ) self.assertEqual(self.subproject.versions.first().privacy_level, 'private') self.assertTrue(self.subproject.versions.first().active) self.client.post( reverse('projects_advanced', kwargs={ 'project_slug': self.subproject.slug, }), data={ # Required defaults 'python_interpreter': 'python', 'default_version': 'latest', 'privacy_level': 'private', }, ) self.assertTrue(self.subproject.versions.first().active) self.subproject.refresh_from_db() self.assertEqual(self.subproject.privacy_level, 'private') self.assertFilesystem(filesystem_after)