Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Setup API for wishlists and packages #2

Open
wants to merge 13 commits into
base: main
Choose a base branch
from
Open
1 change: 1 addition & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ autoformatters: ## runs auto formatters
pip-compile:
python -m piptools compile --resolver=backtracking -o requirements/base.txt pyproject.toml
python -m piptools compile --resolver=backtracking --extra dev -o requirements/dev.txt pyproject.toml
python -m piptools compile --resolver=backtracking --extra prod -o requirements/prod.txt pyproject.toml

bootstrap: ## bootstrap project
pip install -r requirements/dev.txt
Expand Down
108 changes: 61 additions & 47 deletions fixtures/wishes.json
Original file line number Diff line number Diff line change
@@ -1,77 +1,91 @@
[
{
{
"model": "wishes.address",
"pk": 1,
"fields": {
"street": "Lea",
"post_code": "114",
"city": "Kraków",
"country": "Polska",
"lng": "19.902106",
"lat": "50.071832"
"street": "Lea",
"house_number": "114",
"post_code": "30-133",
"city": "Kraków",
"country": "Polska",
"lng": "19.902106",
"lat": "50.071832"
}
},
{
},
{
"model": "wishes.address",
"pk": 2,
"fields": {
"street": "Jana Matejki 1/5",
"post_code": "00-481",
"city": "Warszawa",
"country": "Polska",
"lng": "21.025711",
"lat": "52.224361"
"street": "Jana Matejki",
"house_number": "1",
"post_code": "00-481",
"city": "Warszawa",
"country": "Polska",
"lng": "21.025711",
"lat": "52.224361"
}
},
{
},
{
"model": "wishes.wishlist",
"pk": 1,
"fields": {
"name": "Joe Kernel",
"email": "[email protected]",
"content": "Dear Santa and helpers, \r\nI have been very good this year. I am expecting a little sister. I don’t want her. Momy says her will be fun. I heard girls stink. I will trade you my sister when she comes from the stork for a elf. I want a race car and a Garage set for Christmas. There will be sugar cookies and burritos waiting for you. \r\n\r\nThank you, Santa",
"status": "NEW",
"slug": "lisa-smith",
"address": 1
"name": "Joe Kernel",
"email": "[email protected]",
"content": "Dear Santa and helpers, \r\nI have been very good this year. I am expecting a little sister. I don’t want her. Momy says her will be fun. I heard girls stink. I will trade you my sister when she comes from the stork for a elf. I want a race car and a Garage set for Christmas. There will be sugar cookies and burritos waiting for you. \r\n\r\nThank you, Santa",
"status": "ACCEPTED",
"slug": "lisa-smith",
"address": 1,
"created_at": "2022-12-15T09:08:52.796Z"
}
},
{
},
{
"model": "wishes.wishlist",
"pk": 2,
"fields": {
"name": "Michael",
"email": "[email protected]",
"content": "Dear Santa, \r\nI want new car for my dad.\r\n\r\nThanks",
"status": "NEW",
"slug": "michael",
"address": 2
"name": "Michael",
"email": "[email protected]",
"content": "Dear Santa, \r\nI want new car for my dad.\r\n\r\nThanks",
"status": "NEW",
"slug": "michael",
"address": 2,
"created_at": "2022-12-15T06:48:28.102Z"
}
},
{
},
{
"model": "wishes.wishlistitem",
"pk": 1,
"fields": {
"wish_list": 1,
"name": "Lego blocks",
"approved": false
"wish_list": 1,
"name": "Lego blocks",
"approved": false
}
},
{
},
{
"model": "wishes.wishlistitem",
"pk": 2,
"fields": {
"wish_list": 1,
"name": "Sister",
"approved": false
"wish_list": 1,
"name": "Sister",
"approved": false
}
},
{
},
{
"model": "wishes.wishlistitem",
"pk": 3,
"fields": {
"wish_list": 2,
"name": "car",
"approved": true
"wish_list": 2,
"name": "car",
"approved": true
}
}
},
{
"model": "wishes.package",
"pk": 1,
"fields": {
"wish_list": 1,
"status": "sent",
"size": "LARGE",
"created_at": "2022-12-15T09:08:52.796Z"
}
}
]
5 changes: 5 additions & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ dependencies = [
"djangorestframework",
"django-filter",
"drf-spectacular",
"djangorestframework-camel-case",
"drf-mixin-tools",
]

