コード例 #1
0
class Query(ObjectType):
    user = Node.Field(UserNode)
    all_users = DjangoFilterConnectionField(UserNode)
コード例 #2
0
 class Query(ObjectType):
     all_reporters = DjangoFilterConnectionField(ReporterFilterNode)
コード例 #3
0
 class Query(ObjectType):
     all_reporters = DjangoFilterConnectionField(
         ReporterType, filterset_class=ReporterFilter)
コード例 #4
0
 class Query(ObjectType):
     context_articles = DjangoFilterConnectionField(
         ArticleNode, filterset_class=ArticleContextFilter)
コード例 #5
0
 class Query(ObjectType):
     all_reporters = DjangoFilterConnectionField(ReporterFilterNode)
     all_articles = DjangoFilterConnectionField(ArticleFilterNode)
     reporter = Field(ReporterFilterNode)
     article = Field(ArticleFilterNode)
コード例 #6
0
def test_filter_explicit_filterset_orderable():
    field = DjangoFilterConnectionField(ReporterNode,
                                        filterset_class=ReporterFilter)
    assert_orderable(field)
コード例 #7
0
def test_filter_explicit_filterset_not_orderable():
    field = DjangoFilterConnectionField(PetNode, filterset_class=PetFilter)
    assert_not_orderable(field)
コード例 #8
0
def test_filter_shortcut_filterset_orderable_headline():
    field = DjangoFilterConnectionField(ArticleNode, order_by=['headline'])
    assert_orderable(field)
コード例 #9
0
def test_filter_shortcut_filterset_extra_meta():
    field = DjangoFilterConnectionField(ArticleNode, extra_filter_meta={
        'order_by': True
    })
    assert_orderable(field)
コード例 #10
0
def test_filter_explicit_filterset_orderable():
    field = DjangoFilterConnectionField(ArticleNode, filterset_class=ArticleFilter)
    assert_orderable(field)
コード例 #11
0
def test_filter_shortcut_filterset_orderable_true():
    field = DjangoFilterConnectionField(ArticleNode, order_by=True)
    assert_orderable(field)
コード例 #12
0
class Query(ObjectType):
    adult = Node.Field(AdultNode)
    all_adults = DjangoFilterConnectionField(AdultNode)
コード例 #13
0
class Query(ObjectType):
  book = relay.Node.Field(BookNode)
  books = DjangoFilterConnectionField(BookNode, filterset_class=BookFilter)
  author = relay.Node.Field(AuthorNode)
  authors = DjangoFilterConnectionField(AuthorNode)
