def get_inheritance_info(rel, package_name): """Returns inheritance informations for the rel relation. """ inheritance_import_list = [] inherited_classes_aliases_list = [] for base in rel.__class__.__bases__: if base.__name__ != 'Relation': inh_sfqrn = list(base.__sfqrn) inh_sfqrn[0] = package_name inh_cl_alias = "{}{}".format( camel_case(inh_sfqrn[1]), camel_case(inh_sfqrn[2])) inh_cl_name = "{}".format(camel_case(inh_sfqrn[2])) inheritance_import_list.append( "from {} import {} as {}".format(".".join( inh_sfqrn), inh_cl_name, inh_cl_alias) ) inherited_classes_aliases_list.append(inh_cl_alias) inheritance_import = "\n".join(inheritance_import_list) inherited_classes = ", ".join(inherited_classes_aliases_list) if inherited_classes.strip(): inherited_classes = "{},".format(inherited_classes) return inheritance_import, inherited_classes
def update_this_module( model, relation, package_dir, package_name, dirs_list, warning): """Updates the module.""" _, fqtn = relation.split() path = fqtn.split('.') fqtn = '.'.join(path[1:]) try: rel = model.get_relation_class(fqtn)() except TypeError as err: sys.stderr.write("{}\n{}\n".format(err, fqtn)) sys.stderr.flush() return path[0] = package_dir module_path = '{}.py'.format('/'.join( [iskeyword(elt) and "{}_".format(elt) or elt for elt in path])) schema_dir = os.path.dirname(module_path) if not schema_dir in dirs_list: dirs_list.append(schema_dir) module_name = path[-1] path = '/'.join(path[:-1]) if not os.path.exists(path): os.makedirs(path) module_template = assemble_module_template(module_path) inheritance_import, inherited_classes = get_inheritance_info( rel, package_name) open(module_path, 'w').write( module_template.format( module="{}.{}".format(package_name, fqtn), package_name=package_name, documentation="\n".join([" {}".format(line) for line in str(rel).split("\n")]), inheritance_import=inheritance_import, inherited_classes=inherited_classes, class_name=camel_case(module_name), fqtn=fqtn, warning=warning)) return module_path