Source code for anyblok.bloks.anyblok_core.documentation.model.attribute

# This file is a part of the AnyBlok project
#
#    Copyright (C) 2015 Jean-Sebastien SUZANNE <[email protected]>
#
# This Source Code Form is subject to the terms of the Mozilla Public License,
# v. 2.0. If a copy of the MPL was not distributed with this file,You can
# obtain one at http://mozilla.org/MPL/2.0/.
from anyblok import Declarations
from anyblok.field import FieldException
from inspect import getmembers, ismethod, isfunction, ismodule, isclass


[docs]@Declarations.register(Declarations.Model.Documentation.Model) class Attribute: def __init__(self, attribute): self.name, self.attribute = attribute def exist(self, model): return model.exist() @classmethod def filterAttribute(cls, model, name): if name in ('insert', 'update', 'to_primary_keys', 'to_dict', 'sqlalchemy_query_update', 'sqlalchemy_query_delete', 'query', 'precommit_hook', 'multi_insert', 'initialize_model', 'has_perm', 'has_model_perm', 'get_where_clause_from_primary_keys', 'get_primary_keys', 'get_model', 'from_primary_keys', 'from_multi_primary_keys', 'fire', 'fields_description', '_fields_description', 'delete', 'aliased', '__init__', 'loaded_columns', 'loaded_fields', 'registry', '_sa_class_manager', '_decl_class_registry'): return True return False @classmethod def getelements(cls, model): res = [] Model = cls.registry.get(model.model.name) try: for k, v in getmembers(Model): if ismodule(v) or isclass(v): continue if k.startswith('__'): continue if cls.filterAttribute(model, k): continue res.append((k, v)) except FieldException: pass return res @classmethod def header2RST(cls, doc): title = "Attributes, methods and class methods" doc.write("%s\n%s\n\n" % (title, '~' * len(title))) @classmethod def footer2RST(cls, doc): pass def toRST(self, doc): doc.write('* ' + self.name + '\n\n') self.toRST_docstring(doc) def toRST_docstring(self, doc): if hasattr(self.attribute, '__doc__') and self.attribute.__doc__: doc.write(self.attribute.__doc__ + '\n\n') def toUML(self, dot, modelname): model = dot.get_class(modelname) if ismethod(self.attribute) or isfunction(self.attribute): model.add_method(self.name) else: model.add_property(self.name)