コード例 #14
0
class Query:
    availability_levels = DjangoListField(AvailabilityLevelType)
    boat_types = DjangoListField(BoatTypeType)

    berth = relay.Node.Field(BerthNode)
    berths = DjangoConnectionField(
        BerthNode,
        harbor=graphene.ID(),
        pier=graphene.ID(),
        min_width=graphene.Float(),
        min_length=graphene.Float(),
        is_available=graphene.Boolean(),
        is_invoiceable=graphene.Boolean(),
        description=
        "If filtering by both pier and harbor and the pier does not belong to the given harbor, "
        "will return an empty list of edges."
        "\n\n**Requires permissions** to query `leases` field. "
        "Otherwise, everything is available",
    )

    pier = relay.Node.Field(PierNode)
    piers = DjangoFilterConnectionField(
        PierNode,
        min_berth_width=graphene.Float(),
        min_berth_length=graphene.Float(),
        for_application=graphene.ID(),
        description=
        "`Piers` allows to filter, among other fields, by `minBerthWidth` and `minBerthLength`.\n\n"
        "This filter is recommended over the filter in `berths`, because it yields better results. "
        "It will only return the `pier`s which contain `berth`s matching the filter, when the other will "
        "return all the available `pier`s with an empty list of `berth`s in case there's no matches.\n\n"
        "If you use both filters in the same query, you might get some empty `berth` results where both "
        "queries overlap.\n\n"
        "To filter the piers suitable for an application, you can use the `forApplication` argument. "
        "**Requires permissions** to access applications."
        "\n\nErrors:"
        "\n* Filter `forApplication` with a user without enough permissions"
        "\n * Filter `forApplication` combined with either dimension (width, length) filter",
    )

    harbor = relay.Node.Field(HarborNode)
    harbor_by_servicemap_id = graphene.Field(
        HarborNode, servicemap_id=graphene.String(required=True))
    harbors = DjangoFilterConnectionField(HarborNode,
                                          servicemap_ids=graphene.List(
                                              graphene.String))

    winter_storage_place = relay.Node.Field(WinterStoragePlaceNode)
    winter_storage_places = DjangoConnectionField(WinterStoragePlaceNode)

    winter_storage_place_type = relay.Node.Field(WinterStoragePlaceTypeNode)
    winter_storage_place_types = DjangoConnectionField(
        WinterStoragePlaceTypeNode)

    winter_storage_section = relay.Node.Field(WinterStorageSectionNode)
    winter_storage_sections = DjangoFilterConnectionField(
        WinterStorageSectionNode)

    winter_storage_area = relay.Node.Field(WinterStorageAreaNode)
    winter_storage_areas = DjangoFilterConnectionField(WinterStorageAreaNode)

    def resolve_availability_levels(self, info, **kwargs):
        return AvailabilityLevel.objects.all()

    def resolve_boat_types(self, info, **kwargs):
        return BoatType.objects.all()

    def resolve_berths(self,
                       info,
                       harbor: GlobalID = None,
                       pier: GlobalID = None,
                       min_width: Decimal = 0,
                       min_length: Decimal = 0,
                       **kwargs):
        if pier and harbor:
            raise VenepaikkaGraphQLError(
                _("Cannot pass both pier and harbor filters"))

        filters = Q()
        if harbor:
            filters &= Q(pier__harbor_id=from_global_id(harbor, HarborNode))
        if pier:
            filters &= Q(pier_id=from_global_id(pier, PierNode))
        if min_width:
            filters &= Q(berth_type__width__gte=min_width)
        if min_length:
            filters &= Q(berth_type__length__gte=min_length)
        if "is_available" in kwargs:
            filters &= Q(is_available=kwargs.get("is_available"))
        if "is_invoiceable" in kwargs:
            filters &= Q(is_invoiceable=kwargs.get("is_invoiceable"))

        return info.context.berth_loader.load_many(
            keys=Berth.objects.filter(filters).values_list("id", flat=True))

    def resolve_piers(self, info, **kwargs):
        return resolve_piers(info, **kwargs)

    def resolve_harbor_by_servicemap_id(self, info, **kwargs):
        return Harbor.objects.filter(
            servicemap_id=kwargs.get("servicemap_id")).first()

    def resolve_harbors(self, info, **kwargs):
        # TODO: optimize this further
        # currently, still results in too many DB queries
        # although, django-graphene might introduce fixes for this
        # so, check the state of this against a newer version later

        servicemap_ids = kwargs.get("servicemap_ids", None)
        qs = (Harbor.objects.filter(servicemap_id__in=servicemap_ids)
              if servicemap_ids else Harbor.objects.all())
        return qs.prefetch_related(
            "translations",
            Prefetch(
                "piers",
                queryset=Pier.objects.prefetch_related(
                    Prefetch("berths", queryset=Berth.objects.all())),
            ),
            "piers__suitable_boat_types",
        ).select_related("availability_level", "municipality")

    def resolve_winter_storage_places(self, info, **kwargs):
        return WinterStoragePlace.objects.prefetch_related(
            "winter_storage_section__area__translations",
            "winter_storage_section__area__availability_level__translations",
            "winter_storage_section__area__municipality__translations",
        ).select_related(
            "winter_storage_section",
            "winter_storage_section__area",
            "winter_storage_section__area__availability_level",
            "winter_storage_section__area__municipality",
        )

    def resolve_winter_storage_sections(self, info, **kwargs):
        return WinterStorageSection.objects.prefetch_related(
            "places",
            "area__translations",
            "area__availability_level__translations",
            "area__municipality__translations",
        ).select_related("area", "area__availability_level",
                         "area__municipality")

    def resolve_winter_storage_areas(self, info, **kwargs):
        # TODO: optimize this further
        # currently, still results in too many DB queries
        # although, django-graphene might introduce fixes for this
        # so, check the state of this against a newer version later

        return WinterStorageArea.objects.prefetch_related(
            "translations",
            Prefetch(
                "sections",
                queryset=WinterStorageSection.objects.prefetch_related(
                    Prefetch("places",
                             queryset=WinterStoragePlace.objects.all())),
            ),
        ).select_related("availability_level", "municipality")
