code: def get_field_def(
      schema: GraphQLSchema, parent_type: GraphQLObjectType, field_name: str
  ) -> GraphQLField:
      
      if field_name == "__schema" and schema.query_type == parent_type:
          return SchemaMetaFieldDef
      elif field_name == "__type" and schema.query_type == parent_type:
          return TypeMetaFieldDef
      elif field_name == "__typename":
          return TypeNameMetaFieldDef
      return parent_type.fields.get(field_name)
docs: Get field definition.
  
      This method looks up the field on the given type definition. It has special casing
      for the two introspection fields, `__schema` and `__typename`. `__typename` is
      special because it can always be queried as a field, even in situations where no
      other fields are allowed, like on a Union. `__schema` could get automatically
      added to the query type, but that would require mutating type definitions, which
      would cause issues.