Advanced usage
==============

.. toctree::
   :maxdepth: 2

   handlers
   views

Depending on the goal the package can be used in different ways. Nevertheless, in the most cases you will need some basic classes

.. code-block:: python

   from pathlib import Path

   from ahriman.core.configuration import Configuration
   from ahriman.core.database import SQLite
   from ahriman.models.repository_id import RepositoryId

   repository_id = RepositoryId("x86_64", "aur")
   configuration = Configuration.from_path(Path("/etc/ahriman.ini"), repository_id)
   database = SQLite.load(configuration)

At this point there are ``configuration`` and ``database`` instances which can be used later at any time anywhere, e.g.

.. code-block:: python

   # instance of ``RepositoryPaths`` class
   paths = configuration.repository_paths

Almost all actions are wrapped by ``ahriman.core.repository.Repository`` class

.. code-block:: python

   from ahriman.core.repository import Repository
   from ahriman.models.pacman_synchronization import PacmanSynchronization

   repository = Repository(repository_id, configuration, database,
                           report=True, refresh_pacman_database=PacmanSynchronization.Disabled)

And the ``repository`` instance can be used to perform repository maintenance

.. code-block:: python

   build_result = repository.process_build(known_packages)
   built_packages = repository.packages_built()
   update_result = repository.process_update(built_packages)

   repository.triggers.on_result(update_result, repository.packages())

For the more info please refer to the classes documentation.
