diff options
| author | CoprDistGit <infra@openeuler.org> | 2023-05-05 13:23:13 +0000 |
|---|---|---|
| committer | CoprDistGit <infra@openeuler.org> | 2023-05-05 13:23:13 +0000 |
| commit | dc947a52b139607ddda233066574f789ddf1dc66 (patch) | |
| tree | 6504ab738e87a1270406ce7b050e0bfc723f02cb | |
| parent | 5e181641961237a32747a09890d3ea62cce0cf21 (diff) | |
automatic import of python-graphql-core-nextopeneuler20.03
| -rw-r--r-- | .gitignore | 1 | ||||
| -rw-r--r-- | python-graphql-core-next.spec | 858 | ||||
| -rw-r--r-- | sources | 1 |
3 files changed, 860 insertions, 0 deletions
@@ -0,0 +1 @@ +/GraphQL-core-next-1.1.1.tar.gz diff --git a/python-graphql-core-next.spec b/python-graphql-core-next.spec new file mode 100644 index 0000000..840a752 --- /dev/null +++ b/python-graphql-core-next.spec @@ -0,0 +1,858 @@ +%global _empty_manifest_terminate_build 0 +Name: python-GraphQL-core-next +Version: 1.1.1 +Release: 1 +Summary: GraphQL-core-next is a Python port of GraphQL.js, the JavaScript reference implementation for GraphQL. +License: MIT license +URL: https://github.com/graphql-python/graphql-core-next +Source0: https://mirrors.nju.edu.cn/pypi/web/packages/e2/ae/b1fc0f5dc4f0d6ccf4b41f18f5dc031ab2ab9fda07c27550c3fb38173025/GraphQL-core-next-1.1.1.tar.gz +BuildArch: noarch + + +%description +# GraphQL-core-next + +GraphQL-core-next is a Python 3.6+ port of [GraphQL.js](https://github.com/graphql/graphql-js), +the JavaScript reference implementation for [GraphQL](https://graphql.org/), +a query language for APIs created by Facebook. + +[](https://badge.fury.io/py/GraphQL-core-next) +[](https://graphql-core-next.readthedocs.io) +[](https://travis-ci.com/graphql-python/graphql-core-next) +[](https://codecov.io/gh/graphql-python/graphql-core-next) +[](https://pyup.io/repos/github/graphql-python/graphql-core-next/) +[](https://pyup.io/repos/github/graphql-python/graphql-core-next/) +[](https://github.com/ambv/black) + +The current version 1.1.1 of GraphQL-core-next is up-to-date with GraphQL.js version +14.4.0. All parts of the API are covered by an extensive test suite of currently 1885 +unit tests. + +Development will be continued with the new distribution name GraphQL-core from now on. + + +## GraphQL-core-next is now GraphQL-core 3 + +GraphQL-core-next has been discontinued as a separate Python distribution. +Instead, it is now released as GraphQL-core version 3 and newer, replacing +the existing GraphQL-core distribution. The old versions of GraphQL-core, +which also support older Python versions, are still available. + + +## Documentation + +A more detailed documentation for GraphQL-core-next can be found at +[graphql-core-next.readthedocs.io](https://graphql-core-next.readthedocs.io/). + +The documentation for GraphQL.js can be found at [graphql.org/graphql-js/](https://graphql.org/graphql-js/). + +The documentation for GraphQL itself can be found at [graphql.org](https://graphql.org/). + + +There will be also [blog articles](https://cito.github.io/tags/graphql/) with more usage +examples. + + +## Getting started + +An overview of GraphQL in general is available in the +[README](https://github.com/graphql/graphql-spec/blob/master/README.md) for the +[Specification for GraphQL](https://github.com/graphql/graphql-spec). That overview +describes a simple set of GraphQL examples that exist as [tests](tests) in this +repository. A good way to get started with this repository is to walk through that +README and the corresponding tests in parallel. + + +## Installation + +GraphQL-core-next can be installed from PyPI using the built-in pip command: + + python -m pip install graphql-core-next + +Alternatively, you can also use [pipenv](https://docs.pipenv.org/) for installation in a +virtual environment: + + pipenv install graphql-core-next + + +## Usage + +GraphQL-core-next provides two important capabilities: building a type schema, and +serving queries against that type schema. + +First, build a GraphQL type schema which maps to your code base: + +```python +from graphql import ( + GraphQLSchema, GraphQLObjectType, GraphQLField, GraphQLString) + +schema = GraphQLSchema( + query=GraphQLObjectType( + name='RootQueryType', + fields={ + 'hello': GraphQLField( + GraphQLString, + resolve=lambda obj, info: 'world') + })) +``` + +This defines a simple schema with one type and one field, that resolves to a fixed +value. The `resolve` function can return a value, a co-routine object or a list of +these. It takes two positional arguments; the first one provides the root or the +resolved parent field, the second one provides a `GraphQLResolveInfo` object which +contains information about the execution state of the query, including a `context` +attribute holding per-request state such as authentication information or database +session. Any GraphQL arguments are passed to the `resolve` functions as individual +keyword arguments. + +Note that the signature of the resolver functions is a bit different in GraphQL.js, +where the context is passed separately and arguments are passed as a single object. +Also note that GraphQL fields must be passed as a `GraphQLField` object explicitly. +Similarly, GraphQL arguments must be passed as `GraphQLArgument` objects. + +A more complex example is included in the top level [tests](tests) directory. + +Then, serve the result of a query against that type schema. + +```python +from graphql import graphql_sync + +query = '{ hello }' + +print(graphql_sync(schema, query)) +``` + +This runs a query fetching the one field defined, and then prints the result: + +```python +ExecutionResult(data={'hello': 'world'}, errors=None) +``` + +The `graphql_sync` function will first ensure the query is syntactically and +semantically valid before executing it, reporting errors otherwise. + +```python +from graphql import graphql_sync + +query = '{ boyhowdy }' + +print(graphql_sync(schema, query)) +``` + +Because we queried a non-existing field, we will get the following result: + +```python +ExecutionResult(data=None, errors=[GraphQLError( + "Cannot query field 'boyhowdy' on type 'RootQueryType'.", + locations=[SourceLocation(line=1, column=3)])]) +``` + +The `graphql_sync` function assumes that all resolvers return values synchronously. By +using coroutines as resolvers, you can also create results in an asynchronous fashion +with the `graphql` function. + +```python +import asyncio +from graphql import ( + graphql, GraphQLSchema, GraphQLObjectType, GraphQLField, GraphQLString) + + +async def resolve_hello(obj, info): + await asyncio.sleep(3) + return 'world' + +schema = GraphQLSchema( + query=GraphQLObjectType( + name='RootQueryType', + fields={ + 'hello': GraphQLField( + GraphQLString, + resolve=resolve_hello) + })) + + +async def main(): + query = '{ hello }' + print('Fetching the result...') + result = await graphql(schema, query) + print(result) + + +loop = asyncio.get_event_loop() +try: + loop.run_until_complete(main()) +finally: + loop.close() +``` + + +## Goals and restrictions + +GraphQL-core-next tries to reproduce the code of the reference implementation GraphQL.js +in Python as closely as possible and to stay up-to-date with the latest development of +GraphQL.js. + +It has been created as a modern alternative to +[GraphQL-core](https://github.com/graphql-python/graphql-core), a prior work +by Syrus Akbary, based on an older version of GraphQL.js and also targeting +older Python versions. Some parts of GraphQL-core-next have been inspired by +GraphQL-core or directly taken over with only slight modifications, but most of the code +has been re-implemented from scratch, replicating the latest code in GraphQL.js very +closely and adding type hints for Python. + +Design goals for the GraphQL-core-next library are: + +* to be a simple, cruft-free, state-of-the-art implementation of GraphQL using current + library and language versions +* to be very close to the GraphQL.js reference implementation, while still using a + Pythonic API and code style +* to make extensive use of Python type hints, similar to how GraphQL.js makes use of Flow +* to use [black](https://github.com/ambv/black) for automatic code formatting +* to replicate the complete Mocha-based test suite of GraphQL.js using + [pytest](https://docs.pytest.org/) + +Some restrictions (mostly in line with the design goals): + +* requires Python 3.6 or 3.7 +* does not support some already deprecated methods and options of GraphQL.js +* supports asynchronous operations only via async.io + (does not support the additional executors in GraphQL-core) +* the benchmarks have not yet been ported to Python + + +## Integration with other libraries and roadmap + +* [Graphene](http://graphene-python.org/) is a more high-level framework for building + GraphQL APIs in Python, and there is already a whole ecosystem of libraries, server + integrations and tools built on top of Graphene. Most of this Graphene ecosystem has + also been created by Syrus Akbary, who meanwhile has handed over the maintenance + and future development to members of the GraphQL-Python community. + + The current version 2 of Graphene is using Graphql-core as core library for much of + the heavy lifting. Note that Graphene 2 is not compatible with GraphQL-core-next. + The new version 3 of Graphene however is planned to use GraphQL-core-next instead of + GraphQL-core, and GraphQL-core-next will be renamed to Graphql-core 3. + +* [Ariadne](https://github.com/mirumee/ariadne) is a Python library for implementing + GraphQL servers using schema-first approach created by Mirumee Software. + + Ariadne is already using GraphQL-core-next as its GraphQL implementation. + +* [Strawberry](https://github.com/strawberry-graphql/strawberry), created by Patrick + Arminio, is a new GraphQL library for Python 3, inspired by dataclasses, + that is also using GraphQL-core-next as underpinning. + + +## Changelog + +Changes are tracked as +[GitHub releases](https://github.com/graphql-python/graphql-core-next/releases). + + +## Credits and history + +The GraphQL-core-next library +* has been created and is maintained by Christoph Zwerschke +* uses ideas and code from GraphQL-core, a prior work by Syrus Akbary +* is a Python port of GraphQL.js which has been developed by Lee Byron and others + at Facebook, Inc. and is now maintained + by the [GraphQL foundation](https://gql.foundation/join/) + +Please watch the recording of Lee Byron's short keynote on the +[history of GraphQL](https://www.youtube.com/watch?v=VjHWkBr3tjI) +at the open source leadership summit 2019 to better understand +how and why GraphQL was created at Facebook and then became open sourced +and ported to many different programming languages. + + +## License + +GraphQL-core-next is +[MIT-licensed](https://github.com/graphql-python/graphql-core-next/blob/master/LICENSE), +just like GraphQL.js. + + + + +%package -n python3-GraphQL-core-next +Summary: GraphQL-core-next is a Python port of GraphQL.js, the JavaScript reference implementation for GraphQL. +Provides: python-GraphQL-core-next +BuildRequires: python3-devel +BuildRequires: python3-setuptools +BuildRequires: python3-pip +%description -n python3-GraphQL-core-next +# GraphQL-core-next + +GraphQL-core-next is a Python 3.6+ port of [GraphQL.js](https://github.com/graphql/graphql-js), +the JavaScript reference implementation for [GraphQL](https://graphql.org/), +a query language for APIs created by Facebook. + +[](https://badge.fury.io/py/GraphQL-core-next) +[](https://graphql-core-next.readthedocs.io) +[](https://travis-ci.com/graphql-python/graphql-core-next) +[](https://codecov.io/gh/graphql-python/graphql-core-next) +[](https://pyup.io/repos/github/graphql-python/graphql-core-next/) +[](https://pyup.io/repos/github/graphql-python/graphql-core-next/) +[](https://github.com/ambv/black) + +The current version 1.1.1 of GraphQL-core-next is up-to-date with GraphQL.js version +14.4.0. All parts of the API are covered by an extensive test suite of currently 1885 +unit tests. + +Development will be continued with the new distribution name GraphQL-core from now on. + + +## GraphQL-core-next is now GraphQL-core 3 + +GraphQL-core-next has been discontinued as a separate Python distribution. +Instead, it is now released as GraphQL-core version 3 and newer, replacing +the existing GraphQL-core distribution. The old versions of GraphQL-core, +which also support older Python versions, are still available. + + +## Documentation + +A more detailed documentation for GraphQL-core-next can be found at +[graphql-core-next.readthedocs.io](https://graphql-core-next.readthedocs.io/). + +The documentation for GraphQL.js can be found at [graphql.org/graphql-js/](https://graphql.org/graphql-js/). + +The documentation for GraphQL itself can be found at [graphql.org](https://graphql.org/). + + +There will be also [blog articles](https://cito.github.io/tags/graphql/) with more usage +examples. + + +## Getting started + +An overview of GraphQL in general is available in the +[README](https://github.com/graphql/graphql-spec/blob/master/README.md) for the +[Specification for GraphQL](https://github.com/graphql/graphql-spec). That overview +describes a simple set of GraphQL examples that exist as [tests](tests) in this +repository. A good way to get started with this repository is to walk through that +README and the corresponding tests in parallel. + + +## Installation + +GraphQL-core-next can be installed from PyPI using the built-in pip command: + + python -m pip install graphql-core-next + +Alternatively, you can also use [pipenv](https://docs.pipenv.org/) for installation in a +virtual environment: + + pipenv install graphql-core-next + + +## Usage + +GraphQL-core-next provides two important capabilities: building a type schema, and +serving queries against that type schema. + +First, build a GraphQL type schema which maps to your code base: + +```python +from graphql import ( + GraphQLSchema, GraphQLObjectType, GraphQLField, GraphQLString) + +schema = GraphQLSchema( + query=GraphQLObjectType( + name='RootQueryType', + fields={ + 'hello': GraphQLField( + GraphQLString, + resolve=lambda obj, info: 'world') + })) +``` + +This defines a simple schema with one type and one field, that resolves to a fixed +value. The `resolve` function can return a value, a co-routine object or a list of +these. It takes two positional arguments; the first one provides the root or the +resolved parent field, the second one provides a `GraphQLResolveInfo` object which +contains information about the execution state of the query, including a `context` +attribute holding per-request state such as authentication information or database +session. Any GraphQL arguments are passed to the `resolve` functions as individual +keyword arguments. + +Note that the signature of the resolver functions is a bit different in GraphQL.js, +where the context is passed separately and arguments are passed as a single object. +Also note that GraphQL fields must be passed as a `GraphQLField` object explicitly. +Similarly, GraphQL arguments must be passed as `GraphQLArgument` objects. + +A more complex example is included in the top level [tests](tests) directory. + +Then, serve the result of a query against that type schema. + +```python +from graphql import graphql_sync + +query = '{ hello }' + +print(graphql_sync(schema, query)) +``` + +This runs a query fetching the one field defined, and then prints the result: + +```python +ExecutionResult(data={'hello': 'world'}, errors=None) +``` + +The `graphql_sync` function will first ensure the query is syntactically and +semantically valid before executing it, reporting errors otherwise. + +```python +from graphql import graphql_sync + +query = '{ boyhowdy }' + +print(graphql_sync(schema, query)) +``` + +Because we queried a non-existing field, we will get the following result: + +```python +ExecutionResult(data=None, errors=[GraphQLError( + "Cannot query field 'boyhowdy' on type 'RootQueryType'.", + locations=[SourceLocation(line=1, column=3)])]) +``` + +The `graphql_sync` function assumes that all resolvers return values synchronously. By +using coroutines as resolvers, you can also create results in an asynchronous fashion +with the `graphql` function. + +```python +import asyncio +from graphql import ( + graphql, GraphQLSchema, GraphQLObjectType, GraphQLField, GraphQLString) + + +async def resolve_hello(obj, info): + await asyncio.sleep(3) + return 'world' + +schema = GraphQLSchema( + query=GraphQLObjectType( + name='RootQueryType', + fields={ + 'hello': GraphQLField( + GraphQLString, + resolve=resolve_hello) + })) + + +async def main(): + query = '{ hello }' + print('Fetching the result...') + result = await graphql(schema, query) + print(result) + + +loop = asyncio.get_event_loop() +try: + loop.run_until_complete(main()) +finally: + loop.close() +``` + + +## Goals and restrictions + +GraphQL-core-next tries to reproduce the code of the reference implementation GraphQL.js +in Python as closely as possible and to stay up-to-date with the latest development of +GraphQL.js. + +It has been created as a modern alternative to +[GraphQL-core](https://github.com/graphql-python/graphql-core), a prior work +by Syrus Akbary, based on an older version of GraphQL.js and also targeting +older Python versions. Some parts of GraphQL-core-next have been inspired by +GraphQL-core or directly taken over with only slight modifications, but most of the code +has been re-implemented from scratch, replicating the latest code in GraphQL.js very +closely and adding type hints for Python. + +Design goals for the GraphQL-core-next library are: + +* to be a simple, cruft-free, state-of-the-art implementation of GraphQL using current + library and language versions +* to be very close to the GraphQL.js reference implementation, while still using a + Pythonic API and code style +* to make extensive use of Python type hints, similar to how GraphQL.js makes use of Flow +* to use [black](https://github.com/ambv/black) for automatic code formatting +* to replicate the complete Mocha-based test suite of GraphQL.js using + [pytest](https://docs.pytest.org/) + +Some restrictions (mostly in line with the design goals): + +* requires Python 3.6 or 3.7 +* does not support some already deprecated methods and options of GraphQL.js +* supports asynchronous operations only via async.io + (does not support the additional executors in GraphQL-core) +* the benchmarks have not yet been ported to Python + + +## Integration with other libraries and roadmap + +* [Graphene](http://graphene-python.org/) is a more high-level framework for building + GraphQL APIs in Python, and there is already a whole ecosystem of libraries, server + integrations and tools built on top of Graphene. Most of this Graphene ecosystem has + also been created by Syrus Akbary, who meanwhile has handed over the maintenance + and future development to members of the GraphQL-Python community. + + The current version 2 of Graphene is using Graphql-core as core library for much of + the heavy lifting. Note that Graphene 2 is not compatible with GraphQL-core-next. + The new version 3 of Graphene however is planned to use GraphQL-core-next instead of + GraphQL-core, and GraphQL-core-next will be renamed to Graphql-core 3. + +* [Ariadne](https://github.com/mirumee/ariadne) is a Python library for implementing + GraphQL servers using schema-first approach created by Mirumee Software. + + Ariadne is already using GraphQL-core-next as its GraphQL implementation. + +* [Strawberry](https://github.com/strawberry-graphql/strawberry), created by Patrick + Arminio, is a new GraphQL library for Python 3, inspired by dataclasses, + that is also using GraphQL-core-next as underpinning. + + +## Changelog + +Changes are tracked as +[GitHub releases](https://github.com/graphql-python/graphql-core-next/releases). + + +## Credits and history + +The GraphQL-core-next library +* has been created and is maintained by Christoph Zwerschke +* uses ideas and code from GraphQL-core, a prior work by Syrus Akbary +* is a Python port of GraphQL.js which has been developed by Lee Byron and others + at Facebook, Inc. and is now maintained + by the [GraphQL foundation](https://gql.foundation/join/) + +Please watch the recording of Lee Byron's short keynote on the +[history of GraphQL](https://www.youtube.com/watch?v=VjHWkBr3tjI) +at the open source leadership summit 2019 to better understand +how and why GraphQL was created at Facebook and then became open sourced +and ported to many different programming languages. + + +## License + +GraphQL-core-next is +[MIT-licensed](https://github.com/graphql-python/graphql-core-next/blob/master/LICENSE), +just like GraphQL.js. + + + + +%package help +Summary: Development documents and examples for GraphQL-core-next +Provides: python3-GraphQL-core-next-doc +%description help +# GraphQL-core-next + +GraphQL-core-next is a Python 3.6+ port of [GraphQL.js](https://github.com/graphql/graphql-js), +the JavaScript reference implementation for [GraphQL](https://graphql.org/), +a query language for APIs created by Facebook. + +[](https://badge.fury.io/py/GraphQL-core-next) +[](https://graphql-core-next.readthedocs.io) +[](https://travis-ci.com/graphql-python/graphql-core-next) +[](https://codecov.io/gh/graphql-python/graphql-core-next) +[](https://pyup.io/repos/github/graphql-python/graphql-core-next/) +[](https://pyup.io/repos/github/graphql-python/graphql-core-next/) +[](https://github.com/ambv/black) + +The current version 1.1.1 of GraphQL-core-next is up-to-date with GraphQL.js version +14.4.0. All parts of the API are covered by an extensive test suite of currently 1885 +unit tests. + +Development will be continued with the new distribution name GraphQL-core from now on. + + +## GraphQL-core-next is now GraphQL-core 3 + +GraphQL-core-next has been discontinued as a separate Python distribution. +Instead, it is now released as GraphQL-core version 3 and newer, replacing +the existing GraphQL-core distribution. The old versions of GraphQL-core, +which also support older Python versions, are still available. + + +## Documentation + +A more detailed documentation for GraphQL-core-next can be found at +[graphql-core-next.readthedocs.io](https://graphql-core-next.readthedocs.io/). + +The documentation for GraphQL.js can be found at [graphql.org/graphql-js/](https://graphql.org/graphql-js/). + +The documentation for GraphQL itself can be found at [graphql.org](https://graphql.org/). + + +There will be also [blog articles](https://cito.github.io/tags/graphql/) with more usage +examples. + + +## Getting started + +An overview of GraphQL in general is available in the +[README](https://github.com/graphql/graphql-spec/blob/master/README.md) for the +[Specification for GraphQL](https://github.com/graphql/graphql-spec). That overview +describes a simple set of GraphQL examples that exist as [tests](tests) in this +repository. A good way to get started with this repository is to walk through that +README and the corresponding tests in parallel. + + +## Installation + +GraphQL-core-next can be installed from PyPI using the built-in pip command: + + python -m pip install graphql-core-next + +Alternatively, you can also use [pipenv](https://docs.pipenv.org/) for installation in a +virtual environment: + + pipenv install graphql-core-next + + +## Usage + +GraphQL-core-next provides two important capabilities: building a type schema, and +serving queries against that type schema. + +First, build a GraphQL type schema which maps to your code base: + +```python +from graphql import ( + GraphQLSchema, GraphQLObjectType, GraphQLField, GraphQLString) + +schema = GraphQLSchema( + query=GraphQLObjectType( + name='RootQueryType', + fields={ + 'hello': GraphQLField( + GraphQLString, + resolve=lambda obj, info: 'world') + })) +``` + +This defines a simple schema with one type and one field, that resolves to a fixed +value. The `resolve` function can return a value, a co-routine object or a list of +these. It takes two positional arguments; the first one provides the root or the +resolved parent field, the second one provides a `GraphQLResolveInfo` object which +contains information about the execution state of the query, including a `context` +attribute holding per-request state such as authentication information or database +session. Any GraphQL arguments are passed to the `resolve` functions as individual +keyword arguments. + +Note that the signature of the resolver functions is a bit different in GraphQL.js, +where the context is passed separately and arguments are passed as a single object. +Also note that GraphQL fields must be passed as a `GraphQLField` object explicitly. +Similarly, GraphQL arguments must be passed as `GraphQLArgument` objects. + +A more complex example is included in the top level [tests](tests) directory. + +Then, serve the result of a query against that type schema. + +```python +from graphql import graphql_sync + +query = '{ hello }' + +print(graphql_sync(schema, query)) +``` + +This runs a query fetching the one field defined, and then prints the result: + +```python +ExecutionResult(data={'hello': 'world'}, errors=None) +``` + +The `graphql_sync` function will first ensure the query is syntactically and +semantically valid before executing it, reporting errors otherwise. + +```python +from graphql import graphql_sync + +query = '{ boyhowdy }' + +print(graphql_sync(schema, query)) +``` + +Because we queried a non-existing field, we will get the following result: + +```python +ExecutionResult(data=None, errors=[GraphQLError( + "Cannot query field 'boyhowdy' on type 'RootQueryType'.", + locations=[SourceLocation(line=1, column=3)])]) +``` + +The `graphql_sync` function assumes that all resolvers return values synchronously. By +using coroutines as resolvers, you can also create results in an asynchronous fashion +with the `graphql` function. + +```python +import asyncio +from graphql import ( + graphql, GraphQLSchema, GraphQLObjectType, GraphQLField, GraphQLString) + + +async def resolve_hello(obj, info): + await asyncio.sleep(3) + return 'world' + +schema = GraphQLSchema( + query=GraphQLObjectType( + name='RootQueryType', + fields={ + 'hello': GraphQLField( + GraphQLString, + resolve=resolve_hello) + })) + + +async def main(): + query = '{ hello }' + print('Fetching the result...') + result = await graphql(schema, query) + print(result) + + +loop = asyncio.get_event_loop() +try: + loop.run_until_complete(main()) +finally: + loop.close() +``` + + +## Goals and restrictions + +GraphQL-core-next tries to reproduce the code of the reference implementation GraphQL.js +in Python as closely as possible and to stay up-to-date with the latest development of +GraphQL.js. + +It has been created as a modern alternative to +[GraphQL-core](https://github.com/graphql-python/graphql-core), a prior work +by Syrus Akbary, based on an older version of GraphQL.js and also targeting +older Python versions. Some parts of GraphQL-core-next have been inspired by +GraphQL-core or directly taken over with only slight modifications, but most of the code +has been re-implemented from scratch, replicating the latest code in GraphQL.js very +closely and adding type hints for Python. + +Design goals for the GraphQL-core-next library are: + +* to be a simple, cruft-free, state-of-the-art implementation of GraphQL using current + library and language versions +* to be very close to the GraphQL.js reference implementation, while still using a + Pythonic API and code style +* to make extensive use of Python type hints, similar to how GraphQL.js makes use of Flow +* to use [black](https://github.com/ambv/black) for automatic code formatting +* to replicate the complete Mocha-based test suite of GraphQL.js using + [pytest](https://docs.pytest.org/) + +Some restrictions (mostly in line with the design goals): + +* requires Python 3.6 or 3.7 +* does not support some already deprecated methods and options of GraphQL.js +* supports asynchronous operations only via async.io + (does not support the additional executors in GraphQL-core) +* the benchmarks have not yet been ported to Python + + +## Integration with other libraries and roadmap + +* [Graphene](http://graphene-python.org/) is a more high-level framework for building + GraphQL APIs in Python, and there is already a whole ecosystem of libraries, server + integrations and tools built on top of Graphene. Most of this Graphene ecosystem has + also been created by Syrus Akbary, who meanwhile has handed over the maintenance + and future development to members of the GraphQL-Python community. + + The current version 2 of Graphene is using Graphql-core as core library for much of + the heavy lifting. Note that Graphene 2 is not compatible with GraphQL-core-next. + The new version 3 of Graphene however is planned to use GraphQL-core-next instead of + GraphQL-core, and GraphQL-core-next will be renamed to Graphql-core 3. + +* [Ariadne](https://github.com/mirumee/ariadne) is a Python library for implementing + GraphQL servers using schema-first approach created by Mirumee Software. + + Ariadne is already using GraphQL-core-next as its GraphQL implementation. + +* [Strawberry](https://github.com/strawberry-graphql/strawberry), created by Patrick + Arminio, is a new GraphQL library for Python 3, inspired by dataclasses, + that is also using GraphQL-core-next as underpinning. + + +## Changelog + +Changes are tracked as +[GitHub releases](https://github.com/graphql-python/graphql-core-next/releases). + + +## Credits and history + +The GraphQL-core-next library +* has been created and is maintained by Christoph Zwerschke +* uses ideas and code from GraphQL-core, a prior work by Syrus Akbary +* is a Python port of GraphQL.js which has been developed by Lee Byron and others + at Facebook, Inc. and is now maintained + by the [GraphQL foundation](https://gql.foundation/join/) + +Please watch the recording of Lee Byron's short keynote on the +[history of GraphQL](https://www.youtube.com/watch?v=VjHWkBr3tjI) +at the open source leadership summit 2019 to better understand +how and why GraphQL was created at Facebook and then became open sourced +and ported to many different programming languages. + + +## License + +GraphQL-core-next is +[MIT-licensed](https://github.com/graphql-python/graphql-core-next/blob/master/LICENSE), +just like GraphQL.js. + + + + +%prep +%autosetup -n GraphQL-core-next-1.1.1 + +%build +%py3_build + +%install +%py3_install +install -d -m755 %{buildroot}/%{_pkgdocdir} +if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi +if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi +if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi +if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi +pushd %{buildroot} +if [ -d usr/lib ]; then + find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/lib64 ]; then + find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/bin ]; then + find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/sbin ]; then + find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst +fi +touch doclist.lst +if [ -d usr/share/man ]; then + find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst +fi +popd +mv %{buildroot}/filelist.lst . +mv %{buildroot}/doclist.lst . + +%files -n python3-GraphQL-core-next -f filelist.lst +%dir %{python3_sitelib}/* + +%files help -f doclist.lst +%{_docdir}/* + +%changelog +* Fri May 05 2023 Python_Bot <Python_Bot@openeuler.org> - 1.1.1-1 +- Package Spec generated @@ -0,0 +1 @@ +2de6923aa6068bd29b704e73559af8fc GraphQL-core-next-1.1.1.tar.gz |
