Skip to content

Commit ffdd97f

Browse files
author
Nicholas
authored
Graphql groups resolvers (canada-ca#88)
* Started work on groups resolvers * Started work on groups resolvers testing * Added docstrings to group resolvers * Group resolver test has now been updated to match changes with new db system * Updated groups resovlers to include description. Added enums to group selections * Initial testing started * cloudbuild.yaml update * Fixed tests for sectors and groups to remove information after testing to remove conflicts between tests * Cleaning up groups and sectors resolvers test files * Added invalid request resolver tests
1 parent fb8c16c commit ffdd97f

6 files changed

Lines changed: 351 additions & 69 deletions

File tree

api/Pipfile.lock

Lines changed: 48 additions & 53 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

api/queries.py

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,35 +6,39 @@
66
import pyotp
77

88
from model_enums.sectors import SectorEnums, ZoneEnums
9-
10-
from schemas.user import (
11-
UserConnection,
12-
CreateUser,
13-
SignInUser,
14-
UpdateUserPassword
15-
)
9+
from model_enums.groups import GroupEnums
1610

1711
from schemas.user import *
1812

1913
from schemas.sectors import Sectors
14+
from schemas.groups import Groups
15+
2016

2117
from resolvers.sectors import (
2218
resolve_get_sector_by_id,
2319
resolve_get_sectors_by_sector,
2420
resolve_get_sector_by_zone
2521
)
2622

23+
from resolvers.groups import (
24+
resolve_get_group_by_id,
25+
resolve_get_group_by_group,
26+
resolve_get_group_by_sector
27+
)
28+
2729

2830
class Query(graphene.ObjectType):
2931
"""The central gathering point for all of the GraphQL queries."""
3032
node = relay.Node.Field()
3133
all_users = SQLAlchemyConnectionField(UserConnection, sort=None)
3234
# all_users = graphene.List(UserObject, failedAttempts=graphene.Int(), resolver=resolve_all_users)
35+
# all_sectors = SQLAlchemyConnectionField(SectorsConnection, sort=None)
36+
# all_groups = SQLAlchemyConnectionField(GroupsConnection, sort=None)
3337
get_sector_by_id = graphene.List(
3438
of_type=Sectors,
3539
id=graphene.Argument(graphene.Int, required=True),
3640
resolver=resolve_get_sector_by_id,
37-
description="Allows selection of all sectors from a given sector ID"
41+
description="Allows selection of a sector from a given sector ID"
3842
)
3943
get_sectors_by_sector = graphene.List(
4044
of_type=Sectors,
@@ -48,6 +52,24 @@ class Query(graphene.ObjectType):
4852
resolver=resolve_get_sector_by_zone,
4953
description="Allows selection of all sectors from a given zone enum"
5054
)
55+
get_group_by_id = graphene.List(
56+
of_type=Groups,
57+
id=graphene.Argument(graphene.Int, required=False),
58+
resolver=resolve_get_group_by_id,
59+
description="Allows selection of a group from a given group ID"
60+
)
61+
get_group_by_group = graphene.List(
62+
of_type=Groups,
63+
group=graphene.Argument(GroupEnums, required=True),
64+
resolver=resolve_get_group_by_group,
65+
description="Allows the selection of group information from a given group enum"
66+
)
67+
get_group_by_sector = graphene.List(
68+
of_type=Groups,
69+
sector=graphene.Argument(SectorEnums, required=True),
70+
resolver=resolve_get_group_by_sector,
71+
description="Allows selection of groups from a given sector enum"
72+
)
5173

5274
generate_otp_url = String(email=String(required=True))
5375

api/resolvers/groups.py

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
from graphql import GraphQLError
2+
from sqlalchemy.orm import load_only
3+
4+
from schemas.groups import (
5+
Groups,
6+
GroupsModel
7+
)
8+
9+
from schemas.sectors import (
10+
Sectors,
11+
SectorsModel
12+
)
13+
14+
15+
# Resolvers
16+
def resolve_get_group_by_id(self, info, **kwargs):
17+
"""Return a group by its row ID"""
18+
group_id = kwargs.get('id', 1)
19+
query = Groups.get_query(info).filter(
20+
GroupsModel.id == group_id
21+
)
22+
if not len(query.all()):
23+
raise GraphQLError("Error, Invalid ID")
24+
return query.all()
25+
26+
27+
def resolve_get_group_by_group(self, info, **kwargs):
28+
"""Return a list of groups by its group"""
29+
group = kwargs.get('group')
30+
query = Groups.get_query(info).filter(
31+
GroupsModel.s_group == group
32+
)
33+
if not len(query.all()):
34+
raise GraphQLError("Error, group does not exist ")
35+
return query.all()
36+
37+
38+
def resolve_get_group_by_sector(self, info, **kwargs):
39+
"""Return a list of groups by by their associated sector"""
40+
sector = kwargs.get('sector')
41+
42+
sector_id = Sectors.get_query(info).filter(
43+
SectorsModel.sector == sector
44+
).options(load_only('id'))
45+
46+
if not len(sector_id.all()):
47+
raise GraphQLError("Error, no sector associated with that enum")
48+
49+
query = Groups.get_query(info).filter(
50+
GroupsModel.sector_id == sector_id
51+
)
52+
53+
if not len(query.all()):
54+
raise GraphQLError("Error, no groups associated with that sector")
55+
return query.all()

api/schemas/groups.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import graphene
22
from graphene import relay
3-
from graphene_sqlalchemy import SQLAlchemyObjectType, SQLAlchemyConnectionField
3+
from graphene_sqlalchemy import SQLAlchemyObjectType
44

55
from models import Groups as GroupsModel
66

0 commit comments

Comments
 (0)