Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
H
hub
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Deploy
Releases
Package registry
Model registry
Operate
Terraform modules
Analyze
Contributor analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
GitLab community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
cyroxx
hub
Commits
c89f2221
Commit
c89f2221
authored
Oct 11, 2020
by
Andreas Hubel
Browse files
Options
Downloads
Patches
Plain Diff
first draft for read-only graphql api
parent
8edb2eae
Branches
graphql
No related tags found
No related merge requests found
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
src/api/schema.py
+11
-0
11 additions, 0 deletions
src/api/schema.py
src/api/urls.py
+3
-0
3 additions, 0 deletions
src/api/urls.py
src/core/schema.py
+120
-0
120 additions, 0 deletions
src/core/schema.py
src/rc3platform/settings/base.py
+6
-0
6 additions, 0 deletions
src/rc3platform/settings/base.py
with
140 additions
and
0 deletions
src/api/schema.py
0 → 100644
+
11
−
0
View file @
c89f2221
import
graphene
import
core.schema
class
Query
(
core
.
schema
.
Query
,
graphene
.
ObjectType
):
# This class will inherit from multiple Queries
# as we begin to add more apps to our project
pass
schema
=
graphene
.
Schema
(
query
=
Query
)
This diff is collapsed.
Click to expand it.
src/api/urls.py
+
3
−
0
View file @
c89f2221
from
django.urls
import
include
,
path
from
rest_framework.urlpatterns
import
format_suffix_patterns
from
graphene_django.views
import
GraphQLView
from
.
import
views
...
...
@@ -10,6 +11,8 @@ urlpatterns = [
path
(
'
stickers
'
,
views
.
stickers
,
name
=
'
stickers
'
),
path
(
'
friends
'
,
views
.
friends
,
name
=
'
friends
'
),
path
(
'
conferences
'
,
views
.
ConferenceList
.
as_view
(),
name
=
'
conference-list
'
),
path
(
'
graphql
'
,
GraphQLView
.
as_view
(
graphiql
=
True
)),
path
(
'
<slug:conference>
'
,
views
.
ConferenceDetail
.
as_view
(),
name
=
'
conference-detail
'
),
path
(
'
<slug:conference>/tracks
'
,
views
.
ConferenceTrackList
.
as_view
(),
name
=
'
conferencetrack-list
'
),
path
(
'
<slug:conference>/track/<slug:track>
'
,
views
.
ConferenceTrackDetail
.
as_view
(),
name
=
'
conferencetrack-detail
'
),
...
...
This diff is collapsed.
Click to expand it.
src/core/schema.py
0 → 100644
+
120
−
0
View file @
c89f2221
from
graphene
import
relay
,
ObjectType
,
List
,
Field
,
String
from
graphene_django
import
DjangoObjectType
from
graphene_django.filter
import
DjangoFilterConnectionField
from
core.models
import
Conference
,
ConferenceTrack
,
Venue
,
Event
,
Room
,
RoomLink
,
Sticker
,
UserProfile
from
api
import
views
# pylint: disable=no-self-argument, no-member
class
ConferenceTrackType
(
DjangoObjectType
):
class
Meta
:
model
=
ConferenceTrack
filter_fields
=
[
'
slug
'
,
'
name
'
]
interfaces
=
(
relay
.
Node
,
)
class
RoomType
(
DjangoObjectType
):
class
Meta
:
model
=
Room
filter_fields
=
[
'
id
'
,
'
name
'
,
'
room_type
'
]
interfaces
=
(
relay
.
Node
,
)
class
VenueType
(
DjangoObjectType
):
class
Meta
:
model
=
Venue
filter_fields
=
[
'
id
'
,
'
name
'
]
interfaces
=
(
relay
.
Node
,
)
#path('<slug:conference>/venue/<slug:venue>/rooms', views.ConferenceVenueRoomList.as_view(), name='venue-rooms'),
rooms
=
List
(
RoomType
)
def
resolve_rooms
(
venue
,
info
):
return
Room
.
objects
.
filter
(
conference__slug
=
venue
.
conference
.
slug
,
venue__slug
=
venue
.
slug
).
order_by
(
'
name
'
)
class
LinkType
(
DjangoObjectType
):
class
Meta
:
model
=
RoomLink
filter_fields
=
[
'
name
'
,
'
link_type
'
]
interfaces
=
(
relay
.
Node
,
)
class
ConferenceType
(
DjangoObjectType
):
class
Meta
:
model
=
Conference
filter_fields
=
[
'
id
'
,
'
slug
'
,
'
name
'
]
interfaces
=
(
relay
.
Node
,
)
tracks
=
List
(
ConferenceTrackType
)
def
resolve_tracks
(
conference
,
info
):
#return views.ConferenceTrackList.get_queryset(conference=parent.slug)
return
ConferenceTrack
.
objects
.
filter
(
conference__slug
=
conference
.
slug
).
order_by
(
'
name
'
)
track
=
Field
(
ConferenceTrackType
,
slug
=
String
(
required
=
True
))
def
resolve_track
(
conference
,
info
,
slug
):
#return views.ConferenceTrackList.get_queryset(conference=parent.slug)
return
ConferenceTrack
.
objects
.
get
(
conference__slug
=
conference
.
slug
,
slug
=
slug
)
# path('<slug:conference>/venues', views.ConferenceVenueList.as_view(), name='venue-list'),
venues
=
List
(
VenueType
)
def
resolve_venues
(
conference
,
info
):
return
Venue
.
objects
.
filter
(
conference__slug
=
conference
.
slug
).
order_by
(
'
name
'
)
# path('<slug:conference>/venue/<slug:venue>', views.ConferenceVenueDetail.as_view(), name='venue-detail'),
venue
=
Field
(
VenueType
,
slug
=
String
(
required
=
True
))
def
resolve_venue
(
conference
,
info
,
slug
):
# views.ConferenceVenueDetail.get_object(conference=conference.slug, venue=slug)
return
Venue
.
objects
.
get
(
conference__slug
=
conference
.
slug
,
slug
=
slug
)
# path('<slug:conference>/rooms', views.ConferenceRoomList.as_view(), name='room-list'),
rooms
=
List
(
RoomType
)
def
resolve_rooms
(
conference
,
info
):
return
Room
.
objects
.
filter
(
conference__slug
=
conference
.
slug
).
order_by
(
'
name
'
)
# path('<slug:conference>/room/<uuid:pk>', views.ConferenceRoomDetail.as_view(), name='room-detail'),
room
=
Field
(
RoomType
,
uuid
=
String
(
required
=
True
))
def
resolve_room
(
conference
,
info
,
uuid
):
return
Room
.
objects
.
get
(
conference__slug
=
conference
.
slug
,
pk
=
uuid
)
class
StickerType
(
DjangoObjectType
):
class
Meta
:
model
=
Sticker
filter_fields
=
[
'
name
'
]
interfaces
=
(
relay
.
Node
,
)
class
Query
(
ObjectType
):
node
=
relay
.
Node
.
Field
()
#sticker = relay.Node.Field(StickerType)
sticker
=
Field
(
StickerType
,
name
=
String
(
required
=
True
))
stickers
=
List
(
StickerType
)
stickersRelay
=
DjangoFilterConnectionField
(
StickerType
)
#conference = relay.Node.Field(ConferenceType)
conference
=
Field
(
ConferenceType
,
slug
=
String
(
required
=
True
))
conferences
=
List
(
ConferenceType
)
conferencesRelay
=
DjangoFilterConnectionField
(
StickerType
)
def
resolve_me
(
root
,
info
):
pass
def
resolve_conference
(
root
,
info
,
slug
):
try
:
return
Conference
.
objects
.
get
(
slug
=
slug
)
except
Conference
.
DoesNotExist
:
return
None
def
resolve_conferences
(
root
,
info
):
return
Conference
.
objects
.
all
()
def
resolve_sticker
(
root
,
info
,
name
):
try
:
return
Conference
.
objects
.
get
(
name
=
name
)
except
Conference
.
DoesNotExist
:
return
None
def
resolve_stickers
(
root
,
info
):
return
Sticker
.
objects
.
all
()
# pylint: enable=no-self-argument, no-member
This diff is collapsed.
Click to expand it.
src/rc3platform/settings/base.py
+
6
−
0
View file @
c89f2221
...
...
@@ -50,6 +50,7 @@ INSTALLED_APPS = [
# 3rd party extensions
'
rest_framework
'
,
'
graphene_django
'
,
# our apps
'
core
'
,
...
...
@@ -141,3 +142,8 @@ STATIC_ROOT = BASE_DIR.parent / 'static.dist'
# STATICFILES_DIRS = [
# BASE_DIR / "static",
# ]
GRAPHENE
=
{
"
SCHEMA
"
:
"
api.schema.schema
"
}
\ No newline at end of file
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment