Пример #1
0
 def __init__(self, *args, **kwargs):
     super(PackageSearchForm, self).__init__(*args, **kwargs)
     self.fields["repo"].choices = [("", "All")] + make_choice([repo.name for repo in Repo.objects.all()])
     self.fields["arch"].choices = [("", "All")] + make_choice([arch.name for arch in Arch.objects.all()])
     self.fields["q"].widget.attrs.update({"size": "30"})
     maints = User.objects.filter(is_active=True).order_by("username")
     self.fields["maintainer"].choices = [("", "All"), ("orphan", "Orphan")] + [
         (m.username, m.get_full_name()) for m in maints
     ]
Пример #2
0
 def __init__(self, *args, **kwargs):
     super(MirrorlistForm, self).__init__(*args, **kwargs)
     countries = Mirror.objects.filter(active=True).values_list("country", flat=True).distinct().order_by("country")
     self.fields["country"].choices = [("all", "All")] + make_choice(countries)
     self.fields["country"].initial = ["all"]
     protos = make_choice(MirrorProtocol.objects.filter(is_download=True))
     initial = MirrorProtocol.objects.filter(is_download=True, default=True)
     self.fields["protocol"].choices = protos
     self.fields["protocol"].initial = [p.protocol for p in initial]
     self.fields["ip_version"].initial = ["4"]
Пример #3
0
 def __init__(self, *args, **kwargs):
     super(MirrorlistForm, self).__init__(*args, **kwargs)
     mirrors = Mirror.objects.filter(active=True).values_list(
             'country', flat=True).distinct().order_by('country')
     self.fields['country'].choices = [('all','All')] + make_choice(
             mirrors)
     self.fields['country'].initial = ['all']
     protos = make_choice(
             MirrorProtocol.objects.filter(is_download=True))
     self.fields['protocol'].choices = protos
     self.fields['protocol'].initial = [t[0] for t in protos]
     self.fields['ip_version'].initial = ['4']
Пример #4
0
    def __init__(self, *args, **kwargs):
        show_staging = kwargs.pop('show_staging', False)
        super(GroupSearchForm, self).__init__(*args, **kwargs)

        repos = Repo.objects.all()

        if not show_staging:
            repos = repos.filter(staging=False)

        self.fields['repo'].choices = make_choice(
            [repo.name for repo in repos])
        self.fields['arch'].choices = make_choice(
            [arch.name for arch in Arch.objects.all()])
Пример #5
0
 def __init__(self, *args, **kwargs):
     super(PackageSearchForm, self).__init__(*args, **kwargs)
     self.fields['repo'].choices = make_choice(
         [repo.name for repo in Repo.objects.all()])
     self.fields['arch'].choices = make_choice(
         [arch.name for arch in Arch.objects.all()])
     self.fields['q'].widget.attrs.update({"size": "30"})
     maints = User.objects.filter(is_active=True).order_by(
         'first_name', 'last_name')
     self.fields['maintainer'].choices = \
             [('', 'All'), ('orphan', 'Orphan')] + \
             [(m.username, m.get_full_name()) for m in maints]
     self.fields['packager'].choices = \
             [('', 'All'), ('unknown', 'Unknown')] + \
             [(m.username, m.get_full_name()) for m in maints]
Пример #6
0
 def __init__(self, *args, **kwargs):
     super(PackageSearchForm, self).__init__(*args, **kwargs)
     self.fields['repo'].choices = make_choice(
                     [repo.name for repo in Repo.objects.all()])
     self.fields['arch'].choices = make_choice(
                     [arch.name for arch in Arch.objects.all()])
     self.fields['q'].widget.attrs.update({"size": "30"})
     maints = User.objects.filter(is_active=True).order_by(
             'first_name', 'last_name')
     self.fields['maintainer'].choices = \
             [('', 'All'), ('orphan', 'Orphan')] + \
             [(m.username, m.get_full_name()) for m in maints]
     self.fields['packager'].choices = \
             [('', 'All'), ('unknown', 'Unknown')] + \
             [(m.username, m.get_full_name()) for m in maints]
