From 7a03caf03045560b3c5c60cb8d121b72fe0d548f Mon Sep 17 00:00:00 2001 From: Michal Mazur Date: Wed, 15 May 2024 11:47:35 -0400 Subject: [PATCH] clean up --- .scripts/smoke.sh | 34 - .../subgraphs/docker-compose-networking.sh | 4 +- .scripts/subgraphs/localhost-networking.sh | 6 +- README.md | 3 +- docker-compose.yaml | 9 +- rhai/main.rhai | 23 + subgraphs/pandas/Dockerfile | 12 - subgraphs/pandas/pandas.graphql | 11 - subgraphs/pandas/pandas.js | 25 - subgraphs/products/products.graphql | 8 +- subgraphs/products/products.js | 39 +- subgraphs/reviews/Dockerfile | 18 +- subgraphs/reviews/app.py | 19 - subgraphs/{pandas => reviews}/package.json | 9 +- subgraphs/reviews/pdm.lock | 790 ------------------ subgraphs/reviews/pyproject.toml | 39 - subgraphs/reviews/reviews.js | 61 ++ subgraphs/reviews/schema.py | 55 -- subgraphs/reviews/tracing.py | 52 -- subgraphs/users/users.js | 39 +- supergraph/router.yaml | 31 +- supergraph/schema/docker.graphql | 22 +- supergraph/schema/docker.yaml | 4 - supergraph/schema/local.graphql | 24 +- supergraph/schema/local.yaml | 6 +- 25 files changed, 212 insertions(+), 1131 deletions(-) create mode 100644 rhai/main.rhai delete mode 100644 subgraphs/pandas/Dockerfile delete mode 100644 subgraphs/pandas/pandas.graphql delete mode 100644 subgraphs/pandas/pandas.js delete mode 100644 subgraphs/reviews/app.py rename subgraphs/{pandas => reviews}/package.json (54%) delete mode 100644 subgraphs/reviews/pdm.lock delete mode 100644 subgraphs/reviews/pyproject.toml create mode 100644 subgraphs/reviews/reviews.js delete mode 100644 subgraphs/reviews/schema.py delete mode 100644 subgraphs/reviews/tracing.py diff --git a/.scripts/smoke.sh b/.scripts/smoke.sh index e5a5627..eebc39a 100755 --- a/.scripts/smoke.sh +++ b/.scripts/smoke.sh @@ -159,40 +159,6 @@ read -r -d '' EXP_3 <<"EOF" {"errors":[{"message": EOF -# -------------------------------------------------------------------- -# TEST 4 -# -------------------------------------------------------------------- -DESCR_4="exampleQuery with pandas" -OPNAME_4="exampleQuery" -ISSLOW_4="true" -ACCEPT_4="application/json" -read -r -d '' QUERY_4 <<"EOF" -query exampleQuery { - allProducts { - id, - sku, - dimensions { - size, - weight - } - delivery { - estimatedDelivery, - fastestDelivery - } - } - allPandas { - name, - favoriteFood - } -} -EOF - -OP_4=equals - -read -r -d '' EXP_4 <<"EOF" -{"data":{"allProducts":[{"id":"converse-1","sku":"converse-1","dimensions":{"size":"1","weight":1},"delivery":{"estimatedDelivery":"6/25/2023","fastestDelivery":"6/24/2023"}},{"id":"vans-1","sku":"vans-1","dimensions":{"size":"1","weight":1},"delivery":{"estimatedDelivery":"6/25/2023","fastestDelivery":"6/24/2023"}}],"allPandas":[{"name":"Basi","favoriteFood":"bamboo leaves"},{"name":"Yun","favoriteFood":"apple"}]}} -EOF - # -------------------------------------------------------------------- # TEST 5 # -------------------------------------------------------------------- diff --git a/.scripts/subgraphs/docker-compose-networking.sh b/.scripts/subgraphs/docker-compose-networking.sh index fd1cd77..893a4cf 100755 --- a/.scripts/subgraphs/docker-compose-networking.sh +++ b/.scripts/subgraphs/docker-compose-networking.sh @@ -1,15 +1,13 @@ #!/bin/bash -subgraphs=("inventory" "products" "users" "pandas" "reviews") +subgraphs=("inventory" "products" "users" "reviews") url_inventory="http://inventory:4000/graphql" url_products="http://products:4000/graphql" url_users="http://users:4000/graphql" -url_pandas="http://pandas:4000/graphql" url_reviews="http://reviews:4000/graphql" schema_inventory="subgraphs/inventory/app/src/main/resources/graphql/inventory.graphqls" schema_products="subgraphs/products/products.graphql" schema_users="subgraphs/users/users.graphql" -schema_pandas="subgraphs/pandas/pandas.graphql" schema_reviews="subgraphs/reviews/reviews.graphql" diff --git a/.scripts/subgraphs/localhost-networking.sh b/.scripts/subgraphs/localhost-networking.sh index a4d82fd..28e1bc6 100755 --- a/.scripts/subgraphs/localhost-networking.sh +++ b/.scripts/subgraphs/localhost-networking.sh @@ -1,15 +1,13 @@ #!/bin/bash -subgraphs=("products" "inventory" "users" "pandas" "reviews") +subgraphs=("products" "inventory" "users" "reviews") url_products="http://localhost:4001/graphql" url_inventory="http://localhost:4002/graphql" url_users="http://localhost:4003/graphql" -url_pandas="http://localhost:4004/graphql" -url_reviews="http://localhost:4005/graphql" +url_reviews="http://localhost:4004/graphql" schema_products="subgraphs/products/products.graphql" schema_inventory="subgraphs/inventory/app/src/main/resources/graphql/inventory.graphqls" schema_users="subgraphs/users/users.graphql" -schema_pandas="subgraphs/pandas/pandas.graphql" schema_reviews="subgraphs/reviews/reviews.graphql" diff --git a/README.md b/README.md index 5c7685f..c8d727e 100644 --- a/README.md +++ b/README.md @@ -83,6 +83,8 @@ You'll need: * [docker-compose](https://docs.docker.com/compose/install/) - runs subgraphs locally * [rover](https://www.apollographql.com/docs/rover/getting-started) - publishes subgraph schemas to your supergraph in the registry * [router](https://www.apollographql.com/docs/router/quickstart) - pulls supergraph schemas from the registry +* redis instance running on `localhost:6379` - used for entity caching PoC +* Enterprise Apollo Studio account (trial works) to access entity caching PoC Install `rover` and `router`: @@ -165,7 +167,6 @@ products | 🚀 Products subgraph ready users | 🚀 Users subgraph ready inventory | Completed initialization in 712 ms reviews | INFO: Application startup complete. -pandas | 🚀 Pandas subgraph ready ``` Browse the products subgraph on port 4001: http://localhost:4001/ diff --git a/docker-compose.yaml b/docker-compose.yaml index e818549..31bd5fb 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -35,13 +35,8 @@ services: build: ./subgraphs/users ports: - "4003:4000" - pandas: - container_name: pandas - build: ./subgraphs/pandas - ports: - - "4004:4000" reviews: container_name: reviews - build: ./subgraphs/reviews + build: subgraphs/reviews ports: - - "4005:4000" + - "4004:4000" diff --git a/rhai/main.rhai b/rhai/main.rhai new file mode 100644 index 0000000..35611f9 --- /dev/null +++ b/rhai/main.rhai @@ -0,0 +1,23 @@ +fn supergraph_service(service) { + let add_headers_to_response = |response| { + if response.context["set_response_headers"]?.len > 0 { + response.headers["Cache-Control"] = response.context["set_response_headers"]; + } + }; + + service.map_response(add_headers_to_response); +} + +fn subgraph_service(service, subgraph) { + let store_headers_from_subgraphs = |response| { + if "Cache-Control" in response.headers { + if response.context["set_response_headers"] == () { + response.context.set_response_headers = [] + } + + response.context.set_response_headers += response.headers.values("Cache-Control"); + } + }; + + service.map_response(store_headers_from_subgraphs); +} \ No newline at end of file diff --git a/subgraphs/pandas/Dockerfile b/subgraphs/pandas/Dockerfile deleted file mode 100644 index c1448ce..0000000 --- a/subgraphs/pandas/Dockerfile +++ /dev/null @@ -1,12 +0,0 @@ -FROM node:18-bookworm-slim - -WORKDIR /usr/src/app - -COPY package.json . - -RUN npm install - -COPY pandas.js . -COPY pandas.graphql . - -CMD [ "node", "pandas.js" ] diff --git a/subgraphs/pandas/pandas.graphql b/subgraphs/pandas/pandas.graphql deleted file mode 100644 index ed2a171..0000000 --- a/subgraphs/pandas/pandas.graphql +++ /dev/null @@ -1,11 +0,0 @@ -directive @tag(name: String!) repeatable on FIELD_DEFINITION - -type Query { - allPandas: [Panda] - panda(name: ID!): Panda -} - -type Panda { - name:ID! - favoriteFood: String @tag(name: "nom-nom-nom") -} diff --git a/subgraphs/pandas/pandas.js b/subgraphs/pandas/pandas.js deleted file mode 100644 index 70828b6..0000000 --- a/subgraphs/pandas/pandas.js +++ /dev/null @@ -1,25 +0,0 @@ -const { ApolloServer, gql } = require('apollo-server'); -const { readFileSync } = require('fs'); - -const port = process.env.APOLLO_PORT || 4000; - -const pandas = [ - { name: 'Basi', favoriteFood: "bamboo leaves" }, - { name: 'Yun', favoriteFood: "apple" } -] - -const typeDefs = gql(readFileSync('./pandas.graphql', { encoding: 'utf-8' })); -const resolvers = { - Query: { - allPandas: (_, args, context) => { - return pandas; - }, - panda: (_, args, context) => { - return pandas.find(p => p.id == args.id); - } - }, -} -const server = new ApolloServer({ typeDefs, resolvers }); -server.listen( {port: port} ).then(({ url }) => { - console.log(`🚀 Pandas subgraph ready at ${url}`); -}).catch(err => {console.error(err)}); diff --git a/subgraphs/products/products.graphql b/subgraphs/products/products.graphql index 90c8c11..c2a47eb 100644 --- a/subgraphs/products/products.graphql +++ b/subgraphs/products/products.graphql @@ -1,6 +1,6 @@ extend schema @link(url: "https://specs.apollo.dev/federation/v2.1", - import: ["@key", "@shareable", "@tag", "@inaccessible", "@composeDirective"]) + import: ["@key", "@shareable", "@tag", "@inaccessible", "@composeDirective", "@requires", "@external"]) @link(url: "https://myspecs.dev/myDirective/v1.0", import: ["@myDirective", { name: "@anotherDirective", as: "@hello" }]) @composeDirective(name: "@myDirective") @composeDirective(name: "@hello") @@ -24,6 +24,8 @@ interface ProductItf implements SkuItf { createdBy: User hidden: String @inaccessible oldField: String @deprecated(reason: "refactored out") +# reviewsCount: Int! +# discount: Float } interface SkuItf { @@ -37,10 +39,12 @@ type Product implements ProductItf & SkuItf @key(fields: "id") @key(fields: "sku package: String variation: ProductVariation dimensions: ProductDimension - createdBy: User + createdBy: User @external hidden: String reviewsScore: Float! oldField: String + reviewsCount: Int! @external + discount: Float @requires(fields: "reviewsCount createdBy { email }") } enum ShippingClass { STANDARD diff --git a/subgraphs/products/products.js b/subgraphs/products/products.js index d3f03a9..925f946 100644 --- a/subgraphs/products/products.js +++ b/subgraphs/products/products.js @@ -40,10 +40,12 @@ const userByProduct = [ const typeDefs = gql(readFileSync('./products.graphql', { encoding: 'utf-8' })); const resolvers = { Query: { - allProducts: (_, args, context) => { + allProducts: async (_, args, context) => { + await new Promise(resolve => setTimeout(resolve, 1000)); return products; }, - product: (_, args, context) => { + product: async (_, args, context) => { + await new Promise(resolve => setTimeout(resolve, 500)); return products.find(p => p.id == args.id); } }, @@ -65,6 +67,14 @@ const resolvers = { dimensions: () => { return { size: "1", weight: 1 } }, + discount(product, args, context) { + const reviewsCount = product.reviewsCount; + console.log("product", product); + if (reviewsCount === undefined) { + throw new Error("reviewsCount is not provided"); + } + return reviewsCount * 0.1; + }, createdBy: (reference) => { if (reference.id) { return userByProduct.find(p => p.id == reference.id).user; @@ -75,24 +85,25 @@ const resolvers = { return 4.5; }, __resolveReference: (reference) => { - if (reference.id) return products.find(p => p.id == reference.id); - else if (reference.sku && reference.package) return products.find(p => p.sku == reference.sku && p.package == reference.package); + let product = {}; + console.log("__resolveReference reference:", reference); + if (reference.id) { + product = products.find(p => p.id == reference.id); + } + else if (reference.sku && reference.package) { + product = products.find(p => p.sku == reference.sku && p.package == reference.package); + } else return { id: 'rover', package: '@apollo/rover', ...reference }; + + return { + ...reference, + ...product, + } } } } const schema = buildSubgraphSchema({ typeDefs, resolvers }); -// console.log(`---------------------------------------`); -// console.log(`🚀 subgraph-js::printSubgraphSchema 🚀`); -// console.log(`---------------------------------------`); -// console.log(printSubgraphSchema(schema)); -// -// console.log(`---------------------------------------`); -// console.log(`🚀 graphql::printSchema 🚀`); -// console.log(`---------------------------------------`); -// console.log(printSchema(schema)); - const server = new ApolloServer({ schema: schema }); server.listen( {port: port} ).then(({ url }) => { console.log(`🚀 Products subgraph ready at ${url}`); diff --git a/subgraphs/reviews/Dockerfile b/subgraphs/reviews/Dockerfile index 2aa70e7..d047b18 100644 --- a/subgraphs/reviews/Dockerfile +++ b/subgraphs/reviews/Dockerfile @@ -1,16 +1,12 @@ -FROM python:3.11 +FROM node:18-bookworm-slim -# install PDM -RUN pip install -U pip setuptools wheel -RUN pip install pdm +WORKDIR /usr/src/app -# copy files -COPY pyproject.toml pdm.lock /project/ -COPY . /project +COPY package.json . -WORKDIR /project -RUN pdm install --prod --no-lock --no-editable +RUN npm install -STOPSIGNAL SIGINT +COPY reviews.js . +COPY reviews.graphql . -CMD ["pdm", "run", "server"] +CMD [ "node", "reviews.js" ] diff --git a/subgraphs/reviews/app.py b/subgraphs/reviews/app.py deleted file mode 100644 index 76a9850..0000000 --- a/subgraphs/reviews/app.py +++ /dev/null @@ -1,19 +0,0 @@ -import os - -from starlette.applications import Starlette -from strawberry.asgi import GraphQL - -from schema import schema - -graphql_app = GraphQL(schema, graphiql=False) - -app = Starlette() - -app.add_route("/", graphql_app) -app.add_route("/graphql", graphql_app) - - -if os.environ.get("APOLLO_OTEL_EXPORTER_TYPE"): - from tracing import setup_tracing - - setup_tracing(schema, app) diff --git a/subgraphs/pandas/package.json b/subgraphs/reviews/package.json similarity index 54% rename from subgraphs/pandas/package.json rename to subgraphs/reviews/package.json index 85a4f29..b5c533f 100644 --- a/subgraphs/pandas/package.json +++ b/subgraphs/reviews/package.json @@ -1,13 +1,16 @@ { - "name": "subgraph-pandas", + "name": "subgraph-reviews", "version": "1.1.27", "description": "", - "main": "pandas.js", + "main": "", "scripts": { - "start": "node pandas.js" + "start": "node " }, "dependencies": { + "@apollo/subgraph": "^2.7.7", "apollo-server": "3.13.0", + "apollo-server-express": "^3.13.0", + "express": "^4.19.2", "graphql": "16.8.1" }, "keywords": [], diff --git a/subgraphs/reviews/pdm.lock b/subgraphs/reviews/pdm.lock deleted file mode 100644 index 655bc1e..0000000 --- a/subgraphs/reviews/pdm.lock +++ /dev/null @@ -1,790 +0,0 @@ -# This file is @generated by PDM. -# It is not intended for manual editing. - -[metadata] -groups = ["default", "dev"] -strategy = ["cross_platform"] -lock_version = "4.4.1" -content_hash = "sha256:32be0e75f0a0e7f6d5a1213f16877c1c7fdad50f90d0fddffba305683319a57c" - -[[package]] -name = "anyio" -version = "3.6.1" -requires_python = ">=3.6.2" -summary = "High level compatibility layer for multiple asynchronous event loop implementations" -dependencies = [ - "idna>=2.8", - "sniffio>=1.1", -] -files = [ - {file = "anyio-3.6.1-py3-none-any.whl", hash = "sha256:cb29b9c70620506a9a8f87a309591713446953302d7d995344d0d7c6c0c9a7be"}, - {file = "anyio-3.6.1.tar.gz", hash = "sha256:413adf95f93886e442aea925f3ee43baa5a765a64a0f52c6081894f9992fdd0b"}, -] - -[[package]] -name = "asgiref" -version = "3.5.2" -requires_python = ">=3.7" -summary = "ASGI specs, helper code, and adapters" -files = [ - {file = "asgiref-3.5.2-py3-none-any.whl", hash = "sha256:1d2880b792ae8757289136f1db2b7b99100ce959b2aa57fd69dab783d05afac4"}, - {file = "asgiref-3.5.2.tar.gz", hash = "sha256:4a29362a6acebe09bf1d6640db38c1dc3d9217c68e6f9f6204d72667fc19a424"}, -] - -[[package]] -name = "backoff" -version = "1.11.1" -requires_python = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -summary = "Function decoration for backoff and retry" -files = [ - {file = "backoff-1.11.1-py2.py3-none-any.whl", hash = "sha256:61928f8fa48d52e4faa81875eecf308eccfb1016b018bb6bd21e05b5d90a96c5"}, - {file = "backoff-1.11.1.tar.gz", hash = "sha256:ccb962a2378418c667b3c979b504fdeb7d9e0d29c0579e3b13b86467177728cb"}, -] - -[[package]] -name = "black" -version = "22.6.0" -requires_python = ">=3.6.2" -summary = "The uncompromising code formatter." -dependencies = [ - "click>=8.0.0", - "mypy-extensions>=0.4.3", - "pathspec>=0.9.0", - "platformdirs>=2", - "tomli>=1.1.0; python_full_version < \"3.11.0a7\"", -] -files = [ - {file = "black-22.6.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f586c26118bc6e714ec58c09df0157fe2d9ee195c764f630eb0d8e7ccce72e69"}, - {file = "black-22.6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b270a168d69edb8b7ed32c193ef10fd27844e5c60852039599f9184460ce0807"}, - {file = "black-22.6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6797f58943fceb1c461fb572edbe828d811e719c24e03375fd25170ada53825e"}, - {file = "black-22.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c85928b9d5f83b23cee7d0efcb310172412fbf7cb9d9ce963bd67fd141781def"}, - {file = "black-22.6.0-cp310-cp310-win_amd64.whl", hash = "sha256:f6fe02afde060bbeef044af7996f335fbe90b039ccf3f5eb8f16df8b20f77666"}, - {file = "black-22.6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:cfaf3895a9634e882bf9d2363fed5af8888802d670f58b279b0bece00e9a872d"}, - {file = "black-22.6.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94783f636bca89f11eb5d50437e8e17fbc6a929a628d82304c80fa9cd945f256"}, - {file = "black-22.6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:2ea29072e954a4d55a2ff58971b83365eba5d3d357352a07a7a4df0d95f51c78"}, - {file = "black-22.6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e439798f819d49ba1c0bd9664427a05aab79bfba777a6db94fd4e56fae0cb849"}, - {file = "black-22.6.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:187d96c5e713f441a5829e77120c269b6514418f4513a390b0499b0987f2ff1c"}, - {file = "black-22.6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:074458dc2f6e0d3dab7928d4417bb6957bb834434516f21514138437accdbe90"}, - {file = "black-22.6.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a218d7e5856f91d20f04e931b6f16d15356db1c846ee55f01bac297a705ca24f"}, - {file = "black-22.6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:568ac3c465b1c8b34b61cd7a4e349e93f91abf0f9371eda1cf87194663ab684e"}, - {file = "black-22.6.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6c1734ab264b8f7929cef8ae5f900b85d579e6cbfde09d7387da8f04771b51c6"}, - {file = "black-22.6.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9a3ac16efe9ec7d7381ddebcc022119794872abce99475345c5a61aa18c45ad"}, - {file = "black-22.6.0-cp38-cp38-win_amd64.whl", hash = "sha256:b9fd45787ba8aa3f5e0a0a98920c1012c884622c6c920dbe98dbd05bc7c70fbf"}, - {file = "black-22.6.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7ba9be198ecca5031cd78745780d65a3f75a34b2ff9be5837045dce55db83d1c"}, - {file = "black-22.6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a3db5b6409b96d9bd543323b23ef32a1a2b06416d525d27e0f67e74f1446c8f2"}, - {file = "black-22.6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:560558527e52ce8afba936fcce93a7411ab40c7d5fe8c2463e279e843c0328ee"}, - {file = "black-22.6.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b154e6bbde1e79ea3260c4b40c0b7b3109ffcdf7bc4ebf8859169a6af72cd70b"}, - {file = "black-22.6.0-cp39-cp39-win_amd64.whl", hash = "sha256:4af5bc0e1f96be5ae9bd7aaec219c901a94d6caa2484c21983d043371c733fc4"}, - {file = "black-22.6.0-py3-none-any.whl", hash = "sha256:ac609cf8ef5e7115ddd07d85d988d074ed00e10fbc3445aee393e70164a2219c"}, - {file = "black-22.6.0.tar.gz", hash = "sha256:6c6d39e28aed379aec40da1c65434c77d75e65bb59a1e1c283de545fb4e7c6c9"}, -] - -[[package]] -name = "certifi" -version = "2022.6.15" -requires_python = ">=3.6" -summary = "Python package for providing Mozilla's CA Bundle." -files = [ - {file = "certifi-2022.6.15-py3-none-any.whl", hash = "sha256:fe86415d55e84719d75f8b69414f6438ac3547d2078ab91b67e779ef69378412"}, - {file = "certifi-2022.6.15.tar.gz", hash = "sha256:84c85a9078b11105f04f3036a9482ae10e4621616db313fe045dd24743a0820d"}, -] - -[[package]] -name = "charset-normalizer" -version = "2.1.0" -requires_python = ">=3.6.0" -summary = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -files = [ - {file = "charset-normalizer-2.1.0.tar.gz", hash = "sha256:575e708016ff3a5e3681541cb9d79312c416835686d054a23accb873b254f413"}, - {file = "charset_normalizer-2.1.0-py3-none-any.whl", hash = "sha256:5189b6f22b01957427f35b6a08d9a0bc45b46d3788ef5a92e978433c7a35f8a5"}, -] - -[[package]] -name = "click" -version = "8.1.3" -requires_python = ">=3.7" -summary = "Composable command line interface toolkit" -dependencies = [ - "colorama; platform_system == \"Windows\"", -] -files = [ - {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, - {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, -] - -[[package]] -name = "colorama" -version = "0.4.5" -requires_python = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -summary = "Cross-platform colored terminal text." -files = [ - {file = "colorama-0.4.5-py2.py3-none-any.whl", hash = "sha256:854bf444933e37f5824ae7bfc1e98d5bce2ebe4160d46b5edf346a89358e99da"}, - {file = "colorama-0.4.5.tar.gz", hash = "sha256:e6c6b4334fc50988a639d9b98aa429a0b57da6e17b9a44f0451f930b6967b7a4"}, -] - -[[package]] -name = "deprecated" -version = "1.2.13" -requires_python = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -summary = "Python @deprecated decorator to deprecate old python classes, functions or methods." -dependencies = [ - "wrapt<2,>=1.10", -] -files = [ - {file = "Deprecated-1.2.13-py2.py3-none-any.whl", hash = "sha256:64756e3e14c8c5eea9795d93c524551432a0be75629f8f29e67ab8caf076c76d"}, - {file = "Deprecated-1.2.13.tar.gz", hash = "sha256:43ac5335da90c31c24ba028af536a91d41d53f9e6901ddb021bcc572ce44e38d"}, -] - -[[package]] -name = "flake8" -version = "5.0.4" -requires_python = ">=3.6.1" -summary = "the modular source code checker: pep8 pyflakes and co" -dependencies = [ - "mccabe<0.8.0,>=0.7.0", - "pycodestyle<2.10.0,>=2.9.0", - "pyflakes<2.6.0,>=2.5.0", -] -files = [ - {file = "flake8-5.0.4-py2.py3-none-any.whl", hash = "sha256:7a1cf6b73744f5806ab95e526f6f0d8c01c66d7bbe349562d22dfca20610b248"}, - {file = "flake8-5.0.4.tar.gz", hash = "sha256:6fbe320aad8d6b95cec8b8e47bc933004678dc63095be98528b7bdd2a9f510db"}, -] - -[[package]] -name = "googleapis-common-protos" -version = "1.56.4" -requires_python = ">=3.7" -summary = "Common protobufs used in Google APIs" -dependencies = [ - "protobuf<5.0.0dev,>=3.15.0", -] -files = [ - {file = "googleapis-common-protos-1.56.4.tar.gz", hash = "sha256:c25873c47279387cfdcbdafa36149887901d36202cb645a0e4f29686bf6e4417"}, - {file = "googleapis_common_protos-1.56.4-py2.py3-none-any.whl", hash = "sha256:8eb2cbc91b69feaf23e32452a7ae60e791e09967d81d4fcc7fc388182d1bd394"}, -] - -[[package]] -name = "graphql-core" -version = "3.2.1" -requires_python = ">=3.6,<4" -summary = "GraphQL implementation for Python, a port of GraphQL.js, the JavaScript reference implementation for GraphQL." -files = [ - {file = "graphql-core-3.2.1.tar.gz", hash = "sha256:9d1bf141427b7d54be944587c8349df791ce60ade2e3cccaf9c56368c133c201"}, - {file = "graphql_core-3.2.1-py3-none-any.whl", hash = "sha256:f83c658e4968998eed1923a2e3e3eddd347e005ac0315fbb7ca4d70ea9156323"}, -] - -[[package]] -name = "grpcio" -version = "1.63.0" -requires_python = ">=3.8" -summary = "HTTP/2-based RPC framework" -files = [ - {file = "grpcio-1.63.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:2e93aca840c29d4ab5db93f94ed0a0ca899e241f2e8aec6334ab3575dc46125c"}, - {file = "grpcio-1.63.0-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:91b73d3f1340fefa1e1716c8c1ec9930c676d6b10a3513ab6c26004cb02d8b3f"}, - {file = "grpcio-1.63.0-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:b3afbd9d6827fa6f475a4f91db55e441113f6d3eb9b7ebb8fb806e5bb6d6bd0d"}, - {file = "grpcio-1.63.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8f3f6883ce54a7a5f47db43289a0a4c776487912de1a0e2cc83fdaec9685cc9f"}, - {file = "grpcio-1.63.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cf8dae9cc0412cb86c8de5a8f3be395c5119a370f3ce2e69c8b7d46bb9872c8d"}, - {file = "grpcio-1.63.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:08e1559fd3b3b4468486b26b0af64a3904a8dbc78d8d936af9c1cf9636eb3e8b"}, - {file = "grpcio-1.63.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:5c039ef01516039fa39da8a8a43a95b64e288f79f42a17e6c2904a02a319b357"}, - {file = "grpcio-1.63.0-cp310-cp310-win32.whl", hash = "sha256:ad2ac8903b2eae071055a927ef74121ed52d69468e91d9bcbd028bd0e554be6d"}, - {file = "grpcio-1.63.0-cp310-cp310-win_amd64.whl", hash = "sha256:b2e44f59316716532a993ca2966636df6fbe7be4ab6f099de6815570ebe4383a"}, - {file = "grpcio-1.63.0-cp311-cp311-linux_armv7l.whl", hash = "sha256:f28f8b2db7b86c77916829d64ab21ff49a9d8289ea1564a2b2a3a8ed9ffcccd3"}, - {file = "grpcio-1.63.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:65bf975639a1f93bee63ca60d2e4951f1b543f498d581869922910a476ead2f5"}, - {file = "grpcio-1.63.0-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:b5194775fec7dc3dbd6a935102bb156cd2c35efe1685b0a46c67b927c74f0cfb"}, - {file = "grpcio-1.63.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e4cbb2100ee46d024c45920d16e888ee5d3cf47c66e316210bc236d5bebc42b3"}, - {file = "grpcio-1.63.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ff737cf29b5b801619f10e59b581869e32f400159e8b12d7a97e7e3bdeee6a2"}, - {file = "grpcio-1.63.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:cd1e68776262dd44dedd7381b1a0ad09d9930ffb405f737d64f505eb7f77d6c7"}, - {file = "grpcio-1.63.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:93f45f27f516548e23e4ec3fbab21b060416007dbe768a111fc4611464cc773f"}, - {file = "grpcio-1.63.0-cp311-cp311-win32.whl", hash = "sha256:878b1d88d0137df60e6b09b74cdb73db123f9579232c8456f53e9abc4f62eb3c"}, - {file = "grpcio-1.63.0-cp311-cp311-win_amd64.whl", hash = "sha256:756fed02dacd24e8f488f295a913f250b56b98fb793f41d5b2de6c44fb762434"}, - {file = "grpcio-1.63.0-cp312-cp312-linux_armv7l.whl", hash = "sha256:93a46794cc96c3a674cdfb59ef9ce84d46185fe9421baf2268ccb556f8f81f57"}, - {file = "grpcio-1.63.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:a7b19dfc74d0be7032ca1eda0ed545e582ee46cd65c162f9e9fc6b26ef827dc6"}, - {file = "grpcio-1.63.0-cp312-cp312-manylinux_2_17_aarch64.whl", hash = "sha256:8064d986d3a64ba21e498b9a376cbc5d6ab2e8ab0e288d39f266f0fca169b90d"}, - {file = "grpcio-1.63.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:219bb1848cd2c90348c79ed0a6b0ea51866bc7e72fa6e205e459fedab5770172"}, - {file = "grpcio-1.63.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2d60cd1d58817bc5985fae6168d8b5655c4981d448d0f5b6194bbcc038090d2"}, - {file = "grpcio-1.63.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:9e350cb096e5c67832e9b6e018cf8a0d2a53b2a958f6251615173165269a91b0"}, - {file = "grpcio-1.63.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:56cdf96ff82e3cc90dbe8bac260352993f23e8e256e063c327b6cf9c88daf7a9"}, - {file = "grpcio-1.63.0-cp312-cp312-win32.whl", hash = "sha256:3a6d1f9ea965e750db7b4ee6f9fdef5fdf135abe8a249e75d84b0a3e0c668a1b"}, - {file = "grpcio-1.63.0-cp312-cp312-win_amd64.whl", hash = "sha256:d2497769895bb03efe3187fb1888fc20e98a5f18b3d14b606167dacda5789434"}, - {file = "grpcio-1.63.0.tar.gz", hash = "sha256:f3023e14805c61bc439fb40ca545ac3d5740ce66120a678a3c6c2c55b70343d1"}, -] - -[[package]] -name = "h11" -version = "0.13.0" -requires_python = ">=3.6" -summary = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" -files = [ - {file = "h11-0.13.0-py3-none-any.whl", hash = "sha256:8ddd78563b633ca55346c8cd41ec0af27d3c79931828beffb46ce70a379e7442"}, - {file = "h11-0.13.0.tar.gz", hash = "sha256:70813c1135087a248a4d38cc0e1a0181ffab2188141a93eaf567940c3957ff06"}, -] - -[[package]] -name = "idna" -version = "3.3" -requires_python = ">=3.5" -summary = "Internationalized Domain Names in Applications (IDNA)" -files = [ - {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"}, - {file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"}, -] - -[[package]] -name = "mccabe" -version = "0.7.0" -requires_python = ">=3.6" -summary = "McCabe checker, plugin for flake8" -files = [ - {file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"}, - {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, -] - -[[package]] -name = "mypy" -version = "0.971" -requires_python = ">=3.6" -summary = "Optional static typing for Python" -dependencies = [ - "mypy-extensions>=0.4.3", - "tomli>=1.1.0; python_version < \"3.11\"", - "typing-extensions>=3.10", -] -files = [ - {file = "mypy-0.971-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f2899a3cbd394da157194f913a931edfd4be5f274a88041c9dc2d9cdcb1c315c"}, - {file = "mypy-0.971-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:98e02d56ebe93981c41211c05adb630d1d26c14195d04d95e49cd97dbc046dc5"}, - {file = "mypy-0.971-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:19830b7dba7d5356d3e26e2427a2ec91c994cd92d983142cbd025ebe81d69cf3"}, - {file = "mypy-0.971-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:02ef476f6dcb86e6f502ae39a16b93285fef97e7f1ff22932b657d1ef1f28655"}, - {file = "mypy-0.971-cp310-cp310-win_amd64.whl", hash = "sha256:25c5750ba5609a0c7550b73a33deb314ecfb559c350bb050b655505e8aed4103"}, - {file = "mypy-0.971-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:d3348e7eb2eea2472db611486846742d5d52d1290576de99d59edeb7cd4a42ca"}, - {file = "mypy-0.971-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3fa7a477b9900be9b7dd4bab30a12759e5abe9586574ceb944bc29cddf8f0417"}, - {file = "mypy-0.971-cp36-cp36m-win_amd64.whl", hash = "sha256:2ad53cf9c3adc43cf3bea0a7d01a2f2e86db9fe7596dfecb4496a5dda63cbb09"}, - {file = "mypy-0.971-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:855048b6feb6dfe09d3353466004490b1872887150c5bb5caad7838b57328cc8"}, - {file = "mypy-0.971-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:23488a14a83bca6e54402c2e6435467a4138785df93ec85aeff64c6170077fb0"}, - {file = "mypy-0.971-cp37-cp37m-win_amd64.whl", hash = "sha256:4b21e5b1a70dfb972490035128f305c39bc4bc253f34e96a4adf9127cf943eb2"}, - {file = "mypy-0.971-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:9796a2ba7b4b538649caa5cecd398d873f4022ed2333ffde58eaf604c4d2cb27"}, - {file = "mypy-0.971-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5a361d92635ad4ada1b1b2d3630fc2f53f2127d51cf2def9db83cba32e47c856"}, - {file = "mypy-0.971-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b793b899f7cf563b1e7044a5c97361196b938e92f0a4343a5d27966a53d2ec71"}, - {file = "mypy-0.971-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d1ea5d12c8e2d266b5fb8c7a5d2e9c0219fedfeb493b7ed60cd350322384ac27"}, - {file = "mypy-0.971-cp38-cp38-win_amd64.whl", hash = "sha256:23c7ff43fff4b0df93a186581885c8512bc50fc4d4910e0f838e35d6bb6b5e58"}, - {file = "mypy-0.971-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:1f7656b69974a6933e987ee8ffb951d836272d6c0f81d727f1d0e2696074d9e6"}, - {file = "mypy-0.971-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d2022bfadb7a5c2ef410d6a7c9763188afdb7f3533f22a0a32be10d571ee4bbe"}, - {file = "mypy-0.971-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ef943c72a786b0f8d90fd76e9b39ce81fb7171172daf84bf43eaf937e9f220a9"}, - {file = "mypy-0.971-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d744f72eb39f69312bc6c2abf8ff6656973120e2eb3f3ec4f758ed47e414a4bf"}, - {file = "mypy-0.971-cp39-cp39-win_amd64.whl", hash = "sha256:77a514ea15d3007d33a9e2157b0ba9c267496acf12a7f2b9b9f8446337aac5b0"}, - {file = "mypy-0.971-py3-none-any.whl", hash = "sha256:0d054ef16b071149917085f51f89555a576e2618d5d9dd70bd6eea6410af3ac9"}, - {file = "mypy-0.971.tar.gz", hash = "sha256:40b0f21484238269ae6a57200c807d80debc6459d444c0489a102d7c6a75fa56"}, -] - -[[package]] -name = "mypy-extensions" -version = "0.4.3" -summary = "Experimental type system extensions for programs checked with the mypy typechecker." -files = [ - {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, - {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"}, -] - -[[package]] -name = "opentelemetry-api" -version = "1.11.1" -requires_python = ">=3.6" -summary = "OpenTelemetry Python API" -dependencies = [ - "Deprecated>=1.2.6", - "setuptools>=16.0", -] -files = [ - {file = "opentelemetry-api-1.11.1.tar.gz", hash = "sha256:80abf335432930fd7c0635a71f79fda09e9c760ced3430c080aba4155e659c46"}, - {file = "opentelemetry_api-1.11.1-py3-none-any.whl", hash = "sha256:4041e7dbe6380e51555a2e2c50a690a6f3bc3b1fee2954e75bc61348b8840c1a"}, -] - -[[package]] -name = "opentelemetry-exporter-otlp" -version = "1.11.1" -requires_python = ">=3.6" -summary = "OpenTelemetry Collector Exporters" -dependencies = [ - "opentelemetry-exporter-otlp-proto-grpc==1.11.1", - "opentelemetry-exporter-otlp-proto-http==1.11.1", -] -files = [ - {file = "opentelemetry-exporter-otlp-1.11.1.tar.gz", hash = "sha256:c275fd2045bf28b8bfeef226f3c73ede7b5bb5d0f7c4669c508f19618a70409c"}, - {file = "opentelemetry_exporter_otlp-1.11.1-py3-none-any.whl", hash = "sha256:2eeeb8e2f3f22958dd306da44f6d5920733b6dd5442ce47e424c920c8e548aa4"}, -] - -[[package]] -name = "opentelemetry-exporter-otlp-proto-grpc" -version = "1.11.1" -requires_python = ">=3.6" -summary = "OpenTelemetry Collector Protobuf over gRPC Exporter" -dependencies = [ - "backoff<2.0.0,>=1.10.0", - "googleapis-common-protos~=1.52", - "grpcio<2.0.0,>=1.0.0", - "opentelemetry-api~=1.3", - "opentelemetry-proto==1.11.1", - "opentelemetry-sdk~=1.11", -] -files = [ - {file = "opentelemetry-exporter-otlp-proto-grpc-1.11.1.tar.gz", hash = "sha256:e34fc79c76e299622812da5fe37cfeffdeeea464007530488d824e6c413e6a58"}, - {file = "opentelemetry_exporter_otlp_proto_grpc-1.11.1-py3-none-any.whl", hash = "sha256:7cabcf548604ab8156644bba0e9cb0a9c50561d621be39429e32581f5c8247a6"}, -] - -[[package]] -name = "opentelemetry-exporter-otlp-proto-http" -version = "1.11.1" -requires_python = ">=3.6" -summary = "OpenTelemetry Collector Protobuf over HTTP Exporter" -dependencies = [ - "backoff<2.0.0,>=1.10.0", - "googleapis-common-protos~=1.52", - "opentelemetry-api~=1.3", - "opentelemetry-proto==1.11.1", - "opentelemetry-sdk~=1.11", - "requests~=2.7", -] -files = [ - {file = "opentelemetry-exporter-otlp-proto-http-1.11.1.tar.gz", hash = "sha256:11a4a4c660f34ebc5cd455da10e405c763fb2e23ac634a9507f90bd244510a4f"}, - {file = "opentelemetry_exporter_otlp_proto_http-1.11.1-py3-none-any.whl", hash = "sha256:53abdc27c7a0973194ac13f96a253c6f7430b921f904c288d7b62e873c3f5945"}, -] - -[[package]] -name = "opentelemetry-exporter-zipkin" -version = "1.11.1" -requires_python = ">=3.6" -summary = "Zipkin Span Exporters for OpenTelemetry" -dependencies = [ - "opentelemetry-exporter-zipkin-json==1.11.1", - "opentelemetry-exporter-zipkin-proto-http==1.11.1", -] -files = [ - {file = "opentelemetry-exporter-zipkin-1.11.1.tar.gz", hash = "sha256:1b5fc6993d04d9376185def150c857a8466cf83f16f58ce2fb09e5b166d995a5"}, - {file = "opentelemetry_exporter_zipkin-1.11.1-py3-none-any.whl", hash = "sha256:756270c4eebe344ec32e15d5b04d65959e3bf7c8f338360b0d9d99981530fe96"}, -] - -[[package]] -name = "opentelemetry-exporter-zipkin-json" -version = "1.11.1" -requires_python = ">=3.6" -summary = "Zipkin Span JSON Exporter for OpenTelemetry" -dependencies = [ - "opentelemetry-api~=1.3", - "opentelemetry-sdk~=1.11", - "requests~=2.7", -] -files = [ - {file = "opentelemetry-exporter-zipkin-json-1.11.1.tar.gz", hash = "sha256:0190947d1ce6f1c90ad4fe799e39af77efd8e984ae5b74885da7b3290cdff875"}, - {file = "opentelemetry_exporter_zipkin_json-1.11.1-py3-none-any.whl", hash = "sha256:405b4ef12207d55a768348471add1f59a5fd74dd0d0ad4a3281a0694a85fb76c"}, -] - -[[package]] -name = "opentelemetry-exporter-zipkin-proto-http" -version = "1.11.1" -requires_python = ">=3.6" -summary = "Zipkin Span Protobuf Exporter for OpenTelemetry" -dependencies = [ - "opentelemetry-api~=1.3", - "opentelemetry-exporter-zipkin-json==1.11.1", - "opentelemetry-sdk~=1.11", - "protobuf>=3.12", - "requests~=2.7", -] -files = [ - {file = "opentelemetry-exporter-zipkin-proto-http-1.11.1.tar.gz", hash = "sha256:595fc729158e208c8e756553fb5ea52d85f6132e0ce161d0695be3f8c807a4bf"}, - {file = "opentelemetry_exporter_zipkin_proto_http-1.11.1-py3-none-any.whl", hash = "sha256:08b40dae4ebdf06ad28c6a3d7b70bf9fac4328de56a53fbdd5ac461582bc6e21"}, -] - -[[package]] -name = "opentelemetry-instrumentation" -version = "0.30b1" -requires_python = ">=3.6" -summary = "Instrumentation Tools & Auto Instrumentation for OpenTelemetry Python" -dependencies = [ - "opentelemetry-api~=1.4", - "setuptools>=16.0", - "wrapt<2.0.0,>=1.0.0", -] -files = [ - {file = "opentelemetry-instrumentation-0.30b1.tar.gz", hash = "sha256:4fd93a341f1674291611f0f8601d2a72967f60a8c65dfd9ef381b4c54c541b93"}, - {file = "opentelemetry_instrumentation-0.30b1-py3-none-any.whl", hash = "sha256:4c092921cf67a6b4a8d531e11089133291330a15c74a4056e43b7500596247a1"}, -] - -[[package]] -name = "opentelemetry-instrumentation-asgi" -version = "0.30b1" -requires_python = ">=3.6" -summary = "ASGI instrumentation for OpenTelemetry" -dependencies = [ - "asgiref~=3.0", - "opentelemetry-api~=1.3", - "opentelemetry-instrumentation==0.30b1", - "opentelemetry-semantic-conventions==0.30b1", - "opentelemetry-util-http==0.30b1", -] -files = [ - {file = "opentelemetry-instrumentation-asgi-0.30b1.tar.gz", hash = "sha256:d1d2e801508130839c41c387389eccc0fc1463179a6883f36bd2a83de31a12fb"}, - {file = "opentelemetry_instrumentation_asgi-0.30b1-py3-none-any.whl", hash = "sha256:f015a233a3cc626bbd62dfa1094fe354015cdb5ad77facd937a7f453bb9f4afb"}, -] - -[[package]] -name = "opentelemetry-instrumentation-starlette" -version = "0.30b1" -requires_python = ">=3.6" -summary = "OpenTelemetry Starlette Instrumentation" -dependencies = [ - "opentelemetry-api~=1.3", - "opentelemetry-instrumentation-asgi==0.30b1", - "opentelemetry-instrumentation==0.30b1", - "opentelemetry-semantic-conventions==0.30b1", - "opentelemetry-util-http==0.30b1", -] -files = [ - {file = "opentelemetry-instrumentation-starlette-0.30b1.tar.gz", hash = "sha256:242ce9985474ea5d9c7911ad65c8a93e3650139688ad46ed1a114a033e69d018"}, - {file = "opentelemetry_instrumentation_starlette-0.30b1-py3-none-any.whl", hash = "sha256:6258e67737252c1cb32b662f157b7246e3c0c65e929fda11b522e6db25e218d4"}, -] - -[[package]] -name = "opentelemetry-proto" -version = "1.11.1" -requires_python = ">=3.6" -summary = "OpenTelemetry Python Proto" -dependencies = [ - "protobuf>=3.13.0", -] -files = [ - {file = "opentelemetry-proto-1.11.1.tar.gz", hash = "sha256:5df0ec69510a9e2414c0410d91a698ded5a04d3dd37f7d2a3e119e3c42a30647"}, - {file = "opentelemetry_proto-1.11.1-py3-none-any.whl", hash = "sha256:4d4663123b4777823aa533f478c6cef3ecbcf696d8dc6ac7fd6a90f37a01eafd"}, -] - -[[package]] -name = "opentelemetry-sdk" -version = "1.11.1" -requires_python = ">=3.6" -summary = "OpenTelemetry Python SDK" -dependencies = [ - "opentelemetry-api==1.11.1", - "opentelemetry-semantic-conventions==0.30b1", - "setuptools>=16.0", - "typing-extensions>=3.7.4", -] -files = [ - {file = "opentelemetry-sdk-1.11.1.tar.gz", hash = "sha256:43e0e9ffc22aa3aa61bcbe4c95704fee608d7b0f961d7ff01bc88caf5e8cb9a8"}, - {file = "opentelemetry_sdk-1.11.1-py3-none-any.whl", hash = "sha256:435545512280d988f8555ba0a42383ec2cd95623a3062f278c19eb084b265d30"}, -] - -[[package]] -name = "opentelemetry-semantic-conventions" -version = "0.30b1" -requires_python = ">=3.6" -summary = "OpenTelemetry Semantic Conventions" -files = [ - {file = "opentelemetry-semantic-conventions-0.30b1.tar.gz", hash = "sha256:2fac7c7202602566b87b2ee3c90fbc272be6094725479f8102f083bf425cc253"}, - {file = "opentelemetry_semantic_conventions-0.30b1-py3-none-any.whl", hash = "sha256:5213268cd0a7a8fb94c054e4c1bac8c17586f732eca91769463320f3dcd910bb"}, -] - -[[package]] -name = "opentelemetry-util-http" -version = "0.30b1" -requires_python = ">=3.6" -summary = "Web util for OpenTelemetry" -files = [ - {file = "opentelemetry-util-http-0.30b1.tar.gz", hash = "sha256:5881654b9453def3dfc75a157021b867af96a8c05ec0abec4dc36a9140ec9012"}, - {file = "opentelemetry_util_http-0.30b1-py3-none-any.whl", hash = "sha256:b43fc7db2cb9a2642dd5ff1a883222b4d4b48f5ef25b68b257c0d54666e8f16e"}, -] - -[[package]] -name = "pathspec" -version = "0.9.0" -requires_python = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" -summary = "Utility library for gitignore style pattern matching of file paths." -files = [ - {file = "pathspec-0.9.0-py2.py3-none-any.whl", hash = "sha256:7d15c4ddb0b5c802d161efc417ec1a2558ea2653c2e8ad9c19098201dc1c993a"}, - {file = "pathspec-0.9.0.tar.gz", hash = "sha256:e564499435a2673d586f6b2130bb5b95f04a3ba06f81b8f895b651a3c76aabb1"}, -] - -[[package]] -name = "platformdirs" -version = "2.5.2" -requires_python = ">=3.7" -summary = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -files = [ - {file = "platformdirs-2.5.2-py3-none-any.whl", hash = "sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788"}, - {file = "platformdirs-2.5.2.tar.gz", hash = "sha256:58c8abb07dcb441e6ee4b11d8df0ac856038f944ab98b7be6b27b2a3c7feef19"}, -] - -[[package]] -name = "protobuf" -version = "3.20.3" -requires_python = ">=3.7" -summary = "Protocol Buffers" -files = [ - {file = "protobuf-3.20.3-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:f4bd856d702e5b0d96a00ec6b307b0f51c1982c2bf9c0052cf9019e9a544ba99"}, - {file = "protobuf-3.20.3-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9aae4406ea63d825636cc11ffb34ad3379335803216ee3a856787bcf5ccc751e"}, - {file = "protobuf-3.20.3-cp310-cp310-win32.whl", hash = "sha256:28545383d61f55b57cf4df63eebd9827754fd2dc25f80c5253f9184235db242c"}, - {file = "protobuf-3.20.3-cp310-cp310-win_amd64.whl", hash = "sha256:67a3598f0a2dcbc58d02dd1928544e7d88f764b47d4a286202913f0b2801c2e7"}, - {file = "protobuf-3.20.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:899dc660cd599d7352d6f10d83c95df430a38b410c1b66b407a6b29265d66469"}, - {file = "protobuf-3.20.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e64857f395505ebf3d2569935506ae0dfc4a15cb80dc25261176c784662cdcc4"}, - {file = "protobuf-3.20.3-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:d9e4432ff660d67d775c66ac42a67cf2453c27cb4d738fc22cb53b5d84c135d4"}, - {file = "protobuf-3.20.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:74480f79a023f90dc6e18febbf7b8bac7508420f2006fabd512013c0c238f454"}, - {file = "protobuf-3.20.3-cp37-cp37m-win32.whl", hash = "sha256:b6cc7ba72a8850621bfec987cb72623e703b7fe2b9127a161ce61e61558ad905"}, - {file = "protobuf-3.20.3-cp37-cp37m-win_amd64.whl", hash = "sha256:8c0c984a1b8fef4086329ff8dd19ac77576b384079247c770f29cc8ce3afa06c"}, - {file = "protobuf-3.20.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:de78575669dddf6099a8a0f46a27e82a1783c557ccc38ee620ed8cc96d3be7d7"}, - {file = "protobuf-3.20.3-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:f4c42102bc82a51108e449cbb32b19b180022941c727bac0cfd50170341f16ee"}, - {file = "protobuf-3.20.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:44246bab5dd4b7fbd3c0c80b6f16686808fab0e4aca819ade6e8d294a29c7050"}, - {file = "protobuf-3.20.3-cp38-cp38-win32.whl", hash = "sha256:c02ce36ec760252242a33967d51c289fd0e1c0e6e5cc9397e2279177716add86"}, - {file = "protobuf-3.20.3-cp38-cp38-win_amd64.whl", hash = "sha256:447d43819997825d4e71bf5769d869b968ce96848b6479397e29fc24c4a5dfe9"}, - {file = "protobuf-3.20.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:398a9e0c3eaceb34ec1aee71894ca3299605fa8e761544934378bbc6c97de23b"}, - {file = "protobuf-3.20.3-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:bf01b5720be110540be4286e791db73f84a2b721072a3711efff6c324cdf074b"}, - {file = "protobuf-3.20.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:daa564862dd0d39c00f8086f88700fdbe8bc717e993a21e90711acfed02f2402"}, - {file = "protobuf-3.20.3-cp39-cp39-win32.whl", hash = "sha256:819559cafa1a373b7096a482b504ae8a857c89593cf3a25af743ac9ecbd23480"}, - {file = "protobuf-3.20.3-cp39-cp39-win_amd64.whl", hash = "sha256:03038ac1cfbc41aa21f6afcbcd357281d7521b4157926f30ebecc8d4ea59dcb7"}, - {file = "protobuf-3.20.3-py2.py3-none-any.whl", hash = "sha256:a7ca6d488aa8ff7f329d4c545b2dbad8ac31464f1d8b1c87ad1346717731e4db"}, - {file = "protobuf-3.20.3.tar.gz", hash = "sha256:2e3427429c9cffebf259491be0af70189607f365c2f41c7c3764af6f337105f2"}, -] - -[[package]] -name = "pycodestyle" -version = "2.9.1" -requires_python = ">=3.6" -summary = "Python style guide checker" -files = [ - {file = "pycodestyle-2.9.1-py2.py3-none-any.whl", hash = "sha256:d1735fc58b418fd7c5f658d28d943854f8a849b01a5d0a1e6f3f3fdd0166804b"}, - {file = "pycodestyle-2.9.1.tar.gz", hash = "sha256:2c9607871d58c76354b697b42f5d57e1ada7d261c261efac224b664affdc5785"}, -] - -[[package]] -name = "pyflakes" -version = "2.5.0" -requires_python = ">=3.6" -summary = "passive checker of Python programs" -files = [ - {file = "pyflakes-2.5.0-py2.py3-none-any.whl", hash = "sha256:4579f67d887f804e67edb544428f264b7b24f435b263c4614f384135cea553d2"}, - {file = "pyflakes-2.5.0.tar.gz", hash = "sha256:491feb020dca48ccc562a8c0cbe8df07ee13078df59813b83959cbdada312ea3"}, -] - -[[package]] -name = "pygments" -version = "2.12.0" -requires_python = ">=3.6" -summary = "Pygments is a syntax highlighting package written in Python." -files = [ - {file = "Pygments-2.12.0-py3-none-any.whl", hash = "sha256:dc9c10fb40944260f6ed4c688ece0cd2048414940f1cea51b8b226318411c519"}, - {file = "Pygments-2.12.0.tar.gz", hash = "sha256:5eb116118f9612ff1ee89ac96437bb6b49e8f04d8a13b514ba26f620208e26eb"}, -] - -[[package]] -name = "python-dateutil" -version = "2.8.2" -requires_python = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" -summary = "Extensions to the standard Python datetime module" -dependencies = [ - "six>=1.5", -] -files = [ - {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, - {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, -] - -[[package]] -name = "python-multipart" -version = "0.0.5" -summary = "A streaming multipart parser for Python" -dependencies = [ - "six>=1.4.0", -] -files = [ - {file = "python-multipart-0.0.5.tar.gz", hash = "sha256:f7bb5f611fc600d15fa47b3974c8aa16e93724513b49b5f95c81e6624c83fa43"}, -] - -[[package]] -name = "requests" -version = "2.28.1" -requires_python = ">=3.7, <4" -summary = "Python HTTP for Humans." -dependencies = [ - "certifi>=2017.4.17", - "charset-normalizer<3,>=2", - "idna<4,>=2.5", - "urllib3<1.27,>=1.21.1", -] -files = [ - {file = "requests-2.28.1-py3-none-any.whl", hash = "sha256:8fefa2a1a1365bf5520aac41836fbee479da67864514bdb821f31ce07ce65349"}, - {file = "requests-2.28.1.tar.gz", hash = "sha256:7c5599b102feddaa661c826c56ab4fee28bfd17f5abca1ebbe3e7f19d7c97983"}, -] - -[[package]] -name = "setuptools" -version = "63.4.2" -requires_python = ">=3.7" -summary = "Easily download, build, install, upgrade, and uninstall Python packages" -files = [ - {file = "setuptools-63.4.2-py3-none-any.whl", hash = "sha256:73bfae4791da7c1c56882ab17577d00f7a37a0347162aeb9360058de0dc25083"}, - {file = "setuptools-63.4.2.tar.gz", hash = "sha256:abcb76aa4decd7a17cbe0e4b31bdf549d106ba7f668e87e0860f5f7b84b9b3fe"}, -] - -[[package]] -name = "six" -version = "1.16.0" -requires_python = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" -summary = "Python 2 and 3 compatibility utilities" -files = [ - {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, - {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, -] - -[[package]] -name = "sniffio" -version = "1.2.0" -requires_python = ">=3.5" -summary = "Sniff out which async library your code is running under" -files = [ - {file = "sniffio-1.2.0-py3-none-any.whl", hash = "sha256:471b71698eac1c2112a40ce2752bb2f4a4814c22a54a3eed3676bc0f5ca9f663"}, - {file = "sniffio-1.2.0.tar.gz", hash = "sha256:c4666eecec1d3f50960c6bdf61ab7bc350648da6c126e3cf6898d8cd4ddcd3de"}, -] - -[[package]] -name = "starlette" -version = "0.20.4" -requires_python = ">=3.7" -summary = "The little ASGI library that shines." -dependencies = [ - "anyio<5,>=3.4.0", -] -files = [ - {file = "starlette-0.20.4-py3-none-any.whl", hash = "sha256:c0414d5a56297d37f3db96a84034d61ce29889b9eaccf65eb98a0b39441fcaa3"}, - {file = "starlette-0.20.4.tar.gz", hash = "sha256:42fcf3122f998fefce3e2c5ad7e5edbf0f02cf685d646a83a08d404726af5084"}, -] - -[[package]] -name = "strawberry-graphql" -version = "0.130.3" -requires_python = ">=3.7,<4.0" -summary = "A library for creating GraphQL APIs" -dependencies = [ - "click<9.0,>=7.0", - "graphql-core<3.3.0,>=3.2.0", - "pygments<3.0,>=2.3", - "python-dateutil<3.0.0,>=2.7.0", - "python-multipart<0.0.6,>=0.0.5", - "typing-extensions<5.0.0,>=3.7.4", -] -files = [ - {file = "strawberry-graphql-0.130.3.tar.gz", hash = "sha256:81c0ef427b50f2ca5e87bc9842f53ecfa2042837c465082126dcb0c527f10d2a"}, - {file = "strawberry_graphql-0.130.3-py3-none-any.whl", hash = "sha256:c421b444d555666d957a054e395615a388866b26ae25409a80f0fc13a809fa46"}, -] - -[[package]] -name = "tomli" -version = "2.0.1" -requires_python = ">=3.7" -summary = "A lil' TOML parser" -files = [ - {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, - {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, -] - -[[package]] -name = "typing-extensions" -version = "4.3.0" -requires_python = ">=3.7" -summary = "Backported and Experimental Type Hints for Python 3.7+" -files = [ - {file = "typing_extensions-4.3.0-py3-none-any.whl", hash = "sha256:25642c956049920a5aa49edcdd6ab1e06d7e5d467fc00e0506c44ac86fbfca02"}, - {file = "typing_extensions-4.3.0.tar.gz", hash = "sha256:e6d2677a32f47fc7eb2795db1dd15c1f34eff616bcaf2cfb5e997f854fa1c4a6"}, -] - -[[package]] -name = "urllib3" -version = "1.26.11" -requires_python = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, <4" -summary = "HTTP library with thread-safe connection pooling, file post, and more." -files = [ - {file = "urllib3-1.26.11-py2.py3-none-any.whl", hash = "sha256:c33ccba33c819596124764c23a97d25f32b28433ba0dedeb77d873a38722c9bc"}, - {file = "urllib3-1.26.11.tar.gz", hash = "sha256:ea6e8fb210b19d950fab93b60c9009226c63a28808bc8386e05301e25883ac0a"}, -] - -[[package]] -name = "uvicorn" -version = "0.18.2" -requires_python = ">=3.7" -summary = "The lightning-fast ASGI server." -dependencies = [ - "click>=7.0", - "h11>=0.8", -] -files = [ - {file = "uvicorn-0.18.2-py3-none-any.whl", hash = "sha256:c19a057deb1c5bb060946e2e5c262fc01590c6529c0af2c3d9ce941e89bc30e0"}, - {file = "uvicorn-0.18.2.tar.gz", hash = "sha256:cade07c403c397f9fe275492a48c1b869efd175d5d8a692df649e6e7e2ed8f4e"}, -] - -[[package]] -name = "wrapt" -version = "1.14.1" -requires_python = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" -summary = "Module for decorators, wrappers and monkey patching." -files = [ - {file = "wrapt-1.14.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:1b376b3f4896e7930f1f772ac4b064ac12598d1c38d04907e696cc4d794b43d3"}, - {file = "wrapt-1.14.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:903500616422a40a98a5a3c4ff4ed9d0066f3b4c951fa286018ecdf0750194ef"}, - {file = "wrapt-1.14.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:5a9a0d155deafd9448baff28c08e150d9b24ff010e899311ddd63c45c2445e28"}, - {file = "wrapt-1.14.1-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:ddaea91abf8b0d13443f6dac52e89051a5063c7d014710dcb4d4abb2ff811a59"}, - {file = "wrapt-1.14.1-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:36f582d0c6bc99d5f39cd3ac2a9062e57f3cf606ade29a0a0d6b323462f4dd87"}, - {file = "wrapt-1.14.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:7ef58fb89674095bfc57c4069e95d7a31cfdc0939e2a579882ac7d55aadfd2a1"}, - {file = "wrapt-1.14.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:e2f83e18fe2f4c9e7db597e988f72712c0c3676d337d8b101f6758107c42425b"}, - {file = "wrapt-1.14.1-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:ee2b1b1769f6707a8a445162ea16dddf74285c3964f605877a20e38545c3c462"}, - {file = "wrapt-1.14.1-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:833b58d5d0b7e5b9832869f039203389ac7cbf01765639c7309fd50ef619e0b1"}, - {file = "wrapt-1.14.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:80bb5c256f1415f747011dc3604b59bc1f91c6e7150bd7db03b19170ee06b320"}, - {file = "wrapt-1.14.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:07f7a7d0f388028b2df1d916e94bbb40624c59b48ecc6cbc232546706fac74c2"}, - {file = "wrapt-1.14.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:02b41b633c6261feff8ddd8d11c711df6842aba629fdd3da10249a53211a72c4"}, - {file = "wrapt-1.14.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2fe803deacd09a233e4762a1adcea5db5d31e6be577a43352936179d14d90069"}, - {file = "wrapt-1.14.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:257fd78c513e0fb5cdbe058c27a0624c9884e735bbd131935fd49e9fe719d310"}, - {file = "wrapt-1.14.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4fcc4649dc762cddacd193e6b55bc02edca674067f5f98166d7713b193932b7f"}, - {file = "wrapt-1.14.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:11871514607b15cfeb87c547a49bca19fde402f32e2b1c24a632506c0a756656"}, - {file = "wrapt-1.14.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8ad85f7f4e20964db4daadcab70b47ab05c7c1cf2a7c1e51087bfaa83831854c"}, - {file = "wrapt-1.14.1-cp310-cp310-win32.whl", hash = "sha256:a9a52172be0b5aae932bef82a79ec0a0ce87288c7d132946d645eba03f0ad8a8"}, - {file = "wrapt-1.14.1-cp310-cp310-win_amd64.whl", hash = "sha256:6d323e1554b3d22cfc03cd3243b5bb815a51f5249fdcbb86fda4bf62bab9e164"}, - {file = "wrapt-1.14.1-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:43ca3bbbe97af00f49efb06e352eae40434ca9d915906f77def219b88e85d907"}, - {file = "wrapt-1.14.1-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:6b1a564e6cb69922c7fe3a678b9f9a3c54e72b469875aa8018f18b4d1dd1adf3"}, - {file = "wrapt-1.14.1-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:00b6d4ea20a906c0ca56d84f93065b398ab74b927a7a3dbd470f6fc503f95dc3"}, - {file = "wrapt-1.14.1-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:a85d2b46be66a71bedde836d9e41859879cc54a2a04fad1191eb50c2066f6e9d"}, - {file = "wrapt-1.14.1-cp35-cp35m-win32.whl", hash = "sha256:dbcda74c67263139358f4d188ae5faae95c30929281bc6866d00573783c422b7"}, - {file = "wrapt-1.14.1-cp35-cp35m-win_amd64.whl", hash = "sha256:b21bb4c09ffabfa0e85e3a6b623e19b80e7acd709b9f91452b8297ace2a8ab00"}, - {file = "wrapt-1.14.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:9e0fd32e0148dd5dea6af5fee42beb949098564cc23211a88d799e434255a1f4"}, - {file = "wrapt-1.14.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9736af4641846491aedb3c3f56b9bc5568d92b0692303b5a305301a95dfd38b1"}, - {file = "wrapt-1.14.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5b02d65b9ccf0ef6c34cba6cf5bf2aab1bb2f49c6090bafeecc9cd81ad4ea1c1"}, - {file = "wrapt-1.14.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21ac0156c4b089b330b7666db40feee30a5d52634cc4560e1905d6529a3897ff"}, - {file = "wrapt-1.14.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:9f3e6f9e05148ff90002b884fbc2a86bd303ae847e472f44ecc06c2cd2fcdb2d"}, - {file = "wrapt-1.14.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:6e743de5e9c3d1b7185870f480587b75b1cb604832e380d64f9504a0535912d1"}, - {file = "wrapt-1.14.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:d79d7d5dc8a32b7093e81e97dad755127ff77bcc899e845f41bf71747af0c569"}, - {file = "wrapt-1.14.1-cp36-cp36m-win32.whl", hash = "sha256:81b19725065dcb43df02b37e03278c011a09e49757287dca60c5aecdd5a0b8ed"}, - {file = "wrapt-1.14.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b014c23646a467558be7da3d6b9fa409b2c567d2110599b7cf9a0c5992b3b471"}, - {file = "wrapt-1.14.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:88bd7b6bd70a5b6803c1abf6bca012f7ed963e58c68d76ee20b9d751c74a3248"}, - {file = "wrapt-1.14.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5901a312f4d14c59918c221323068fad0540e34324925c8475263841dbdfe68"}, - {file = "wrapt-1.14.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d77c85fedff92cf788face9bfa3ebaa364448ebb1d765302e9af11bf449ca36d"}, - {file = "wrapt-1.14.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d649d616e5c6a678b26d15ece345354f7c2286acd6db868e65fcc5ff7c24a77"}, - {file = "wrapt-1.14.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7d2872609603cb35ca513d7404a94d6d608fc13211563571117046c9d2bcc3d7"}, - {file = "wrapt-1.14.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:ee6acae74a2b91865910eef5e7de37dc6895ad96fa23603d1d27ea69df545015"}, - {file = "wrapt-1.14.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:2b39d38039a1fdad98c87279b48bc5dce2c0ca0d73483b12cb72aa9609278e8a"}, - {file = "wrapt-1.14.1-cp37-cp37m-win32.whl", hash = "sha256:60db23fa423575eeb65ea430cee741acb7c26a1365d103f7b0f6ec412b893853"}, - {file = "wrapt-1.14.1-cp37-cp37m-win_amd64.whl", hash = "sha256:709fe01086a55cf79d20f741f39325018f4df051ef39fe921b1ebe780a66184c"}, - {file = "wrapt-1.14.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8c0ce1e99116d5ab21355d8ebe53d9460366704ea38ae4d9f6933188f327b456"}, - {file = "wrapt-1.14.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e3fb1677c720409d5f671e39bac6c9e0e422584e5f518bfd50aa4cbbea02433f"}, - {file = "wrapt-1.14.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:642c2e7a804fcf18c222e1060df25fc210b9c58db7c91416fb055897fc27e8cc"}, - {file = "wrapt-1.14.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7b7c050ae976e286906dd3f26009e117eb000fb2cf3533398c5ad9ccc86867b1"}, - {file = "wrapt-1.14.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef3f72c9666bba2bab70d2a8b79f2c6d2c1a42a7f7e2b0ec83bb2f9e383950af"}, - {file = "wrapt-1.14.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:01c205616a89d09827986bc4e859bcabd64f5a0662a7fe95e0d359424e0e071b"}, - {file = "wrapt-1.14.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:5a0f54ce2c092aaf439813735584b9537cad479575a09892b8352fea5e988dc0"}, - {file = "wrapt-1.14.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2cf71233a0ed05ccdabe209c606fe0bac7379fdcf687f39b944420d2a09fdb57"}, - {file = "wrapt-1.14.1-cp38-cp38-win32.whl", hash = "sha256:aa31fdcc33fef9eb2552cbcbfee7773d5a6792c137b359e82879c101e98584c5"}, - {file = "wrapt-1.14.1-cp38-cp38-win_amd64.whl", hash = "sha256:d1967f46ea8f2db647c786e78d8cc7e4313dbd1b0aca360592d8027b8508e24d"}, - {file = "wrapt-1.14.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3232822c7d98d23895ccc443bbdf57c7412c5a65996c30442ebe6ed3df335383"}, - {file = "wrapt-1.14.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:988635d122aaf2bdcef9e795435662bcd65b02f4f4c1ae37fbee7401c440b3a7"}, - {file = "wrapt-1.14.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cca3c2cdadb362116235fdbd411735de4328c61425b0aa9f872fd76d02c4e86"}, - {file = "wrapt-1.14.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d52a25136894c63de15a35bc0bdc5adb4b0e173b9c0d07a2be9d3ca64a332735"}, - {file = "wrapt-1.14.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40e7bc81c9e2b2734ea4bc1aceb8a8f0ceaac7c5299bc5d69e37c44d9081d43b"}, - {file = "wrapt-1.14.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b9b7a708dd92306328117d8c4b62e2194d00c365f18eff11a9b53c6f923b01e3"}, - {file = "wrapt-1.14.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:6a9a25751acb379b466ff6be78a315e2b439d4c94c1e99cb7266d40a537995d3"}, - {file = "wrapt-1.14.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:34aa51c45f28ba7f12accd624225e2b1e5a3a45206aa191f6f9aac931d9d56fe"}, - {file = "wrapt-1.14.1-cp39-cp39-win32.whl", hash = "sha256:dee0ce50c6a2dd9056c20db781e9c1cfd33e77d2d569f5d1d9321c641bb903d5"}, - {file = "wrapt-1.14.1-cp39-cp39-win_amd64.whl", hash = "sha256:dee60e1de1898bde3b238f18340eec6148986da0455d8ba7848d50470a7a32fb"}, - {file = "wrapt-1.14.1.tar.gz", hash = "sha256:380a85cf89e0e69b7cfbe2ea9f765f004ff419f34194018a6827ac0e3edfed4d"}, -] diff --git a/subgraphs/reviews/pyproject.toml b/subgraphs/reviews/pyproject.toml deleted file mode 100644 index cfa1d9e..0000000 --- a/subgraphs/reviews/pyproject.toml +++ /dev/null @@ -1,39 +0,0 @@ -[project] -authors = [ - {name = "Patrick Arminio", email = "patrick.arminio@gmail.com"}, -] -dependencies = [ - "strawberry-graphql>=0.130.3", - "uvicorn>=0.18.2", - "starlette>=0.20.4", - "opentelemetry-api>=1.11.1", - "opentelemetry-sdk>=1.11.1", - "opentelemetry-exporter-zipkin>=1.11.1", - "opentelemetry-instrumentation-starlette>=0.30b1", - "opentelemetry-exporter-otlp>=1.11.1", - "protobuf==3.20.3", - "grpcio==1.63.0", -] -description = "" -license = {text = "MIT"} -name = "" -requires-python = ">=3.10" -version = "" -[project.optional-dependencies] - -[build-system] -build-backend = "pdm.pep517.api" -requires = ["pdm-pep517>=1.0.0"] - -[tool] -[tool.pdm] -[tool.pdm.dev-dependencies] -dev = [ - "black>=22.6.0", - "flake8>=5.0.4", - "mypy>=0.971", -] - -[tool.pdm.scripts] -export-schema = {shell = "strawberry export-schema schema > reviews.graphql"} -server = "uvicorn app:app --host 0.0.0.0 --port 4000" diff --git a/subgraphs/reviews/reviews.js b/subgraphs/reviews/reviews.js new file mode 100644 index 0000000..236ca48 --- /dev/null +++ b/subgraphs/reviews/reviews.js @@ -0,0 +1,61 @@ +const { ApolloServer, gql } = require('apollo-server-express'); +const express = require('express'); +const { buildSubgraphSchema, printSubgraphSchema } = require('@apollo/subgraph'); +const { readFileSync } = require('fs'); + +const port = process.env.APOLLO_PORT || 4000; + +const reviews = [ + { id: 1, body: "Cool shoes", product_id: "vans-1" }, + { id: 2, body: "Love my vans", product_id: "vans-1" }, + { id: 3, body: "Good I guess", product_id: "vans-1" }, + { id: 4, body: "Nice seasonal colors", product_id: "converse-1" }, +] + +const typeDefs = gql(readFileSync('./reviews.graphql', { encoding: 'utf-8' })); +const resolvers = { + Query: { + review: (_, args, context) => { + return reviews.find(r => r.id == args.id); + }, + }, + Review: { + __resolveReference: (review) => { + return reviews.find(r => r.id === review.id); + } + }, + Product: { + reviews: (product) => reviews.filter(r => r.product_id === product.id), + reviewsCount: (product) => { + console.log("product: ", product); + console.log("product reviewsCount: ", reviews.filter(r => r.product_id === product.id).length, product); + return reviews.filter(r => r.product_id === product.id).length; + }, + reviewsScore: (product) => 4.6, // Static example score + }, +} + +const app = express(); +const schema = buildSubgraphSchema({ typeDefs, resolvers }); + +async function startApolloServer() { + const server = new ApolloServer({ + schema, + context: async ({ req, res }) => { + res.setHeader('Cache-Control', 'max-age=300'); + // Ensure the header is being set + console.log('Header set'); + return { req, res }; + } + }); + await server.start(); // Start the Apollo server before applying middleware + server.applyMiddleware({ app }); // Connect Apollo Server with Express application + + app.listen(port, () => { + console.log(`🚀 Reviews subgraph ready at http://localhost:${port}${server.graphqlPath}`); + }); +} + +startApolloServer().catch(err => { + console.error(err); +}); \ No newline at end of file diff --git a/subgraphs/reviews/schema.py b/subgraphs/reviews/schema.py deleted file mode 100644 index 56cf95e..0000000 --- a/subgraphs/reviews/schema.py +++ /dev/null @@ -1,55 +0,0 @@ -import strawberry - - -@strawberry.type -class Review: - id: int - body: str - product_id: strawberry.Private[str] - - -reviews = [ - Review( - id=1, body=f"A review for Apollo Federation", product_id="apollo-federation" - ), - Review(id=2, body=f"A review for Apollo Studio", product_id="apollo-studio"), -] - - -def get_reviews(root: "Product") -> list[Review]: - return list(filter(lambda r: r.product_id == root.id, reviews)) - - -@strawberry.federation.interface() -class ProductItf: - id: strawberry.ID - reviews_count: int - reviews_score: float - reviews: list[Review] - - -@strawberry.federation.type(keys=["id"]) -class Product(ProductItf): - id: strawberry.ID - reviews_count: int - reviews_score: float = strawberry.federation.field(override="products") - reviews: list[Review] = strawberry.field(resolver=get_reviews) - - @classmethod - def resolve_reference(cls, id: strawberry.ID): - return Product(id=id, reviews_count=3, reviews_score=4.6) - - -@strawberry.type -class Query: - @strawberry.field - def review(self, id: int) -> Review | None: - return next((r for r in reviews if r.id == id), None) - - -schema = strawberry.federation.Schema( - query=Query, - types=[Product, Review], - enable_federation_2=True, - extensions=[], -) diff --git a/subgraphs/reviews/tracing.py b/subgraphs/reviews/tracing.py deleted file mode 100644 index 0b564e7..0000000 --- a/subgraphs/reviews/tracing.py +++ /dev/null @@ -1,52 +0,0 @@ -import os - -from opentelemetry import trace -from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter -from opentelemetry.exporter.zipkin.json import ZipkinExporter -from opentelemetry.instrumentation.starlette import StarletteInstrumentor -from opentelemetry.sdk.resources import SERVICE_NAME, Resource -from opentelemetry.sdk.trace import TracerProvider -from opentelemetry.sdk.trace.export import SimpleSpanProcessor, BatchSpanProcessor -from strawberry.extensions.tracing import OpenTelemetryExtension - - -def setup_tracing(schema, app): - resource = Resource(attributes={SERVICE_NAME: "reviews"}) - - provider = TracerProvider(resource=resource) - - tracer_type = os.environ.get("APOLLO_OTEL_EXPORTER_TYPE") - - assert tracer_type in {"zipkin", "collector"} - - if tracer_type == "zipkin": - host = os.environ.get("APOLLO_OTEL_EXPORTER_HOST", "localhost") - port = os.environ.get("APOLLO_OTEL_EXPORTER_PORT", 9411) - - endpoint = f"http://{host}:{port}/api/v2/spans" - - zipkin_exporter = ZipkinExporter(endpoint=endpoint) - - span_processor = SimpleSpanProcessor(zipkin_exporter) - provider.add_span_processor(span_processor) - - print("Tracing enabled with Zipkin exporter") - - if tracer_type == "collector": - host = os.environ.get("APOLLO_OTEL_EXPORTER_HOST", "localhost") - port = os.environ.get("APOLLO_OTEL_EXPORTER_PORT", 9411) - - endpoint = f"http://{host}:{port}/v1/traces" - - otlp_exporter = OTLPSpanExporter(endpoint=endpoint) - - span_processor = BatchSpanProcessor(otlp_exporter) - - provider.add_span_processor(span_processor) - - print("Tracing enabled with Collector exporter") - - trace.set_tracer_provider(provider) - - schema.extensions.append(OpenTelemetryExtension) - StarletteInstrumentor().instrument_app(app) diff --git a/subgraphs/users/users.js b/subgraphs/users/users.js index e1cfc5c..a763394 100644 --- a/subgraphs/users/users.js +++ b/subgraphs/users/users.js @@ -13,7 +13,8 @@ if (process.env.APOLLO_OTEL_EXPORTER_TYPE) { }).setupInstrumentation(); } -const { ApolloServer, gql } = require('apollo-server'); +const { ApolloServer, gql } = require('apollo-server-express'); +const express = require('express'); const { buildSubgraphSchema } = require('@apollo/subgraph'); const { readFileSync } = require('fs'); @@ -27,12 +28,38 @@ const users = [ const typeDefs = gql(readFileSync('./users.graphql', { encoding: 'utf-8' })); const resolvers = { User: { - __resolveReference: (reference) => { + __resolveReference: async (reference) => { + await new Promise(resolve => setTimeout(resolve, 3000)); return users.find(u => u.email == reference.email); } } } -const server = new ApolloServer({ schema: buildSubgraphSchema({ typeDefs, resolvers }) }); -server.listen( {port: port} ).then(({ url }) => { - console.log(`🚀 Users subgraph ready at ${url}`); -}).catch(err => {console.error(err)}); + +const app = express(); + +async function startApolloServer() { + const server = new ApolloServer({ + schema: buildSubgraphSchema({ typeDefs, resolvers }), + context: async ({ req, res }) => { + res.setHeader('Cache-Control', 'max-age=600'); + // Ensure the header is being set + console.log('Header set'); + return { req, res }; + } + }); + await server.start(); // Start the Apollo server before applying middleware + server.applyMiddleware({ app }); // Connect Apollo Server with Express application + + app.listen(port, () => { + console.log(`🚀 Users subgraph ready at http://localhost:${port}${server.graphqlPath}`); + }); +} + +startApolloServer().catch(err => { + console.error(err); +}); + +// const server = new ApolloServer({ schema: buildSubgraphSchema({ typeDefs, resolvers }) }); +// server.listen( {port: port} ).then(({ url }) => { +// console.log(`🚀 Users subgraph ready at ${url}`); +// }).catch(err => {console.error(err)}); diff --git a/supergraph/router.yaml b/supergraph/router.yaml index 0d3019b..a39c808 100644 --- a/supergraph/router.yaml +++ b/supergraph/router.yaml @@ -15,11 +15,32 @@ telemetry: sampler: 1 # The percentage of requests that will generate traces (a rate or `always_on` or `always_off`) service_name: "router" service_namespace: "apollo" - otlp: - endpoint: http://${env.APOLLO_OTEL_EXPORTER_HOST:-localhost}:4317 - protocol: grpc - batch_processor: - max_export_timeout: 42s +# otlp: +# endpoint: http://${env.APOLLO_OTEL_EXPORTER_HOST:-localhost}:4317 +# protocol: grpc +# batch_processor: +# max_export_timeout: 42s + +preview_entity_cache: + enabled: true + + # Configure Redis + redis: + urls: ["redis://127.0.0.1:6379"] + timeout: 500ms # Optional, by default: 2ms + ttl: 24h # Optional, by default no expiration + + # Configure entity caching per subgraph + subgraphs: + products: + enabled: true + inventory: + enabled: false # disable for a specific subgraph + users: + enabled: true + +rhai: + main: main.rhai # -------------------- # note: `router --dev` has these default settings and enables the --hot-reload flag diff --git a/supergraph/schema/docker.graphql b/supergraph/schema/docker.graphql index 72288a8..d540354 100644 --- a/supergraph/schema/docker.graphql +++ b/supergraph/schema/docker.graphql @@ -1,6 +1,6 @@ schema @link(url: "https://specs.apollo.dev/link/v1.0") - @link(url: "https://specs.apollo.dev/join/v0.3", for: EXECUTION) + @link(url: "https://specs.apollo.dev/join/v0.4", for: EXECUTION) @link(url: "https://specs.apollo.dev/tag/v0.3") @link(url: "https://specs.apollo.dev/inaccessible/v0.2", for: SECURITY) @link(url: "https://myspecs.dev/myDirective/v1.0", import: ["@myDirective", {name: "@anotherDirective", as: "@hello"}]) @@ -12,9 +12,11 @@ directive @hello on FIELD_DEFINITION directive @inaccessible on FIELD_DEFINITION | OBJECT | INTERFACE | UNION | ARGUMENT_DEFINITION | SCALAR | ENUM | ENUM_VALUE | INPUT_OBJECT | INPUT_FIELD_DEFINITION +directive @join__directive(graphs: [join__Graph!], name: String!, args: join__DirectiveArguments) repeatable on SCHEMA | OBJECT | INTERFACE | FIELD_DEFINITION + directive @join__enumValue(graph: join__Graph!) repeatable on ENUM_VALUE -directive @join__field(graph: join__Graph, requires: join__FieldSet, provides: join__FieldSet, type: String, external: Boolean, override: String, usedOverridden: Boolean) repeatable on FIELD_DEFINITION | INPUT_FIELD_DEFINITION +directive @join__field(graph: join__Graph, requires: join__FieldSet, provides: join__FieldSet, type: String, external: Boolean, override: String, usedOverridden: Boolean, overrideLabel: String) repeatable on FIELD_DEFINITION | INPUT_FIELD_DEFINITION directive @join__graph(name: String!, url: String!) on ENUM_VALUE @@ -37,11 +39,12 @@ type DeliveryEstimates fastestDelivery: String } +scalar join__DirectiveArguments + scalar join__FieldSet enum join__Graph { INVENTORY @join__graph(name: "inventory", url: "http://inventory:4000/graphql") - PANDAS @join__graph(name: "pandas", url: "http://pandas:4000/graphql") PRODUCTS @join__graph(name: "products", url: "http://products:4000/graphql") REVIEWS @join__graph(name: "reviews", url: "http://reviews:4000/graphql") USERS @join__graph(name: "users", url: "http://users:4000/graphql") @@ -61,13 +64,6 @@ enum link__Purpose { EXECUTION } -type Panda - @join__type(graph: PANDAS) -{ - name: ID! - favoriteFood: String @tag(name: "nom-nom-nom") -} - type Product implements ProductItf & SkuItf @join__implements(graph: INVENTORY, interface: "ProductItf") @join__implements(graph: PRODUCTS, interface: "ProductItf") @@ -90,7 +86,8 @@ type Product implements ProductItf & SkuItf hidden: String @join__field(graph: PRODUCTS) reviewsScore: Float! @join__field(graph: REVIEWS, override: "products") oldField: String @join__field(graph: PRODUCTS) - reviewsCount: Int! @join__field(graph: REVIEWS) + reviewsCount: Int! @join__field(graph: PRODUCTS, external: true) @join__field(graph: REVIEWS) + discount: Float @join__field(graph: PRODUCTS, requires: "reviewsCount") reviews: [Review!]! @join__field(graph: REVIEWS) } @@ -132,13 +129,10 @@ type ProductVariation type Query @join__type(graph: INVENTORY) - @join__type(graph: PANDAS) @join__type(graph: PRODUCTS) @join__type(graph: REVIEWS) @join__type(graph: USERS) { - allPandas: [Panda] @join__field(graph: PANDAS) - panda(name: ID!): Panda @join__field(graph: PANDAS) allProducts: [ProductItf] @join__field(graph: PRODUCTS) product(id: ID!): ProductItf @join__field(graph: PRODUCTS) review(id: Int!): Review @join__field(graph: REVIEWS) diff --git a/supergraph/schema/docker.yaml b/supergraph/schema/docker.yaml index 8cc097a..23a5741 100644 --- a/supergraph/schema/docker.yaml +++ b/supergraph/schema/docker.yaml @@ -12,10 +12,6 @@ subgraphs: routing_url: http://users:4000/graphql schema: file: ../../subgraphs/users/users.graphql - pandas: - routing_url: http://pandas:4000/graphql - schema: - file: ../../subgraphs/pandas/pandas.graphql reviews: routing_url: http://reviews:4000/graphql schema: diff --git a/supergraph/schema/local.graphql b/supergraph/schema/local.graphql index 9d68d2e..c2c9d8c 100644 --- a/supergraph/schema/local.graphql +++ b/supergraph/schema/local.graphql @@ -1,6 +1,6 @@ schema @link(url: "https://specs.apollo.dev/link/v1.0") - @link(url: "https://specs.apollo.dev/join/v0.3", for: EXECUTION) + @link(url: "https://specs.apollo.dev/join/v0.4", for: EXECUTION) @link(url: "https://specs.apollo.dev/tag/v0.3") @link(url: "https://specs.apollo.dev/inaccessible/v0.2", for: SECURITY) @link(url: "https://myspecs.dev/myDirective/v1.0", import: ["@myDirective", {name: "@anotherDirective", as: "@hello"}]) @@ -12,9 +12,11 @@ directive @hello on FIELD_DEFINITION directive @inaccessible on FIELD_DEFINITION | OBJECT | INTERFACE | UNION | ARGUMENT_DEFINITION | SCALAR | ENUM | ENUM_VALUE | INPUT_OBJECT | INPUT_FIELD_DEFINITION +directive @join__directive(graphs: [join__Graph!], name: String!, args: join__DirectiveArguments) repeatable on SCHEMA | OBJECT | INTERFACE | FIELD_DEFINITION + directive @join__enumValue(graph: join__Graph!) repeatable on ENUM_VALUE -directive @join__field(graph: join__Graph, requires: join__FieldSet, provides: join__FieldSet, type: String, external: Boolean, override: String, usedOverridden: Boolean) repeatable on FIELD_DEFINITION | INPUT_FIELD_DEFINITION +directive @join__field(graph: join__Graph, requires: join__FieldSet, provides: join__FieldSet, type: String, external: Boolean, override: String, usedOverridden: Boolean, overrideLabel: String) repeatable on FIELD_DEFINITION | INPUT_FIELD_DEFINITION directive @join__graph(name: String!, url: String!) on ENUM_VALUE @@ -37,13 +39,14 @@ type DeliveryEstimates fastestDelivery: String } +scalar join__DirectiveArguments + scalar join__FieldSet enum join__Graph { INVENTORY @join__graph(name: "inventory", url: "http://localhost:4002/graphql") - PANDAS @join__graph(name: "pandas", url: "http://localhost:4004/graphql") PRODUCTS @join__graph(name: "products", url: "http://localhost:4001/graphql") - REVIEWS @join__graph(name: "reviews", url: "http://localhost:4005/graphql") + REVIEWS @join__graph(name: "reviews", url: "http://localhost:4004/graphql") USERS @join__graph(name: "users", url: "http://localhost:4003/graphql") } @@ -61,13 +64,6 @@ enum link__Purpose { EXECUTION } -type Panda - @join__type(graph: PANDAS) -{ - name: ID! - favoriteFood: String @tag(name: "nom-nom-nom") -} - type Product implements ProductItf & SkuItf @join__implements(graph: INVENTORY, interface: "ProductItf") @join__implements(graph: PRODUCTS, interface: "ProductItf") @@ -90,7 +86,8 @@ type Product implements ProductItf & SkuItf hidden: String @join__field(graph: PRODUCTS) reviewsScore: Float! @join__field(graph: REVIEWS, override: "products") oldField: String @join__field(graph: PRODUCTS) - reviewsCount: Int! @join__field(graph: REVIEWS) + reviewsCount: Int! @join__field(graph: PRODUCTS, external: true) @join__field(graph: REVIEWS) + discount: Float @join__field(graph: PRODUCTS, requires: "reviewsCount") reviews: [Review!]! @join__field(graph: REVIEWS) } @@ -132,13 +129,10 @@ type ProductVariation type Query @join__type(graph: INVENTORY) - @join__type(graph: PANDAS) @join__type(graph: PRODUCTS) @join__type(graph: REVIEWS) @join__type(graph: USERS) { - allPandas: [Panda] @join__field(graph: PANDAS) - panda(name: ID!): Panda @join__field(graph: PANDAS) allProducts: [ProductItf] @join__field(graph: PRODUCTS) product(id: ID!): ProductItf @join__field(graph: PRODUCTS) review(id: Int!): Review @join__field(graph: REVIEWS) diff --git a/supergraph/schema/local.yaml b/supergraph/schema/local.yaml index 4d04dc9..93e4bd2 100644 --- a/supergraph/schema/local.yaml +++ b/supergraph/schema/local.yaml @@ -12,11 +12,7 @@ subgraphs: routing_url: http://localhost:4003/graphql schema: file: ../../subgraphs/users/users.graphql - pandas: - routing_url: http://localhost:4004/graphql - schema: - file: ../../subgraphs/pandas/pandas.graphql reviews: - routing_url: http://localhost:4005/graphql + routing_url: http://localhost:4004/graphql schema: file: ../../subgraphs/reviews/reviews.graphql