graphene icon indicating copy to clipboard operation
graphene copied to clipboard

Unclear documentation for ObjectType

Open a-hodgson opened this issue 4 years ago • 4 comments

  • What is the current behavior?

The current documentation for ObjectType states the following under the "Parent Value Object" heading:

from graphene import ObjectType, String, Field

class Person(ObjectType):
    full_name = String()

    def resolve_full_name(parent, info):
        return f"{parent.first_name} {parent.last_name}"

class Query(ObjectType):
    me = Field(Person)

    def resolve_me(parent, info):
        # returns an object that represents a Person
        return get_human(name="Luke Skywalker")
  • If the current behavior is a bug, please provide the steps to reproduce

If you copy this directly into PyCharm (or any other editor I would imagine) you get an error stating that the function get_human cannot be located.

I am currently trying to write my own ObjectType which will take an argument. However, because the documentation cannot be run, I don't know how to proceed.

I have the following:

class RunLog(ObjectType):
    status = String()
    result = String()
    log = List(String)

    def resolve_status(self, resolve, run_id):
        return r.hget("run:%i" % run_id, "status").decode('utf-8')

    def resolve_result(self, resolve, run_id):
        return r.hget("run:%i" % run_id, "result").decode('utf-8')

    def resolve_log(self, resolve, run_id):
        log_data = r.lrange("run:%i:log" % run_id, 0, -1)
        log_data = [entry.decode('utf-8') for entry in log_data]

        return log_data


class Query(ObjectType):
    log_by_run_id = Field(RunLog, run_id=Int(required=True))

    # @login_required
    def resolve_log_by_run_id(root, info, run_id):
        return **?????**

Because the documentation references an unknown function, I don't know what to put in the final line as the return value for resolve_log_by_run_id.

This type of unknown function of class seems to appear a lot in the documentation. It can be seen again under Executing a query.

  • What is the expected behavior?

The documentation can be clearly interoperated.

a-hodgson avatar Dec 02 '20 11:12 a-hodgson

I encountered this issue too. Tried to copy paste the example code and was unable to run it because get_human is not defined anywhere in the documentation. I eventually made the assumption that get_human is defined as something like:

def get_human(name):
    human = types.SimpleNamespace()
    human.first_name, human.last_name = name.split(' ')
    return human

zegelin avatar Jan 15 '21 13:01 zegelin

I encountered this issue too. Tried to copy paste the example code and was unable to run it because get_human is not defined anywhere in the documentation. I eventually made the assumption that get_human is defined as something like:

def get_human(name):
    human = types.SimpleNamespace()
    human.first_name, human.last_name = name.split(' ')
    return human

I think your correct. I eventually made this work using a similar approach.

I’m happy to update the documentation. Where can I find the context of the ObjectType documentation?

a-hodgson avatar Feb 12 '21 20:02 a-hodgson

How about this?

    def get_human(name):
        first_name, last_name = name.split()
        return Person(first_name, last_name)

conao3 avatar Oct 09 '21 09:10 conao3

related to #1239

conao3 avatar Oct 09 '21 09:10 conao3