Skip to content

Commit

Permalink
#126 new strawberry filters
Browse files Browse the repository at this point in the history
  • Loading branch information
BranDavidSebastian committed Nov 4, 2024
1 parent ff16e1c commit dba76fd
Show file tree
Hide file tree
Showing 23 changed files with 79 additions and 105 deletions.
2 changes: 1 addition & 1 deletion OneSila/OneSila/settings/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -193,7 +193,7 @@
"FIELD_DESCRIPTION_FROM_HELP_TEXT": True,
"TYPE_DESCRIPTION_FROM_MODEL_DOCSTRING": True,
"MAP_AUTO_ID_AS_GLOBAL_ID": True,
"USE_DEPRECATED_FILTERS": True,
"USE_DEPRECATED_FILTERS": False,
}

# https://channels.readthedocs.io/en/stable/topics/channel_layers.html
Expand Down
1 change: 0 additions & 1 deletion OneSila/OneSila/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,6 @@
AsyncGraphQLView.as_view(
schema=schema,
graphiql=settings.DEBUG,
subscriptions_enabled=True
),
name='graphql',
),
Expand Down
8 changes: 0 additions & 8 deletions OneSila/contacts/schema/types/filters.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@

@filter(Company)
class CompanyFilter(SearchFilterMixin):
search: str | None
id: auto
name: auto
language: auto
Expand All @@ -21,15 +20,13 @@ class CompanyFilter(SearchFilterMixin):

@filter(Supplier)
class SupplierFilter(SearchFilterMixin, ExcluideDemoDataFilterMixin):
search: str | None
id: auto
name: auto
exclude_demo_data: Optional[bool]


@filter(Customer)
class CustomerFilter(SearchFilterMixin, ExcluideDemoDataFilterMixin):
search: str | None
id: auto
name: auto
exclude_demo_data: Optional[bool]
Expand All @@ -38,7 +35,6 @@ class CustomerFilter(SearchFilterMixin, ExcluideDemoDataFilterMixin):
@filter(Person)
class PersonFilter(SearchFilterMixin):
id: auto
search: str | None
active: auto
first_name: auto
last_name: auto
Expand All @@ -49,7 +45,6 @@ class PersonFilter(SearchFilterMixin):
@filter(Address)
class AddressFilter(SearchFilterMixin):
id: auto
search: str | None
company: CompanyFilter | None
is_invoice_address: auto
is_shipping_address: auto
Expand All @@ -58,19 +53,16 @@ class AddressFilter(SearchFilterMixin):
@filter(InvoiceAddress)
class InvoiceAddressFilter(SearchFilterMixin):
id: auto
search: str | None
company: CompanyFilter | None


@filter(ShippingAddress)
class ShippingAddressFilter(SearchFilterMixin):
id: auto
search: str | None
company: CompanyFilter | None


@filter(InventoryShippingAddress)
class InventoryShippingAddressFilter(SearchFilterMixin):
id: auto
search: str | None
company: CompanyFilter | None
1 change: 0 additions & 1 deletion OneSila/core/management/commands/generate_schema.py
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,6 @@ def generate_filters(app_name, models):
filter_type = [
f"@filter({model})",
f"class {model}Filter(SearchFilterMixin):",
f" search: str | None",
"",
"",
]
Expand Down
58 changes: 29 additions & 29 deletions OneSila/core/schema/core/types/filters.py
Original file line number Diff line number Diff line change
@@ -1,54 +1,54 @@
from typing import Optional

from asgiref.sync import sync_to_async
from channels.db import database_sync_to_async
from django.db.models import Q
from strawberry_django.filters import filter as strawberry_filter
# from strawberry_django import filter_field
from strawberry_django import filter_field as custom_filter
from strawberry import UNSET
from strawberry import LazyType as lazy
from core.managers import QuerySet


# class SearchFilterMixin:
# search: str | None

# # def filter_search(self, queryset) -> str | None:
# # if self.search not in (None, UNSET):
# # queryset = queryset.search(self.search)

# # return queryset

