Source code for xsdata.formats.dataclass.filters

from docformatter import format_code

from xsdata.models.codegen import Class


[docs]def arguments(data: dict): def prep(key, value): if isinstance(value, str) and not has_quotes(value): value = '"{}"'.format(value.replace('"', "'")) if key == "pattern": value = f"r{value}" return f"{key}={value}" return ",\n".join( [prep(key, value) for key, value in data.items() if value is not None] )
[docs]def docstring(obj: Class, enum=False): lines = [] if obj.help: lines.append(obj.help) var_type = "cvar" if enum else "ivar" for attr in obj.attrs: description = attr.help.strip() if attr.help else "" lines.append(f":{var_type} {attr.name}: {description}".strip()) return ( format_code('"""\n{}\n"""'.format("\n".join(lines))) if lines else "" )
[docs]def lib_imports(output: str): result = [] if "(Enum)" in output: result.append("from enum import Enum") result.append("from dataclasses import dataclass, field") types = [tp for tp in ["List", "Optional", "Union"] if f"{tp}[" in output] if types: result.append(f"from typing import {', '.join(types)}") return "\n".join(result)
[docs]def has_quotes(string: str): quote_types = ["'''", '"""', "'", '"'] for quote in quote_types: if string.startswith(quote) and string.endswith(quote): return True return False
filters = { "arguments": arguments, "docstring": docstring, "lib_imports": lib_imports, }