Пример #7
0
class PackageSearchForm(forms.Form):
    repo = forms.MultipleChoiceField(required=False)
    arch = forms.MultipleChoiceField(required=False)
    name = forms.CharField(required=False)
    desc = forms.CharField(required=False)
    q = forms.CharField(required=False)
    sort = forms.CharField(required=False, widget=forms.HiddenInput())
    maintainer = forms.ChoiceField(required=False)
    packager = forms.ChoiceField(required=False)
    flagged = forms.ChoiceField(
            choices=[('', 'All')] + make_choice(['Flagged', 'Not Flagged']),
            required=False)

    def __init__(self, *args, **kwargs):
        show_staging = kwargs.pop('show_staging', False)
        super(PackageSearchForm, self).__init__(*args, **kwargs)
        repos = Repo.objects.all()
        if not show_staging:
            repos = repos.filter(staging=False)
        self.fields['repo'].choices = make_choice(
                        [repo.name for repo in repos])
        self.fields['arch'].choices = make_choice(
                        [arch.name for arch in Arch.objects.all()])
        self.fields['q'].widget.attrs.update({"size": "30"})
        maints = User.objects.filter(is_active=True).order_by(
                'first_name', 'last_name')
        self.fields['maintainer'].choices = \
                [('', 'All'), ('orphan', 'Orphan')] + \
                [(m.username, m.get_full_name()) for m in maints]
        self.fields['packager'].choices = \
                [('', 'All'), ('unknown', 'Unknown')] + \
                [(m.username, m.get_full_name()) for m in maints]
Пример #8
0
class UserProfile(models.Model):
    notify = models.BooleanField(
        "Send notifications",
        default=True,
        help_text="When enabled, send user 'flag out-of-date' notifications")
    time_zone = models.CharField(max_length=100,
                                 choices=make_choice(pytz.common_timezones),
                                 default="UTC",
                                 help_text="Used for developer clock page")
    alias = models.CharField(max_length=50, help_text="Required field")
    public_email = models.CharField(max_length=50, help_text="Required field")
    other_contact = models.CharField(max_length=100, null=True, blank=True)
    pgp_key = PGPKeyField(
        max_length=40,
        null=True,
        blank=True,
        verbose_name="PGP key fingerprint",
        help_text="consists of 40 hex digits; use `gpg --fingerprint`")
    website = models.CharField(max_length=200, null=True, blank=True)
    yob = models.IntegerField("Year of birth", null=True, blank=True)
    country = CountryField(blank=True)
    location = models.CharField(max_length=50, null=True, blank=True)
    languages = models.CharField(max_length=50, null=True, blank=True)
    interests = models.CharField(max_length=255, null=True, blank=True)
    occupation = models.CharField(max_length=50, null=True, blank=True)
    roles = models.CharField(max_length=255, null=True, blank=True)
    favorite_distros = models.CharField(max_length=255, null=True, blank=True)
    picture = models.FileField(upload_to='devs',
                               default='devs/silhouette.png',
                               help_text="Ideally 125px by 125px")
    user = models.OneToOneField(User, related_name='userprofile')
    allowed_repos = models.ManyToManyField('main.Repo', blank=True)
    latin_name = models.CharField(
        max_length=255,
        null=True,
        blank=True,
        help_text="Latin-form name; used only for non-Latin full names")
    last_modified = models.DateTimeField(editable=False)

    class Meta:
        db_table = 'user_profiles'
        get_latest_by = 'last_modified'
        verbose_name = 'additional profile data'
        verbose_name_plural = 'additional profile data'

    def get_absolute_url(self):
        # TODO: this is disgusting. find a way to consolidate this logic with
        # public.views.userlist among other places, and make some constants or
        # something so we aren't using copies of string names everywhere.
        group_names = self.user.groups.values_list('name', flat=True)
        if "Developers" in group_names:
            prefix = "developers"
        elif "Trusted Users" in group_names:
            prefix = "trustedusers"
        else:
            prefix = "fellows"
        return '/%s/#%s' % (prefix, self.user.username)
