Example #1
0
 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)
Example #2
0
 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)
Example #3
0
 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')
Example #4
0
 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)