:mod:`apt.cache` --- The Cache class
=====================================
.. automodule:: apt.cache

The Cache class
---------------

.. autoclass:: Cache
    :members:
    :undoc-members:

    .. describe:: cache[pkgname]

        Return a :class:`Package()` for the package with the name *pkgname*.

Example
^^^^^^^

The following example shows how to load the cache, update it, and upgrade
all the packages on the system::

    import apt
    import apt.progress

    # First of all, open the cache
    cache = apt.Cache()
    # Now, lets update the package list
    cache.update()
    # We need to re-open the cache because it needs to read the package list
    cache.open(None)
    # Now we can do the same as 'apt-get upgrade' does
    cache.upgrade()
    # or we can play 'apt-get dist-upgrade'
    cache.upgrade(True)
    # Q: Why does nothing happen?
    # A: You forgot to call commit()!
    cache.commit(apt.progress.TextFetchProgress(),
                 apt.progress.InstallProgress())



Working with Filters
--------------------
.. autoclass:: Filter
    :members:
    :inherited-members:
    :undoc-members:

.. autoclass:: MarkedChangesFilter
    :members:
    :inherited-members:
    :undoc-members:

.. autoclass:: FilteredCache
    :members:
    :inherited-members:
    :undoc-members:


Example
^^^^^^^

This is an example for a filtered cache, which only allows access to the
packages whose state has been changed, eg. packages marked for installation::

    >>> from apt.cache import FilteredCache, Cache, MarkedChangesFilter
    >>> cache = apt.Cache()
    >>> changed = apt.FilteredCache(cache)
    >>> changed.set_filter(MarkedChangesFilter())
    >>> print(len(changed) == len(cache.get_changes())) # Both need to have same length
    True

The ProblemResolver class
--------------------------

.. autoclass:: ProblemResolver
    :members:

Exceptions
----------
.. autoexception:: FetchCancelledException
.. autoexception:: FetchFailedException
.. autoexception:: LockFailedException