Пример #9
0
class UserProfile(models.Model):
    latin_name = models.CharField(
        max_length=255, null=True, blank=True, help_text="Latin-form name; used only for non-Latin full names")
    notify = models.BooleanField(
        "Send notifications",
        default=True,
        help_text="When enabled, send user 'flag out-of-date' notifications")
    time_zone = models.CharField(
        max_length=100,
        choices=make_choice(pytz.common_timezones),
        default="UTC",
        help_text="Used for developer clock page")
    alias = models.CharField(
        max_length=50,
        help_text="Required field")
    public_email = models.CharField(
        max_length=50,
        help_text="Required field")
    other_contact = models.CharField(max_length=100, null=True, blank=True)
    pgp_key = PGPKeyField(
        max_length=40, null=True, blank=True,
        verbose_name="PGP key fingerprint",
        help_text="consists of 40 hex digits; use `gpg --fingerprint`")
    website = models.CharField(max_length=200, null=True, blank=True)
    website_rss = models.CharField(max_length=200, null=True, blank=True,
                                   help_text='RSS Feed of your website for planet.archlinux.org')
    yob = models.IntegerField("Year of birth", null=True, blank=True)
    country = CountryField(blank=True)
    location = models.CharField(max_length=50, null=True, blank=True)
    languages = models.CharField(max_length=50, null=True, blank=True)
    interests = models.CharField(max_length=255, null=True, blank=True)
    occupation = models.CharField(max_length=50, null=True, blank=True)
    roles = models.CharField(max_length=255, null=True, blank=True)
    favorite_distros = models.CharField(max_length=255, null=True, blank=True)
    picture = models.FileField(
        upload_to='devs', default='devs/silhouette.png', help_text="Ideally 125px by 125px")
    user = models.OneToOneField(User, related_name='userprofile', on_delete=models.CASCADE)
    allowed_repos = models.ManyToManyField('main.Repo', blank=True)
    rebuilderd_updates = models.BooleanField(
        default=False, help_text='Receive reproducible build package updates')
    repos_auth_token = models.CharField(max_length=32, null=True, blank=True)
    last_modified = models.DateTimeField(editable=False)

    class Meta:
        db_table = 'user_profiles'
        get_latest_by = 'last_modified'
        verbose_name = 'additional profile data'
        verbose_name_plural = 'additional profile data'

    def get_absolute_url(self):
        user = self.user
        group = StaffGroup.objects.filter(group=user.groups.all().first()).get()
        if group:
            return '%s#%s' % (group.get_absolute_url(), user.username)
        return None
Пример #10
0
    def __init__(self, *args, **kwargs):
        show_staging = kwargs.pop('show_staging', False)
        super(PackageSearchForm, self).__init__(*args, **kwargs)
        repos = Repo.objects.all()
        if not show_staging:
            repos = repos.filter(staging=False)
        self.fields['repo'].choices = make_choice([repo.name for repo in repos])
        self.fields['arch'].choices = make_choice([arch.name for arch in Arch.objects.all()])
        self.fields['q'].widget.attrs.update({"size": "30"})

        profile_ids = UserProfile.allowed_repos.through.objects.values('userprofile_id')
        people = User.objects.filter(
            is_active=True, userprofile__id__in=profile_ids).order_by(
            'first_name', 'last_name')
        maintainers = [('', 'All'), ('orphan', 'Orphan')] + \
            [(p.username, p.get_full_name()) for p in people]
        packagers = [('', 'All'), ('unknown', 'Unknown')] + \
            [(p.username, p.get_full_name()) for p in people]

        self.fields['maintainer'].choices = maintainers
        self.fields['packager'].choices = packagers
