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 <jssuzanne@anybox.fr>
#
# 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 inspect import getmembers, isclass, isfunction, ismethod, ismodule

from anyblok import Declarations
from anyblok.field import FieldException


[docs]@Declarations.register(Declarations.Model.Documentation.Model) class Attribute: def __init__(self, attribute, parent): self.name, self.attribute = attribute @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", "anyblok" "_sa_class_manager", "_decl_class_registry", ): return True return False @classmethod def getelements(cls, model): res = [] Model = cls.anyblok.get(model.model) 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: # pragma: no cover 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)