예제 #1
0
    def clean(self):
        cleaned_data = super().clean()
        config = cleaned_data.get("config")
        media = cleaned_data.get("media")
        kind = cleaned_data.get("kind")
        address = cleaned_data.get("address")

        if kind == Media.PHYSICAL and (not address
                                       or not address.physical_compatible):
            self.add_error(
                "address",
                _("This address can't be used as it misses postal details"))

        if config is not None:
            # save config if its size changed
            if config.size_value_changed():
                config.save()

        if config is not None and media is not None and not config.can_fit_on(
                media):
            min_media = Media.get_min_for(config.size)
            if min_media is None:
                msg = _("There is no large enough Media for this config.")
                field = "config"
            else:
                msg = _(
                    "Media not large enough for config (use at least %(media)s)"
                ) % {
                    "media": min_media.name
                }
                field = "media"
            self.add_error(field, msg)
예제 #2
0
def required_size_for_config(request):
    try:
        payload = request.body
        if type(payload) is bytes:
            payload = payload.decode("UTF-8")
        data = json.loads(payload)
    except Exception:
        return JsonResponse({"error": str(request.body)})

    # check disk space
    collection = get_collection(
        edupi=data.get("edupi", False),
        edupi_resources=data.get("edupi_resources", None),
        nomad=data.get("nomad", False),
        mathews=data.get("mathews", False),
        africatik=data.get("africatik", False),
        packages=data.get("packages", []),
        kalite_languages=data.get("kalite", []),
        wikifundi_languages=data.get("wikifundi", []),
        aflatoun_languages=["fr", "en"] if data.get("aflatoun", False) else [],
    )
    required_image_size = get_required_image_size(collection)
    media = Media.get_min_for(required_image_size)
    return JsonResponse({
        "size":
        required_image_size,
        "hsize":
        human_readable_size(required_image_size, False),
        "media_size":
        human_readable_size(media.size * ONE_GB, False) if media else None,
        "hfree":
        human_readable_size(media.bytes -
                            required_image_size) if media else None,
    })
예제 #3
0
 def clean_media(self):
     media = Media.get_or_none(self.cleaned_data.get("media"))
     if media is None:
         raise forms.ValidationError(_("Incorrect Media"), code="invalid")
     if media.kind == Media.PHYSICAL and not self.client.can_order_physical:
         raise forms.ValidationError(_("Not allowed to order physical"),
                                     code="invalid")
     return media
예제 #4
0
 def __init__(self, *args, **kwargs):
     client = kwargs.pop("client")
     super().__init__(*args, **kwargs)
     self.client = client
     self.organization = client.organization
     self.fields["config"].choices = Configuration.get_choices(
         self.organization)
     self.fields["address"].choices = Address.get_choices(self.organization)
     self.fields["media"].choices = Media.get_choices()
예제 #5
0
파일: api.py 프로젝트: kiwix/cardshop
def media_choices_for_configuration(request, config_id):
    all_medias = Media.objects.all()

    config = Configuration.get_or_none(config_id)
    if config is not None and config.organization == request.user.profile.organization:
        medias = [m for m in all_medias if m.bytes >= config.size]
    if not medias:
        medias = all_medias.filter(size=all_medias.aggregate(Max("size"))["size__max"])
    return JsonResponse(Media.choices_for(medias), safe=False)
예제 #6
0
 def __init__(self, *args, **kwargs):
     request = kwargs.pop("request")
     super().__init__(*args, **kwargs)
     self.client = request.user.profile
     self.request_lang = get_language_from_request(request)
     self.organization = self.client.organization
     self.fields["config"].choices = Configuration.get_choices(
         self.organization)
     self.fields["address"].choices = [
         ("none", "Myself")
     ] + Address.get_choices(self.organization)
     self.fields["media"].choices = Media.get_choices(
         kind=None if self.client.can_order_physical else Media.VIRTUAL,
         display_units=self.client.is_limited,
     )
     self.fields["kind"].choices = filter(
         lambda item: self.client.can_order_physical or item[0] != Media.
         PHYSICAL,
         self.KIND_CHOICES.items(),
     )
예제 #7
0
파일: ui.py 프로젝트: palash-cj/cardshop
 def __init__(self, *args, **kwargs):
     client = kwargs.pop("client")
     print(client, client.is_limited)
     super().__init__(*args, **kwargs)
     self.client = client
     self.organization = client.organization
     self.fields["config"].choices = Configuration.get_choices(
         self.organization)
     self.fields["address"].choices = [
         ("none", "Myself")
     ] + Address.get_choices(self.organization)
     self.fields["media"].choices = Media.get_choices(
         kind=None if client.can_order_physical else Media.VIRTUAL,
         display_units=client.is_limited,
     )
     self.fields["kind"].choices = filter(
         lambda item: client.can_order_physical or item[0] != Media.
         PHYSICAL,
         self.KIND_CHOICES.items(),
     )
예제 #8
0
    def clean(self):
        cleaned_data = super().clean()
        config = cleaned_data.get("config")
        media = cleaned_data.get("media")
        kind = cleaned_data.get("kind")
        address = cleaned_data.get("address")

        if kind == media.PHYSICAL and not address.physical_compatible:
            self.add_error(
                "address",
                "This address can't be used as it misses postal details")

        if config is not None and media is not None and not config.can_fit_on(
                media):
            min_media = Media.get_min_for(config.size)
            if min_media is None:
                msg = "There is no large enough Media for this config."
                field = "config"
            else:
                msg = "Media not large enough for config (use at least {})".format(
                    min_media.name)
                field = "media"
            self.add_error(field, msg)
예제 #9
0
 def PHYSICAL_CHOICES(self):
     return Media.get_choices(kind=Media.PHYSICAL)
예제 #10
0
 def VIRTUAL_CHOICES(self):
     return Media.get_choices(kind=Media.VIRTUAL)
예제 #11
0
 def clean_media(self):
     media = Media.get_or_none(self.cleaned_data.get("media"))
     if media is None:
         raise forms.ValidationError("Incorrect Media", code="invalid")
     return media