# @filter_field()
# def search(self, queryset: QuerySet, value: str, prefix: str) -> tuple:
# # Docs: https://strawberry.rocks/docs/django/guide/filters
# # FIXME: New style filter Not working.....
# return queryset.search(value)


class SearchFilterMixin:
search: str | None

def filter_search(self, queryset) -> str | None:
if self.search not in (None, UNSET):
queryset = queryset.search(self.search)
@custom_filter
def search(
self,
queryset: QuerySet,
value: str,
prefix: str
) -> tuple[QuerySet, Q]:

if value not in (None, UNSET):
queryset = queryset.search(value)

return queryset
return queryset, Q()


class ExcluideDemoDataFilterMixin:
exclude_demo_data: Optional[bool]

def filter_exclude_demo_data(self, queryset):
from django.contrib.contenttypes.models import ContentType
from core.models import DemoDataRelation
@custom_filter
def exclude_demo_data(
self,
queryset: QuerySet,
value: bool,
prefix: str
) -> tuple[QuerySet, Q]:

if value:
from django.contrib.contenttypes.models import ContentType
from core.models import DemoDataRelation

if self.exclude_demo_data:
supplier_content_type = ContentType.objects.get_for_model(queryset.model)
queryset = queryset.exclude(
id__in=DemoDataRelation.objects.filter(
content_type=supplier_content_type
).values('object_id')
).values("object_id")
)

return queryset
return queryset, Q()



def filter(*args, lookups=True, **kwargs):
Expand Down
1 change: 0 additions & 1 deletion OneSila/currencies/schema/types/filters.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@

@filter(Currency)
class CurrencyFilter(SearchFilterMixin):
search: str | None
id: auto
iso_code: auto
is_default_currency: auto
Expand Down
1 change: 0 additions & 1 deletion OneSila/customs/schema/types/filters.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@

@filter(HsCode)
class HsCodeFilter(SearchFilterMixin):
search: str | None
id: auto
code: auto
name: auto
Expand Down
1 change: 0 additions & 1 deletion OneSila/eancodes/schema/types/filters.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@

@filter(EanCode)
class EanCodeFilter(SearchFilterMixin):
search: str | None
id: auto
ean_code: auto
internal: auto
Expand Down
3 changes: 0 additions & 3 deletions OneSila/inventory/schema/types/filters.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@

@filter(InventoryLocation)
class InventoryLocationFilter(SearchFilterMixin, ExcluideDemoDataFilterMixin):
search: str | None
exclude_demo_data: Optional[bool]
id: auto
name: auto
Expand All @@ -20,7 +19,6 @@ class InventoryLocationFilter(SearchFilterMixin, ExcluideDemoDataFilterMixin):

@filter(Inventory)
class InventoryFilter(SearchFilterMixin, ExcluideDemoDataFilterMixin):
search: str | None
exclude_demo_data: Optional[bool]
id: auto
quantity: auto
Expand All @@ -30,5 +28,4 @@ class InventoryFilter(SearchFilterMixin, ExcluideDemoDataFilterMixin):
@filter(InventoryMovement)
class InventoryMovementFilter(SearchFilterMixin, ExcluideDemoDataFilterMixin):
id: auto
search: str | None
product: ProductFilter | None
3 changes: 0 additions & 3 deletions OneSila/lead_times/schema/types/filters.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,19 +7,16 @@

@filter(LeadTime)
class LeadTimeFilter(SearchFilterMixin):
search: str | None
id: auto


@filter(LeadTimeForShippingAddress)
class LeadTimeForShippingAddressFilter(SearchFilterMixin):
search: str | None
leadtime: LeadTimeFilter | None
shippingaddress: ShippingAddressFilter | None


@filter(LeadTimeProductOutOfStock)
class LeadTimeProductOutOfStockFilter(SearchFilterMixin):
search: str | None
leadtime_outofstock: LeadTimeFilter | None
product: ProductFilter | None
4 changes: 0 additions & 4 deletions OneSila/media/schema/types/filters.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,27 +9,23 @@

@filter(Media)
class MediaFilter(SearchFilterMixin):
search: str | None
id: auto
type: auto


@filter(Image)
class ImageFilter(SearchFilterMixin):
search: str | None
id: auto
image_type: auto


