Download Code/GraphQL/09_schema_data.py from zxy0307/Python_05_Flask: direct link, hf CLI and curl.
- Browser
- Download file 3.51 kB
-
https://huggingface.co/zxy0307/Python_05_Flask/resolve/main/Code/GraphQL/09_schema_data.py
- Command line
-
hf download hf://zxy0307/Python_05_Flask/Code/GraphQL/09_schema_data.py
-
curl -L -o 09_schema_data.py https://huggingface.co/zxy0307/Python_05_Flask/resolve/main/Code/GraphQL/09_schema_data.py
3.51 kB
| human_data = {} | |
| droid_data = {} | |
| ''' | |
| ===================== data ========================= | |
| ''' | |
| def setup(): | |
| global human_data, droid_data | |
| luke = Human( | |
| id="1000", | |
| name="Luke Skywalker", | |
| friends=["1002", "1003", "2000", "2001"], | |
| appears_in=[4, 5, 6], | |
| home_planet="Tatooine", | |
| ) | |
| vader = Human( | |
| id="1001", | |
| name="Darth Vader", | |
| friends=["1004"], | |
| appears_in=[4, 5, 6], | |
| home_planet="Tatooine", | |
| ) | |
| han = Human( | |
| id="1002", | |
| name="Han Solo", | |
| friends=["1000", "1003", "2001"], | |
| appears_in=[4, 5, 6], | |
| home_planet=None, | |
| ) | |
| leia = Human( | |
| id="1003", | |
| name="Leia Organa", | |
| friends=["1000", "1002", "2000", "2001"], | |
| appears_in=[4, 5, 6], | |
| home_planet="Alderaan", | |
| ) | |
| tarkin = Human( | |
| id="1004", | |
| name="Wilhuff Tarkin", | |
| friends=["1001"], | |
| appears_in=[4], | |
| home_planet=None, | |
| ) | |
| human_data = { | |
| "1000": luke, | |
| "1001": vader, | |
| "1002": han, | |
| "1003": leia, | |
| "1004": tarkin, | |
| } | |
| c3po = Droid( | |
| id="2000", | |
| name="C-3PO", | |
| friends=["1000", "1002", "1003", "2001"], | |
| appears_in=[4, 5, 6], | |
| primary_function="Protocol", | |
| ) | |
| r2d2 = Droid( | |
| id="2001", | |
| name="R2-D2", | |
| friends=["1000", "1002", "1003"], | |
| appears_in=[4, 5, 6], | |
| primary_function="Astromech", | |
| ) | |
| droid_data = {"2000": c3po, "2001": r2d2} | |
| def get_character(id): | |
| return human_data.get(id) or droid_data.get(id) | |
| def get_friends(character): | |
| return map(get_character, character.friends) | |
| def get_hero(episode): | |
| if episode == 5: | |
| return human_data["1000"] | |
| return droid_data["2001"] | |
| def get_human(id): | |
| return human_data.get(id) | |
| def get_droid(id): | |
| return droid_data.get(id) | |
| ''' | |
| ===================== schema ========================= | |
| ''' | |
| import graphene | |
| from flask_graphql import GraphQLView | |
| from flask import Flask | |
| class Episode(graphene.Enum): # 剧集 | |
| NEWHOPE = 4 # 星球大战4 新希望 | |
| EMPIRE = 5 # 黑金帝国 | |
| JEDI = 6 # 星球大战 绝地 | |
| class Character(graphene.Interface): # 角色 | |
| id = graphene.ID() | |
| name = graphene.String() | |
| friends = graphene.List(lambda: Character) | |
| appears_in = graphene.List(Episode) # 出演 | |
| def resolve_friends(self, info): | |
| # The character friends is a list of strings | |
| return [get_character(f) for f in self.friends] | |
| class Human(graphene.ObjectType): # 人类 | |
| class Meta: | |
| interfaces = (Character,) | |
| home_planet = graphene.String() # 地球家园 | |
| class Droid(graphene.ObjectType): # 机器人 | |
| class Meta: | |
| interfaces = (Character,) | |
| primary_function = graphene.String() # 主要功能 | |
| class Query(graphene.ObjectType): | |
| hero = graphene.Field(Character, episode=Episode()) | |
| human = graphene.Field(Human, id=graphene.String()) | |
| droid = graphene.Field(Droid, id=graphene.String()) | |
| def resolve_hero(root, info, episode=None): | |
| return get_hero(episode) | |
| def resolve_human(root, info, id): | |
| return get_human(id) | |
| def resolve_droid(root, info, id): | |
| return get_droid(id) | |
| if __name__ == '__main__': | |
| setup() | |
| schema = graphene.Schema(query=Query) | |
| app = Flask(__name__) | |
| app.add_url_rule('/graphql', | |
| view_func=GraphQLView.as_view('graphql',schema=schema, graphiql=True)) | |
| app.run(debug=True) |