コード例 #15
0
class WhiteCardQuery(graphene.ObjectType):
    all_white_cards = DjangoFilterConnectionField(WhiteCardNode)
コード例 #16
0
def test_global_id_field_implicit():
    field = DjangoFilterConnectionField(ArticleNode, fields=['id'])
    filterset_class = field.filterset_class
    id_filter = filterset_class.base_filters['id']
    assert isinstance(id_filter, GlobalIDFilter)
    assert id_filter.field_class == GlobalIDFormField
コード例 #17
0
 class Query(ObjectType):
     pets = DjangoFilterConnectionField(PetType)
コード例 #18
0
def test_filter_shortcut_filterset_arguments_list():
    field = DjangoFilterConnectionField(ArticleNode, fields=['pub_date', 'reporter'])
    assert_arguments(field,
                     'pub_date',
                     'reporter',
                     )
コード例 #19
0
 class Query(ObjectType):
     all_articles = DjangoFilterConnectionField(NewArticleFilterNode)
コード例 #20
0
ファイル: test_fields.py プロジェクト: petschna/linux-day
 class Query(ObjectType):
     all_reporters = DjangoFilterConnectionField(ReporterType,
                                                 reverse_order=Boolean())
コード例 #21
0
def test_filter_shortcut_filterset_extra_meta():
    field = DjangoFilterConnectionField(
        ArticleNode, extra_filter_meta={"exclude": ("headline", )})
    assert "headline" not in field.filterset_class.get_fields()
コード例 #22
0
class RelayQuery(graphene.ObjectType):
    relay_transaction = graphene.relay.Node.Field(TransactionNode)
    relay_transactions = DjangoFilterConnectionField(
        TransactionNode, filterset_class=TransactionFilter)
コード例 #23
0
def test_global_id_field_relation():
    field = DjangoFilterConnectionField(ArticleNode, fields=["reporter"])
    filterset_class = field.filterset_class
    id_filter = filterset_class.base_filters["reporter"]
    assert isinstance(id_filter, GlobalIDFilter)
    assert id_filter.field_class == GlobalIDFormField
コード例 #24
0
class Query(AbstractType):
    all_locations = DjangoFilterConnectionField(LocationNode)
コード例 #25
0
def test_global_id_multiple_field_implicit_reverse():
    field = DjangoFilterConnectionField(ReporterNode, fields=["articles"])
    filterset_class = field.filterset_class
    multiple_filter = filterset_class.base_filters["articles"]
    assert isinstance(multiple_filter, GlobalIDMultipleChoiceFilter)
    assert multiple_filter.field_class == GlobalIDMultipleChoiceField
コード例 #26
0
class AccountQuery(AbstractType):
    accounts = DjangoFilterConnectionField(AccountNode)
    account = relay.Node.Field(AccountNode)
コード例 #27
0
    class Query(ObjectType):
        all_reporters = DjangoFilterConnectionField(
            ReporterType, filterset_class=ReporterFilter)

        def resolve_all_reporters(self, info, **args):
            return Reporter.objects.order_by("a_choice")
コード例 #28
0
class RelayQuery(graphene.ObjectType):
    relay_link = graphene.relay.Node.Field(LinkNode)
    relay_links = DjangoFilterConnectionField(
        LinkNode, filterset_class=LinkFilter)
コード例 #29
0
def test_filter_shortcut_filterset_arguments_list():
    field = DjangoFilterConnectionField(ArticleNode,
                                        fields=["pub_date", "reporter"])
    assert_arguments(field, "pub_date", "reporter")