Пример #11
0
class PackageSearchForm(forms.Form):
    limit = forms.IntegerField(required=False, min_value=0)
    page = forms.CharField(required=False)
    repo = forms.MultipleChoiceField(required=False)
    arch = forms.MultipleChoiceField(required=False)
    name = forms.CharField(required=False)
    desc = forms.CharField(required=False)
    q = forms.CharField(required=False,
                        max_length=100,
                        widget=forms.TextInput(attrs={'autofocus': True}))
    sort = forms.CharField(required=False, widget=forms.HiddenInput())
    maintainer = forms.ChoiceField(required=False)
    packager = forms.ChoiceField(required=False)
    flagged = forms.ChoiceField(choices=[('', 'All')] +
                                make_choice(['Flagged', 'Not Flagged']),
                                required=False)

    def __init__(self, *args, **kwargs):
        show_staging = kwargs.pop('show_staging', False)
        super(PackageSearchForm, self).__init__(*args, **kwargs)
        repos = Repo.objects.all()
        if not show_staging:
            repos = repos.filter(staging=False)
        self.fields['repo'].choices = make_choice(
            [repo.name for repo in repos])
        self.fields['arch'].choices = make_choice(
            [arch.name for arch in Arch.objects.all()])
        self.fields['q'].widget.attrs.update({"size": "30"})

        profile_ids = UserProfile.allowed_repos.through.objects.values(
            'userprofile_id')
        people = User.objects.filter(is_active=True,
                                     userprofile__id__in=profile_ids).order_by(
                                         'first_name', 'last_name')
        maintainers = [('', 'All'), ('orphan', 'Orphan')] + \
            [(p.username, p.get_full_name()) for p in people]
        packagers = [('', 'All'), ('unknown', 'Unknown')] + \
            [(p.username, p.get_full_name()) for p in people]

        self.fields['maintainer'].choices = maintainers
        self.fields['packager'].choices = packagers

    def exact_matches(self):
        # only do exact match search if 'q' is sole parameter
        if self.changed_data != ['q']:
            return []
        if 'q' not in self.cleaned_data:
            return []
        return Package.objects.normal().filter(
            pkgname__iexact=self.cleaned_data['q'])
Пример #12
0
    def __init__(self, *args, **kwargs):
        show_staging = kwargs.pop('show_staging', False)
        super(PackageSearchForm, self).__init__(*args, **kwargs)
        repos = Repo.objects.all()
        if not show_staging:
            repos = repos.filter(staging=False)
        self.fields['repo'].choices = make_choice(
                        [repo.name for repo in repos])
        self.fields['arch'].choices = make_choice(
                        [arch.name for arch in Arch.objects.all()])
        self.fields['q'].widget.attrs.update({"size": "30"})

        profile_ids = UserProfile.allowed_repos.through.objects.values('userprofile_id')
        people = User.objects.filter(
                is_active=True, userprofile__id__in=profile_ids).order_by(
                'first_name', 'last_name')
        maintainers = [('', 'All'), ('orphan', 'Orphan')] + \
                 [(p.username, p.get_full_name()) for p in people]
        packagers = [('', 'All'), ('unknown', 'Unknown')] + \
                 [(p.username, p.get_full_name()) for p in people]

        self.fields['maintainer'].choices = maintainers
        self.fields['packager'].choices = packagers
Пример #13
0
class PackageSearchForm(forms.Form):
    repo = forms.MultipleChoiceField(required=False)
    arch = forms.MultipleChoiceField(required=False)
    name = forms.CharField(required=False)
    desc = forms.CharField(required=False)
    q = forms.CharField(required=False)
    sort = forms.CharField(required=False, widget=forms.HiddenInput())
    maintainer = forms.ChoiceField(required=False)
    packager = forms.ChoiceField(required=False)
    last_update = forms.DateField(required=False,
                                  widget=AdminDateWidget(),
                                  label='Last Updated After')
    flagged = forms.ChoiceField(choices=[('', 'All')] +
                                make_choice(['Flagged', 'Not Flagged']),
                                required=False)
    limit = LimitTypedChoiceField(choices=make_choice([50, 100, 250]) +
                                  [('all', 'All')],
                                  coerce=coerce_limit_value,
                                  required=False,
                                  initial=50)

    def __init__(self, *args, **kwargs):
        super(PackageSearchForm, self).__init__(*args, **kwargs)
        self.fields['repo'].choices = make_choice(
            [repo.name for repo in Repo.objects.all()])
        self.fields['arch'].choices = make_choice(
            [arch.name for arch in Arch.objects.all()])
        self.fields['q'].widget.attrs.update({"size": "30"})
        maints = User.objects.filter(is_active=True).order_by(
            'first_name', 'last_name')
        self.fields['maintainer'].choices = \
                [('', 'All'), ('orphan', 'Orphan')] + \
                [(m.username, m.get_full_name()) for m in maints]
        self.fields['packager'].choices = \
                [('', 'All'), ('unknown', 'Unknown')] + \
                [(m.username, m.get_full_name()) for m in maints]