diff --git a/docs/architecture.rst b/docs/architecture.rst index 5a9466a0..e49dc81c 100644 --- a/docs/architecture.rst +++ b/docs/architecture.rst @@ -8,7 +8,8 @@ Packages have strict rules of importing: * ``ahriman.application`` package must not be used outside of this package. * ``ahriman.core`` and ``ahriman.models`` packages don't have any import restriction. Actually we would like to totally restrict importing of ``core`` package from ``models``, but it is impossible at the moment. -* ``ahriman.web`` package is allowed to be imported from ``ahriman.application`` (web handler only, only ``ahriman.web.web`` methods). It also must not be imported globally, only local import is allowed. +* ``ahriman.web`` package is allowed to be imported from ``ahriman.application`` (web handler only, only ``ahriman.web.web`` methods). +* The idea remains the same for all imports, if an package requires some specific dependencies, it must be imported locally to keep dependencies optional. Full dependency diagram: @@ -18,7 +19,7 @@ Full dependency diagram: ``ahriman.application`` package ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -This package contains application (aka executable) related classes and everything for it. It also contains package called ``ahriman.application.handlers`` in which all available subcommands are described as separated classes derived from the base ``ahriman.application.handlers.handler.Handler`` class. +This package contains application (aka executable) related classes and everything for it. It also contains package called ``ahriman.application.handlers`` in which all available subcommands are described as separated classes derived from the base ``ahriman.application.handlers.handler.Handler`` class. Those classes are being loaded dynamically through the lookup of the ``ahriman.application.handlers`` package. ``ahriman.application.application.Application`` (god class) is used for any interaction from parsers with repository. It is divided into multiple traits by functions (package related and repository related) in the same package. @@ -32,9 +33,9 @@ This package contains application (aka executable) related classes and everythin This package contains everything required for the most of application actions and it is separated into several packages: * ``ahriman.core.alpm`` package controls pacman related functions. It provides wrappers for ``pyalpm`` library and safe calls for repository tools (``repo-add`` and ``repo-remove``). Also this package contains ``ahriman.core.alpm.remote`` package which provides wrapper for remote sources (e.g. AUR RPC and official repositories RPC) and some other helpers. -* ``ahriman.core.auth`` package provides classes for authorization methods used by web mostly. Base class is ``ahriman.core.auth.Auth`` which must be instantiated by ``load`` method. +* ``ahriman.core.auth`` package provides classes for authorization methods used by web mostly. Base class is ``ahriman.core.auth.Auth`` which must be instantiated by ``load`` method. This package is only required by the ``ahriman.web`` package. * ``ahriman.core.build_tools`` is a package which provides wrapper for ``devtools`` commands. -* ``ahriman.core.configuration`` contains extension for standard ``configparser`` library and some validation related classes. +* ``ahriman.core.configuration`` contains extensions for standard ``configparser`` module and some validation related classes. * ``ahriman.core.database`` is everything for database, including data and schema migrations. * ``ahriman.core.distributed`` package with triggers and helpers for distributed build system. * ``ahriman.core.formatters`` package provides ``Printer`` sub-classes for printing data (e.g. package properties) to stdout which are used by some handlers. @@ -56,6 +57,7 @@ This package also provides some generic functions and classes which may be used * ``ahriman.core.spawn.Spawn`` is a tool which can spawn another ``ahriman`` process. This feature is used by web application. * ``ahriman.core.tree`` is a dependency tree implementation. * ``ahriman.core.types`` are an additional global types for mypy checks. +* ``ahriman.core.utils`` contains some useful functions which are not the part of any other class. ``ahriman.models`` package ^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -69,7 +71,7 @@ Web application. It is important that this package is isolated from any other to * ``ahriman.web.middlewares`` provides middlewares for request handlers. * ``ahriman.web.schemas`` provides schemas (actually copy paste from dataclasses) used by swagger documentation. -* ``ahriman.web.views`` contains web views derived from aiohttp view class. +* ``ahriman.web.views`` contains web views derived from aiohttp view class. Those classes are loaded dynamically through the filesystem lookup. * ``ahriman.web.apispec`` provides generators for swagger documentation. * ``ahriman.web.cors`` contains helpers for cross origin resource sharing middlewares. * ``ahriman.web.routes`` creates routes for web application.