[project.optional-dependencies]
Expand All @@ -28,6 +30,9 @@ dev = [
"factory_boy",
"pytest-factoryboy",
]
prod = [
"gunicorn",
]

[tool.black]
max-line-length = 88
Expand Down
6 changes: 6 additions & 0 deletions requirements/base.txt
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ django==4.1.3
# django-extensions
# django-filter
# djangorestframework
# drf-mixin-tools
# drf-spectacular
# santa-unchained (pyproject.toml)
django-admin-display==1.3.0
Expand All @@ -37,8 +38,13 @@ django-filter==22.1
# via santa-unchained (pyproject.toml)
djangorestframework==3.14.0
# via
# drf-mixin-tools
# drf-spectacular
# santa-unchained (pyproject.toml)
djangorestframework-camel-case==1.3.0
# via santa-unchained (pyproject.toml)
drf-mixin-tools==0.0.3
# via santa-unchained (pyproject.toml)
drf-spectacular==0.24.2
# via santa-unchained (pyproject.toml)
environs==9.5.0
Expand Down
6 changes: 6 additions & 0 deletions requirements/dev.txt
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ django==4.1.3
# django-extensions
# django-filter
# djangorestframework
# drf-mixin-tools
# drf-spectacular
# santa-unchained (pyproject.toml)
django-admin-display==1.3.0
Expand All @@ -45,8 +46,13 @@ django-filter==22.1
# via santa-unchained (pyproject.toml)
djangorestframework==3.14.0
# via
# drf-mixin-tools
# drf-spectacular
# santa-unchained (pyproject.toml)
djangorestframework-camel-case==1.3.0
# via santa-unchained (pyproject.toml)
drf-mixin-tools==0.0.3
# via santa-unchained (pyproject.toml)
drf-spectacular==0.24.2
# via santa-unchained (pyproject.toml)
environs==9.5.0
Expand Down
118 changes: 118 additions & 0 deletions requirements/prod.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
#
# This file is autogenerated by pip-compile with Python 3.10
# by the following command:
#
# pip-compile --extra=prod --output-file=requirements/prod.txt --resolver=backtracking pyproject.toml
#
asgiref==3.5.2
# via django
asttokens==2.2.1
# via stack-data
attrs==22.1.0
# via jsonschema
backcall==0.2.0
# via ipython
certifi==2022.12.7
# via requests
charset-normalizer==2.1.1
# via requests
decorator==5.1.1
# via ipython
django==4.1.4
# via
# django-admin-display
# django-debug-toolbar
# django-extensions
# django-filter
# djangorestframework
# drf-mixin-tools
# drf-spectacular
# santa-unchained (pyproject.toml)
django-admin-display==1.3.0
# via santa-unchained (pyproject.toml)
django-debug-toolbar==3.8.1
# via santa-unchained (pyproject.toml)
django-extensions==3.2.1
# via santa-unchained (pyproject.toml)
django-filter==22.1
# via santa-unchained (pyproject.toml)
djangorestframework==3.14.0
# via
# drf-mixin-tools
# drf-spectacular
# santa-unchained (pyproject.toml)
djangorestframework-camel-case==1.3.0
# via santa-unchained (pyproject.toml)
drf-mixin-tools==0.0.3
# via santa-unchained (pyproject.toml)
drf-spectacular==0.25.0
# via santa-unchained (pyproject.toml)
environs==9.5.0
# via santa-unchained (pyproject.toml)
executing==1.2.0
# via stack-data
gunicorn==20.1.0
# via santa-unchained (pyproject.toml)
idna==3.4
# via requests
inflection==0.5.1
# via drf-spectacular
ipython==8.7.0
# via santa-unchained (pyproject.toml)
jedi==0.18.2
# via ipython
jsonschema==4.17.3
# via drf-spectacular
marshmallow==3.19.0
# via environs
matplotlib-inline==0.1.6
# via ipython
packaging==22.0
# via marshmallow
parso==0.8.3
# via jedi
pexpect==4.8.0
# via ipython
pickleshare==0.7.5
# via ipython
prompt-toolkit==3.0.36
# via ipython
psycopg2-binary==2.9.5
# via santa-unchained (pyproject.toml)
ptyprocess==0.7.0
# via pexpect
pure-eval==0.2.2
# via stack-data
pygments==2.13.0
# via ipython
pyrsistent==0.19.2
# via jsonschema
python-dotenv==0.21.0
# via environs
pytz==2022.6
# via djangorestframework
pyyaml==6.0
# via drf-spectacular
requests==2.28.1
# via santa-unchained (pyproject.toml)
six==1.16.0
# via asttokens
sqlparse==0.4.3
# via
# django
# django-debug-toolbar
stack-data==0.6.2
# via ipython
traitlets==5.7.1
# via
# ipython
# matplotlib-inline
uritemplate==4.1.1
# via drf-spectacular
urllib3==1.26.13
# via requests
wcwidth==0.2.5
# via prompt-toolkit