@filter(File)
class FileFilter(SearchFilterMixin):
search: str | None
id: auto


@filter(Video)
class VideoFilter(SearchFilterMixin):
search: str | None
id: auto


Expand Down
3 changes: 1 addition & 2 deletions OneSila/order_returns/schema/types/filters.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,10 @@

@filter(OrderReturn)
class OrderReturnFilter(SearchFilterMixin):
search: str | None
status: auto
received_on: auto


@filter(OrderReturnItem)
class OrderReturnItemFilter(SearchFilterMixin):
search: str | None
pass
3 changes: 0 additions & 3 deletions OneSila/orders/schema/types/filters.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@

@filter(Order)
class OrderFilter(SearchFilterMixin, ExcluideDemoDataFilterMixin):
search: str | None
exclude_demo_data: Optional[bool]
id: auto
reference: auto
Expand All @@ -26,14 +25,12 @@ class OrderFilter(SearchFilterMixin, ExcluideDemoDataFilterMixin):

@filter(OrderItem)
class OrderItemFilter(SearchFilterMixin):
search: str | None
id: auto
order: OrderFilter | None
product: ProductFilter | None


@filter(OrderNote)
class OrderNoteFilter(SearchFilterMixin):
search: str | None
id: auto
order: OrderFilter | None
8 changes: 0 additions & 8 deletions OneSila/products/schema/types/filters.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@

@filter(Product)
class ProductFilter(SearchFilterMixin, ExcluideDemoDataFilterMixin):
search: str | None
id: auto
sku: auto
type: auto
Expand All @@ -23,23 +22,20 @@ class ProductFilter(SearchFilterMixin, ExcluideDemoDataFilterMixin):

@filter(BundleProduct)
class BundleProductFilter(SearchFilterMixin):
search: str | None
id: auto
sku: auto
vat_rate: Optional[VatRateFilter]


@filter(ConfigurableProduct)
class ConfigurableProductFilter(SearchFilterMixin):
search: str | None
id: auto
sku: auto
vat_rate: Optional[VatRateFilter]


@filter(SimpleProduct)
class SimpleProductFilter(SearchFilterMixin):
search: str | None
id: auto
sku: auto
vat_rate: Optional[VatRateFilter]
Expand All @@ -66,23 +62,20 @@ class BundleVariationFilter:

@filter(ManufacturableProduct)
class ManufacturableProductFilter(SearchFilterMixin):
search: str | None
id: auto
sku: auto
vat_rate: Optional[VatRateFilter]


@filter(DropshipProduct)
class DropshipProductFilter(SearchFilterMixin):
search: str | None
id: auto
sku: auto
vat_rate: Optional[VatRateFilter]


@filter(SupplierProduct)
class SupplierProductFilter(SearchFilterMixin):
search: str | None
id: auto
sku: auto
supplier: Optional[SupplierFilter]
Expand All @@ -97,5 +90,4 @@ class BillOfMaterialFilter:

@filter(SupplierPrices)
class SupplierPricesFilter(SearchFilterMixin):
search: str | None
supplier_product: Optional[SupplierProductFilter]
12 changes: 12 additions & 0 deletions OneSila/products/tests/tests_schemas/queries.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,3 +21,15 @@
}
}
"""

PRODUCT_EXCLUDE_DEMO_DATA = """
query simpleProducts($excludeDemoData: Boolean!) {
simpleProducts(filters:{excludeDemoData:$excludeDemoData}) {
edges {
node {
id
}
}
}
}
"""
11 changes: 11 additions & 0 deletions OneSila/products/tests/tests_schemas/tests_queries.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,3 +21,14 @@ def test_search_product(self):
variables={"search": 'some product'},
)
self.assertTrue(resp.errors is None)


def test_exclude_demo_data_product(self):
from .queries import PRODUCT_EXCLUDE_DEMO_DATA

resp = self.strawberry_test_client(
query=PRODUCT_EXCLUDE_DEMO_DATA,
variables={"excludeDemoData": True},
)

self.assertTrue(resp.errors is None)
Loading

0 comments on commit dba76fd

Please sign in to comment.