def __init__(self, child_block, **kwargs): Block.__init__(self, **kwargs) self.child_block = (child_block() if isinstance(child_block, type) else child_block) if not hasattr(self.meta, 'default'): self.meta.default = [self.child_block.get_default()] self.dependencies = [self.child_block]
def __init__(self, local_blocks=None, **kwargs): self._constructor_kwargs = kwargs Block.__init__(self, **kwargs) self.child_blocks = self.base_blocks.copy() if local_blocks: for name, block in local_blocks: block.set_name(name) self.child_blocks[name] = block self.dependencies = self.child_blocks.values()
def get_definition(self): definition = Block.get_definition(self) definition.update( isStatic=True, html=self.render_form(self.get_default(), prefix=self.FIELD_NAME_TEMPLATE), ) return definition
def block_handler(block: Block, app, prefix=''): cls = block.__class__ handler = registry.blocks.get(cls) if handler is None: if _is_custom_type(block): target_block_type = block.__graphql_type__() this_handler = block_handler(target_block_type, app, prefix) if isinstance(this_handler, tuple): raise NotImplementedError() if hasattr(block, '__graphql_resolve__'): resolver = _resolve_custom(block, this_handler) elif issubclass(target_block_type, Scalar): resolver = _resolve_generic_scalar else: raise TypeError( "Non Scalar custom types need an explicit __graphql_resolve__ method." ) handler = (lambda x: this_handler, resolver) elif _is_compound_block(block): node = prefix + cls.__name__ dict_params = dict((n, block_handler(block_type, app, prefix)) for n, block_type in block.child_blocks.items()) _add_handler_resolves(dict_params) dict_params.update({ # add the field name 'field': graphene.Field(graphene.String), 'resolve_field': lambda *x: block.name, }) tp = type(node, (graphene.ObjectType, ), dict_params) handler = tp registry.blocks[cls] = handler elif _is_list_block(block): this_handler = block_handler(block.child_block, app, prefix) if isinstance(this_handler, tuple): handler = List(this_handler[0]), _resolve_list(*this_handler) else: handler = List(this_handler), _resolve_simple_list else: handler = GenericScalar if cls == wagtail.snippets.blocks.SnippetChooserBlock: handler = (handler[0](block), handler[1]) # type: ignore return handler
def block_handler(block: Block, app, prefix=''): cls = block.__class__ handler = registry.blocks.get(cls) if handler is None: if _is_custom_type(block): target_block_type = block.__graphql_type__() this_handler = block_handler(target_block_type, app, prefix) if isinstance(this_handler, tuple): raise NotImplementedError() if hasattr(block, '__graphql_resolve__'): resolver = _resolve_custom(block, this_handler) elif issubclass(target_block_type, Scalar): resolver = _resolve_generic_scalar else: raise TypeError("Non Scalar custom types need an explicit __graphql_resolve__ method.") handler = (lambda x: this_handler, resolver) elif _is_compound_block(block): node = prefix + cls.__name__ dict_params = dict( (n, block_handler(block_type, app, prefix)) for n, block_type in block.child_blocks.items() ) _add_handler_resolves(dict_params, block) tp = type(node, (graphene.ObjectType,), dict_params) handler = tp registry.blocks[cls] = handler elif _is_list_block(block): this_handler = registry.blocks.get(block.child_block.__class__) if this_handler is None: this_handler = block_handler(block.child_block, app, prefix) if isinstance(this_handler, tuple): this_handler = this_handler[0](block.child_block) handler = List(this_handler), _resolve_list else: handler = List(this_handler), _resolve_simple_list else: handler = GenericScalar return handler