# The following packages are considered to be unsafe in a requirements file:
# setuptools
Empty file.
15 changes: 15 additions & 0 deletions santa_unchained/api_utils/mixins.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
from typing import Dict

from rest_framework.serializers import Serializer


class ActionSerializerClassMixin:
lchojnacki marked this conversation as resolved.
Show resolved Hide resolved
action_serializer_class: Dict[str, Serializer] = {}

def get_serializer_class(self):
if (
self.action_serializer_class
and self.action in self.action_serializer_class # type: ignore
):
return self.action_serializer_class[self.action] # type: ignore
return super().get_serializer_class() # type: ignore
9 changes: 9 additions & 0 deletions santa_unchained/settings/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,15 @@
),
"DEFAULT_FILTER_BACKENDS": ("django_filters.rest_framework.DjangoFilterBackend",),
"DEFAULT_SCHEMA_CLASS": "drf_spectacular.openapi.AutoSchema",
"DEFAULT_RENDERER_CLASSES": (
"djangorestframework_camel_case.render.CamelCaseJSONRenderer",
"djangorestframework_camel_case.render.CamelCaseBrowsableAPIRenderer",
),
"DEFAULT_PARSER_CLASSES": (
"djangorestframework_camel_case.parser.CamelCaseFormParser",
"djangorestframework_camel_case.parser.CamelCaseMultiPartParser",
"djangorestframework_camel_case.parser.CamelCaseJSONParser",
),
}

# ------------- SWAGGER ------------
Expand Down
2 changes: 1 addition & 1 deletion santa_unchained/settings/production.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,5 +41,5 @@
}

# ------------- STATIC -------------
STATIC_ROOT = BASE_DIR.parent.joinpath("public")
STATIC_ROOT = BASE_DIR.parent.joinpath("static")
MEDIA_ROOT = BASE_DIR.parent.joinpath("media")
4 changes: 2 additions & 2 deletions santa_unchained/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,13 @@
)

from santa_unchained.accounts import urls as accounts_urls
from santa_unchained.wishes import urls as wishes_urls
from santa_unchained.wishes.urls import router as wishes_router

urlpatterns = [
path("admin/", admin.site.urls),
path("__debug__/", include("debug_toolbar.urls")),
path("", include(accounts_urls)),
path("wishes/", include(wishes_urls)),
path("api/", include(wishes_router.urls)),
path("api/schema/", SpectacularAPIView.as_view(), name="schema"),
path(
"api/doc/", SpectacularRedocView.as_view(url_name="schema"), name="schema-redoc"
Expand Down
Loading