Graphene

Latest version: v3.3

Safety actively analyzes 621064 Python packages for vulnerabilities to keep your Python projects secure.

Scan your dependencies

Page 1 of 10

3.3.0

This release brings two new features and several fixes and semantic upgrades due to new Python features. Thanks to everyone that contributed! 😊

Default value for InputObjectTypes
⚠️⚠️**ACTION REQUIRED**⚠️⚠️
In GraphQL, inputs can have fields which are optional. Currently, if those fields are not specified in the query, they are passed to the python inputs as `None`. This renders them indistinguishable from fields that are actually passed to the query with a value of `null`. While the alternative would be to check the definition via `"key" in input`, it is more accessible to mark these fields as explicitly `UNDEFINED`.
[This PR](https://github.com/graphql-python/graphene/pull/1506) adds a new global override, which allows unspecified fields to be set to `graphql.UNDEFINED`. In the future, the default Value will be set to `UNDEFINED`, making this a soft migration and deprecation of the previous situation.

**This is a soft migration. Long-Term, the Input Objects will ALWAYS contain the value `UNDEFINED`** Make sure your code supports these cases in `None` checks. After the default has been set to `UNDEFINED`, you will still be able to switch back to `None` for the foreseeable future.


Strict connection types support in Relay

Custom Relay connection classes can now be made `NonNull` using the `strict_types` option on the connection meta.

Using this example
python
class MyObjectConnection(Connection):
class Meta:
node = MyObject
strict_types = True


will change from
graphql
type MyObjectConnection {
edges: [MyObject]
}


to
graphql
type MyObjectConnection {
edges: [MyObject!]!
}



Caveats

We want to make sure you're informed about using NonNull relay connections. While they are a great way to get rid of some null checks in typed frontends, it's important to be mindful of error handling with these connections. When working with NonNull connections, it's crucial to remember that if a requested field or edge is not available or the resolver throws an error, the error will bubble up to the next nullable parent field, which is oftentimes the root node. That way, you cannot handle partial results in case of partial errors anymore. In a nullable connection, only the nullable fields will be set to null and the error will not bubble up.

To address this, we recommend considering waiting for the future release of client-controlled nullability for cases where certain connections might be nullable. By opting for client-controlled nullability, you gain more control over error handling, enabling you to handle potential null values more gracefully and enhance the overall user experience. Read more about client controlled nullability here: https://github.com/graphql/graphql-spec/issues/867

What's Changed
* Default enum description to "An enumeration." by firaskafri in https://github.com/graphql-python/graphene/pull/1502
* Allow the user to change InputObjectType's default value on non-specified inputs to a sentinel value by flipbit03 in https://github.com/graphql-python/graphene/pull/1506
* 881: Corrected enum metaclass to fix pickle.dumps() by senseysensor in https://github.com/graphql-python/graphene/pull/1495
* chore: Use `typing.TYPE_CHECKING` instead of MYPY by rapsealk in https://github.com/graphql-python/graphene/pull/1503
* test: print schema with InputObjectType with DateTime field with default_value (1293) by ransomw in https://github.com/graphql-python/graphene/pull/1513
* docs: add get_human function by conao3 in https://github.com/graphql-python/graphene/pull/1380
* CI: drop python 3.6 by dulmandakh in https://github.com/graphql-python/graphene/pull/1507
* types: add option for strict connection types by shrouxm in https://github.com/graphql-python/graphene/pull/1504

New Contributors
* firaskafri made their first contribution in https://github.com/graphql-python/graphene/pull/1502
* senseysensor made their first contribution in https://github.com/graphql-python/graphene/pull/1495
* rapsealk made their first contribution in https://github.com/graphql-python/graphene/pull/1503
* ransomw made their first contribution in https://github.com/graphql-python/graphene/pull/1513
* dulmandakh made their first contribution in https://github.com/graphql-python/graphene/pull/1507
* shrouxm made their first contribution in https://github.com/graphql-python/graphene/pull/1504

**Full Changelog**: https://github.com/graphql-python/graphene/compare/v3.2.2...v3.3.0

3.2.2

This release provides some internal refactoring to the relay types to improve support for adding custom fields to them.

3.2.1

What's Changed
Non-required `InputFields` and `Arguments` can now be marked as deprecated by passing the `deprecation_reason` keyword argument to the constructor.
* Complete deprecated fields and arguments support by vhutov in https://github.com/graphql-python/graphene/pull/1472

New Contributors
* vhutov made their first contribution in https://github.com/graphql-python/graphene/pull/1472

**Full Changelog**: https://github.com/graphql-python/graphene/compare/v3.2.0...v3.2.1

3.2.0

What's Changed
Support for custom global IDs in `relay.Node`

The global ID type of a `Node` can now be customized:

python
class CustomNode(Node):
class Meta:
global_id_type = CustomGlobalIDType


class User(ObjectType):
class Meta:
interfaces = [CustomNode]

name = String()

classmethod
def get_node(cls, _type, _id):
return self.users[_id]


Available Types
Currently, the following types are available:

- **`DefaultGlobalIDType`**: Default global ID type: base64 encoded version of "<node type name>: <node id>". (Previously the only option) Scalar: `ID`
- **`SimpleGlobalIDType `**: Simple global ID type: simply the id of the object. Scalar: `ID`
- **`UUIDGlobalIDType `**: UUID global ID type. Scalar: `UUID`

Customization
To create a custom global type, `BaseGlobalIDType` must be extended:

python

class CustomGlobalIDType(BaseGlobalIDType):

graphene_type = CustomScalar

classmethod
def resolve_global_id(cls, info, global_id):
_type = custom_get_type_from_global_id(global_id)
return _type, global_id

classmethod
def to_global_id(cls, _type, _id):
return _id

`graphene_type` specifies the type of scalar to be used in the schema. Remember, that if you're using `ID` as a scalar, you might need to deserialize your custom global ID first!

Relevant PR:
* feat: Add support for custom global (Issue 1276) by tcleonard in https://github.com/graphql-python/graphene/pull/1428
Fixes & Improvements:

- Regression fix: (graphene 2->3) `ObjectTypes` can be copied again 1333 by keu210
- Fix: Enums can now have members called `description`: 1478 by mike-roberts-healx
- Enums are now hashable: 1461 by bkad
- Enums are now iterable: 1473 by rgroothuijsen
- Dependency on unused promise Library was removed: 1476 by mike-roberts-healx
- Docs improvements by rgroothuijsen

All Changes
* feat: Add support for custom global (Issue 1276) by tcleonard in https://github.com/graphql-python/graphene/pull/1428
* Add copy function for GrapheneGraphQLType by keu210 in https://github.com/graphql-python/graphene/pull/1463
* hashable Enum by bkad in https://github.com/graphql-python/graphene/pull/1461
* Clarify execution order in middleware docs by rgroothuijsen in https://github.com/graphql-python/graphene/pull/1475
* fix: MyPy findings due to a mypy version upgrade were corrected by erikwrede in https://github.com/graphql-python/graphene/pull/1477
* Disambiguate argument name in quickstart docs by rgroothuijsen in https://github.com/graphql-python/graphene/pull/1474
* Make Graphene enums iterable like Python enums by rgroothuijsen in https://github.com/graphql-python/graphene/pull/1473
* Remove unnecessary dependency on 'promise' library by mike-roberts-healx in https://github.com/graphql-python/graphene/pull/1476
* Do not interpret Enum members called 'description' as description properties by mike-roberts-healx in https://github.com/graphql-python/graphene/pull/1478

New Contributors
* keu210 made their first contribution in https://github.com/graphql-python/graphene/pull/1463
* bkad made their first contribution in https://github.com/graphql-python/graphene/pull/1461
* rgroothuijsen made their first contribution in https://github.com/graphql-python/graphene/pull/1475
* mike-roberts-healx made their first contribution in https://github.com/graphql-python/graphene/pull/1476

**Full Changelog**: https://github.com/graphql-python/graphene/compare/v3.1.1...v3.2.0

3.1.1

What's changed
Dataloader
Graphene now includes an updated version of `aiodataloader` by Syrus Akbary under `graphene.utils.dataloader` due to inactivity of the old repository. The update fixes an issue some users experienced when trying to use `dataloader` in conjunction with pytest (https://github.com/syrusakbary/aiodataloader/issues/13). Further contributions and updates to dataloader in this repo are welcome!

Enums
A custom typename can now be added when using `from_enum`:

python
from enum import Enum as PyEnum

class Color(PyEnum):
RED = 1
YELLOW = 2
BLUE = 3

GColor = Enum.from_enum(Color, description="original colors")
UniqueGColor = Enum.from_enum(
Color, name="UniqueColor", description="unique colors"
)


graphql
type Query {
color: Color!
uniqueColor: UniqueColor!
}
"""original colors"""
enum Color {
RED
YELLOW
BLUE
}
"""unique colors"""
enum UniqueColor {
RED
YELLOW
BLUE
}

* feat: add ability to provide a type name to enum when using from_enum by tcleonard in https://github.com/graphql-python/graphene/pull/1430


Interfaces
Interfaces extending interfaces is now supported!
python
class FooInterface(Interface):
foo = String()

class BarInterface(Interface):
class Meta:
interfaces = [FooInterface]

foo = String()
bar = String()


graphql
interface FooInterface {
foo: String
}

interface BarInterface implements FooInterface {
foo: String
bar: String
}

* Add support for interfaces on interfaces by AlecRosenbaum in https://github.com/graphql-python/graphene/pull/1304


Thank you to everyone that contributed to this release!

Other Changes
* Fix typo in union comments by ramonwenger in https://github.com/graphql-python/graphene/pull/1424
* Add Codecov to github actions by erikwrede in https://github.com/graphql-python/graphene/pull/1431
* docs: Fix a few typos by timgates42 in https://github.com/graphql-python/graphene/pull/1437
* Highlight .get in backticks by RJ722 in https://github.com/graphql-python/graphene/pull/1402
* Add support for interfaces on interfaces by AlecRosenbaum in https://github.com/graphql-python/graphene/pull/1304
* Update Dataloader docs [Waiting for Graphene v3 to be live] by jkimbo in https://github.com/graphql-python/graphene/pull/1190
* Avoid ambiguity in graphene.Mutation docstring [documentation] by belkka in https://github.com/graphql-python/graphene/pull/1381
* Issue 1413 fix invalid input type by tcleonard in https://github.com/graphql-python/graphene/pull/1414
* Delete coveralls.yml by erikwrede in https://github.com/graphql-python/graphene/pull/1442
* fix: use install instead of instal for consistency by karmingc in https://github.com/graphql-python/graphene/pull/1444
* Update quickstart.rst by alimcmaster1 in https://github.com/graphql-python/graphene/pull/1407
* Update pre-commit hooks by ulgens in https://github.com/graphql-python/graphene/pull/1447
* fix: update ariadne url to the new docs by DrewHoo in https://github.com/graphql-python/graphene/pull/1370
* Add Python 3.11 release candidate 1 to the testing by cclauss in https://github.com/graphql-python/graphene/pull/1450
* Remove duplicate flake8 call in tox, it's covered by pre-commit by ulgens in https://github.com/graphql-python/graphene/pull/1448
* Fix BigInt export by erikwrede in https://github.com/graphql-python/graphene/pull/1456
* Upgrade base Python version to 3.10 by ulgens in https://github.com/graphql-python/graphene/pull/1449
* Upgrade GitHub Actions by cclauss in https://github.com/graphql-python/graphene/pull/1457
* Vendor `DataLoader` from `aiodataloader` and move `get_event_loop()` out of `__init__` function. by flipbit03 in https://github.com/graphql-python/graphene/pull/1459

New Contributors
* ramonwenger made their first contribution in https://github.com/graphql-python/graphene/pull/1424
* timgates42 made their first contribution in https://github.com/graphql-python/graphene/pull/1437
* RJ722 made their first contribution in https://github.com/graphql-python/graphene/pull/1402
* belkka made their first contribution in https://github.com/graphql-python/graphene/pull/1381
* karmingc made their first contribution in https://github.com/graphql-python/graphene/pull/1444
* alimcmaster1 made their first contribution in https://github.com/graphql-python/graphene/pull/1407
* ulgens made their first contribution in https://github.com/graphql-python/graphene/pull/1447
* DrewHoo made their first contribution in https://github.com/graphql-python/graphene/pull/1370
* flipbit03 made their first contribution in https://github.com/graphql-python/graphene/pull/1459

**Full Changelog**: https://github.com/graphql-python/graphene/compare/v3.1.0...v3.1.1

3.1.0

What's Changed
* Various spelling and grammar fixes for the documentation. by justinrmiller in https://github.com/graphql-python/graphene/pull/1324
* Chore: Refactor Multi Expression Code ✨ by yezz123 in https://github.com/graphql-python/graphene/pull/1387
* Add Python 3.9 and 3.10 to the test matrix by Cito in https://github.com/graphql-python/graphene/pull/1401
* fix UPGRADE-v2.0.md by conao3 in https://github.com/graphql-python/graphene/pull/1405
* fix: default value for argument should be Undefined (Issue 1394) by tcleonard in https://github.com/graphql-python/graphene/pull/1412
* fix: add default param _variables to parse_literal 1419 by fugal-dy in https://github.com/graphql-python/graphene/pull/1420
* Make Graphene compatible with GraphQL-Core 3.2 by Cito in https://github.com/graphql-python/graphene/pull/1421

New Contributors
* justinrmiller made their first contribution in https://github.com/graphql-python/graphene/pull/1324
* yezz123 made their first contribution in https://github.com/graphql-python/graphene/pull/1387
* conao3 made their first contribution in https://github.com/graphql-python/graphene/pull/1405
* fugal-dy made their first contribution in https://github.com/graphql-python/graphene/pull/1420

**Full Changelog**: https://github.com/graphql-python/graphene/compare/v3.0.0...v3.1.0

Page 1 of 10

© 2024 Safety CLI Cybersecurity Inc. All Rights Reserved.