コード例 #30
0
ファイル: schema.py プロジェクト: werl81/photonix
class Query(graphene.ObjectType):
    all_libraries = graphene.List(LibraryType)

    camera = graphene.Field(CameraType,
                            id=graphene.UUID(),
                            make=graphene.String(),
                            model=graphene.String())
    all_cameras = graphene.List(CameraType)

    lens = graphene.Field(LensType, id=graphene.UUID(), name=graphene.String())
    all_lenses = graphene.List(LensType)

    all_apertures = graphene.List(graphene.Float)
    all_exposures = graphene.List(graphene.String)
    all_iso_speeds = graphene.List(graphene.Int)
    all_focal_lengths = graphene.List(graphene.Float)
    all_metering_modes = graphene.List(graphene.String)
    all_drive_modes = graphene.List(graphene.String)
    all_shooting_modes = graphene.List(graphene.String)

    photo = graphene.Field(PhotoNode, id=graphene.UUID())
    all_photos = DjangoFilterConnectionField(PhotoNode,
                                             filterset_class=PhotoFilter)

    all_location_tags = graphene.List(LocationTagType)
    all_object_tags = graphene.List(ObjectTagType)
    all_person_tags = graphene.List(PersonTagType)
    all_color_tags = graphene.List(ColorTagType)
    all_style_tags = graphene.List(StyleTagType)

    def resolve_all_libraries(self, info, **kwargs):
        user = info.context.user
        return Library.objects.filter(users__user=user)

    def resolve_camera(self, info, **kwargs):
        id = kwargs.get('id')
        make = kwargs.get('make')
        model = kwargs.get('model')

        if id is not None:
            return Camera.objects.get(pk=id)

        if make is not None and model is not None:
            return Camera.objects.get(make=make, model=model)

        return None

    @login_required
    def resolve_all_cameras(self, info, **kwargs):
        user = info.context.user
        return Camera.objects.filter(library__users__user=user)

    def resolve_lens(self, info, **kwargs):
        id = kwargs.get('id')
        name = kwargs.get('name')

        if id is not None:
            return Lens.objects.get(pk=id)

        if name is not None:
            return Lens.objects.get(name=name)

        return None

    def resolve_all_lenses(self, info, **kwargs):
        user = info.context.user
        return Lens.objects.filter(library__users__user=user)

    def resolve_all_apertures(self, info, **kwargs):
        user = info.context.user
        return Photo.objects.filter(library__users__user=user).exclude(
            aperture__isnull=True).values_list(
                'aperture', flat=True).distinct().order_by('aperture')

    def resolve_all_exposures(self, info, **kwargs):
        user = info.context.user
        return Photo.objects.filter(library__users__user=user).exclude(
            exposure__isnull=True).values_list(
                'exposure', flat=True).distinct().order_by('exposure')

    def resolve_all_iso_speeds(self, info, **kwargs):
        user = info.context.user
        return Photo.objects.filter(library__users__user=user).exclude(
            iso_speed__isnull=True).values_list(
                'iso_speed', flat=True).distinct().order_by('iso_speed')

    def resolve_all_focal_lengths(self, info, **kwargs):
        user = info.context.user
        return Photo.objects.filter(library__users__user=user).exclude(
            focal_length__isnull=True).values_list(
                'focal_length', flat=True).distinct().order_by('focal_length')

    def resolve_all_metering_modes(self, info, **kwargs):
        user = info.context.user
        return Photo.objects.filter(library__users__user=user).exclude(
            metering_mode__isnull=True).values_list(
                'metering_mode',
                flat=True).distinct().order_by('metering_mode')

    def resolve_all_drive_modes(self, info, **kwargs):
        user = info.context.user
        return Photo.objects.filter(library__users__user=user).exclude(
            drive_mode__isnull=True).values_list(
                'drive_mode', flat=True).distinct().order_by('drive_mode')

    def resolve_all_shooting_modes(self, info, **kwargs):
        user = info.context.user
        return Photo.objects.filter(library__users__user=user).exclude(
            shooting_mode__isnull=True).values_list(
                'shooting_mode',
                flat=True).distinct().order_by('shooting_mode')

    def resolve_photo(self, info, **kwargs):
        id = kwargs.get('id')
        if id is not None:
            return Photo.objects.get(pk=id)
        return None

    @login_required
    def resolve_all_photos(self, info, **kwargs):
        user = info.context.user
        return Photo.objects.filter(library__users__user=user)

    def resolve_all_location_tags(self, info, **kwargs):
        user = info.context.user
        return Tag.objects.filter(library__users__user=user, type='L')

    def resolve_all_object_tags(self, info, **kwargs):
        user = info.context.user
        return Tag.objects.filter(library__users__user=user, type='O')

    def resolve_all_person_tags(self, info, **kwargs):
        user = info.context.user
        return Tag.objects.filter(library__users__user=user, type='P')

    def resolve_all_color_tags(self, info, **kwargs):
        user = info.context.user
        return Tag.objects.filter(library__users__user=user, type='C')

    def resolve_all_style_tags(self, info, **kwargs):
        user = info.context.user
        return Tag.objects.filter(library__users__user=user, type='S')