def generate_attrs_for_schema_type(schema_type): """Generate both attributes and resolvers for a given schema_type. Args: schema_type (DjangoObjectType): DjangoObjectType for a given model Returns: dict: Dict of attributes ready to merge into the QueryMixin class """ attrs = {} model = schema_type._meta.model single_item_name = str_to_var_name(model._meta.verbose_name) list_name = str_to_var_name(model._meta.verbose_name_plural) # Define Attributes for single item and list with their search parameters search_params = generate_list_search_parameters(schema_type) attrs[single_item_name] = graphene.Field(schema_type, id=graphene.ID()) attrs[list_name] = graphene.List(schema_type, **search_params) # Define Resolvers for both single item and list single_item_resolver_name = f"{RESOLVER_PREFIX}{single_item_name}" list_resolver_name = f"{RESOLVER_PREFIX}{list_name}" attrs[single_item_resolver_name] = generate_single_item_resolver(schema_type, single_item_resolver_name) attrs[list_resolver_name] = generate_list_resolver(schema_type, list_resolver_name) return attrs
def test_extend_custom_field_prefix_none(self): schema = extend_schema_type_custom_field(self.schema, Site) for data in self.datas: field_name = str_to_var_name(data["field_name"]) self.assertIn(field_name, schema._meta.fields.keys())
def already_present(model): """Check if a model and its resolvers are staged to added to the Mixin.""" single_item_name = str_to_var_name(model._meta.verbose_name) list_name = str_to_var_name(model._meta.verbose_name_plural) if single_item_name in class_attrs: logger.warning( f"Unable to register the schema type '{single_item_name}' in GraphQL from '{app_name}':'{model_name}'," "there is already another type registered under this name") return True if list_name in class_attrs: logger.warning( f"Unable to register the schema type '{list_name}' in GraphQL from '{app_name}':'{model_name}'," "there is already another type registered under this name") return True
def test_str_to_var_name(self): self.assertEqual(str_to_var_name("IP Addresses"), "ip_addresses") self.assertEqual(str_to_var_name("My New VAR"), "my_new_var") self.assertEqual(str_to_var_name("My-VAR"), "my_var")