| | :mod:`apt.progress.base` |
| | ==================================================================== |
| | .. module:: apt.progress.base |
| |
|
| | This module provides base classes for progress handlers from which all |
| | progress classes should inherit from. Progress reporting classes not |
| | inheriting from those classes may not work and are not supported. |
| |
|
| | When creating a subclass of one of those classes, all overridden methods should |
| | call the parent's method first before doing anything else, because the parent |
| | method may have to set some attributes. Subclasses not doing so may not work |
| | correctly or may not work at all and are completely unsupported. |
| |
|
| | AcquireProgress |
| | |
| | .. class:: AcquireProgress |
| |
|
| | A monitor object for downloads controlled by the Acquire class. This base |
| | class does nothing and should only be used as a base class to inherit |
| | from. Instances of this class can be passed to the constructor of |
| | :class:`apt_pkg.Acquire` and the Acquire object then uses it to report |
| | its progress. |
| |
|
| | This class provides several methods which may be overridden by subclasses |
| | to implement progress reporting: |
| |
|
| | .. method:: done(item: apt_pkg.AcquireItemDesc) |
| |
|
| | Invoked when an item is successfully and completely fetched. |
| |
|
| | .. method:: fail(item: apt_pkg.AcquireItemDesc) |
| |
|
| | Invoked when the process of fetching an item encounters a fatal error |
| | like a non existing file or no connection to the server. |
| |
|
| | .. method:: fetch(item: apt_pkg.AcquireItemDesc) |
| |
|
| | Invoked when some of the item's data is fetched. This normally means |
| | that the file is being fetched now and e.g. the headers have been |
| | retrieved already. |
| |
|
| | .. method:: ims_hit(item: apt_pkg.AcquireItemDesc) |
| |
|
| | Invoked when an item is confirmed to be up-to-date. For instance, |
| | when an HTTP download is informed that the file on the server was |
| | not modified. |
| |
|
| | .. method:: media_change(media: str, drive: str) -> bool |
| |
|
| | Prompt the user to change the inserted removable media. This function |
| | is called whenever a media change is needed to ask the user to insert |
| | the needed media. |
| | |
| | The parameter *media* decribes the name of the media type that |
| | should be changed, whereas the parameter *drive* should be the |
| | identifying name of the drive whose media should be changed. |
| |
|
| | This method should not return until the user has confirmed to the user |
| | interface that the media change is complete. It must return True if |
| | the user confirms the media change, or False to cancel it. |
| |
|
| | .. method:: pulse(owner: apt_pkg.Acquire) -> bool |
| |
|
| | This method gets invoked while the Acquire progress given by the |
| | parameter *owner* is underway. It should display information about |
| | the current state. It must return ``True`` to continue the acquistion |
| | or ``False`` to cancel it. This base implementation always returns |
| | ``True``. |
| |
|
| | .. method:: start() |
| |
|
| | Invoked when the Acquire process starts running. |
| |
|
| | .. method:: stop() |
| |
|
| | Invoked when the Acquire process stops running. |
| |
|
| | In addition to those methods, this class provides several attributes which |
| | are set automatically and represent the fetch progress: |
| |
|
| | .. attribute:: current_bytes |
| |
|
| | The number of bytes fetched. |
| |
|
| | .. attribute:: current_cps |
| |
|
| | The current rate of download, in bytes per second. |
| |
|
| | .. attribute:: current_items |
| |
|
| | The number of items that have been successfully downloaded. |
| |
|
| | .. attribute:: elapsed_time |
| |
|
| | The amount of time that has elapsed since the download started. |
| |
|
| | .. attribute:: fetched_bytes |
| |
|
| | The total number of bytes accounted for by items that were |
| | successfully fetched. |
| |
|
| | .. attribute:: last_bytes |
| |
|
| | The number of bytes fetched as of the previous call to pulse(), |
| | including local items. |
| |
|
| | .. attribute:: total_bytes |
| |
|
| | The total number of bytes that need to be fetched. This member is |
| | inaccurate, as new items might be enqueued while the download is |
| | in progress! |
| |
|
| | .. attribute:: total_items |
| |
|
| | The total number of items that need to be fetched. This member is |
| | inaccurate, as new items might be enqueued while the download is |
| | in progress! |
| |
|
| |
|
| | CdromProgress |
| | |
| | .. class:: CdromProgress |
| |
|
| | Base class for reporting the progress of adding a cdrom which could be |
| | used with apt_pkg.Cdrom to produce an utility like apt-cdrom. |
| | |
| | Methods defined here: |
| | |
| | .. method:: ask_cdrom_name() -> str |
| | |
| | Ask for the name of the cdrom. This method is called when a CD-ROM |
| | is added (e.g. via :meth:`apt_pkg.Cdrom.add`) and no label for the |
| | CD-ROM can be found. |
| |
|
| | Implementations should request a label from the user (e.g. via |
| | :func:`raw_input`) and return this label from the function. The |
| | operation can be cancelled if the function returns ``None`` instead |
| | of a string. |
| | |
| | .. method:: change_cdrom() -> bool |
| | |
| | Ask for the CD-ROM to be changed. This method should return ``True`` |
| | if the CD-ROM has been changed or ``False`` if the CD-ROM has not been |
| | changed and the operation should be cancelled. This base implementation |
| | returns ``False`` and thus cancels the operation. |
| | |
| | .. method:: update(text: str, current: int) |
| | |
| | Periodically invoked in order to update the interface and give |
| | information about the progress of the operation. |
| |
|
| | This method has two parameters. The first parameter *text* defines |
| | the text which should be displayed to the user as the progress |
| | message. The second parameter *current* is an integer describing how |
| | many steps have been completed already. |
| |
|
| | .. attribute:: total_steps |
| |
|
| | The number of total steps, set automatically by python-apt. It may be |
| | used in conjunction with the parameter *current* of the :meth:`update` |
| | method to show how far the operation progressed. |
| |
|
| |
|
| | OpProgress |
| | |
| | .. class:: OpProgress |
| |
|
| | OpProgress classes are used for reporting the progress of operations |
| | such as opening the cache. It is based on the concept of one operation |
| | consisting of a series of sub operations. |
| | |
| | Methods defined here: |
| | |
| | .. method:: done() |
| | |
| | Called once an operation has been completed. |
| | |
| | .. method:: update([percent=None]) |
| | |
| | Called periodically to update the user interface. This function should |
| | use the attributes defined below to display the progress information. |
| |
|
| | The optional parameter *percent* is included for compatibility |
| | reasons and may be removed at a later time. |
| | |
| | The following attributes are available and are changed by the classes |
| | wanting to emit progress: |
| | |
| | .. attribute:: major_change |
| | |
| | An automatically set boolean value describing whether the current call |
| | to update is caused by a major change. In this case, the last operation |
| | has finished. |
| | |
| | .. attribute:: op |
| |
|
| | An automatically set string which describes the current operation in |
| | an human-readable way. |
| | |
| | .. attribute:: percent |
| | |
| | An automatically set float value describing how much of the operation |
| | has been completed, in percent. |
| | |
| | .. attribute:: subop |
| |
|
| | An automatically set string which describes the current sub-operation |
| | in an human-readable way. |
| |
|
| |
|
| | InstallProgress |
| | |
| | .. class:: InstallProgress |
| |
|
| | InstallProgress classes make it possible to monitor the progress of dpkg |
| | and APT and emit information at certain stages. It uses file descriptors |
| | to read the status lines from APT/dpkg and parses them and afterwards calls |
| | the callback methods. |
| |
|
| | Subclasses should override the following methods in order to implement |
| | progress reporting: |
| |
|
| | .. method:: conffile(current, new) |
| | |
| | Called when a conffile question from dpkg is detected. |
| |
|
| | .. note:: |
| |
|
| | This part of the API is semi-stable and may be extended with 2 more |
| | parameters before the release of 0.7.100. |
| |
|
| | .. method:: error(pkg, errormsg) |
| | |
| | (Abstract) Called when a error is detected during the install. |
| |
|
| | The following method should be overridden to implement progress reporting |
| | for dpkg-based runs i.e. calls to :meth:`run` with a filename: |
| |
|
| | .. method:: processing(pkg, stage) |
| |
|
| | This method is called just before a processing stage starts. The |
| | parameter *pkg* is the name of the package and the parameter *stage* |
| | is one of the stages listed in the dpkg manual under the status-fd |
| | option, i.e. "upgrade", "install" (both sent before unpacking), |
| | "configure", "trigproc", "remove", "purge". |
| |
|
| | .. method:: dpkg_status_change(pkg: str, status: str) |
| |
|
| | This method is called whenever the dpkg status of the package |
| | changes. The parameter *pkg* is the name of the package and the |
| | parameter *status* is one of the status strings used in the status |
| | file (:file:`/var/lib/dpkg/status`) and documented |
| | in :manpage:`dpkg(1)`. |
| |
|
| | The following methods should be overridden to implement progress reporting |
| | for :meth:`run` calls with an :class:`apt_pkg.PackageManager` object as |
| | their parameter: |
| |
|
| | .. method:: status_change(pkg, percent, status) |
| |
|
| | This method implements progress reporting for package installation by |
| | APT and may be extended to dpkg at a later time. |
| |
|
| | This method takes two parameters: The parameter *percent* is a float |
| | value describing the overall progress and the parameter *status* is a |
| | string describing the current status in an human-readable manner. |
| |
|
| | .. method:: start_update() |
| | |
| | This method is called before the installation of any package starts. |
| |
|
| | .. method:: finish_update() |
| | |
| | This method is called when all changes have been applied. |
| |
|
| | There are also several methods which are fully implemented and should not |
| | be overridden by subclasses unless the subclass has very special needs: |
| |
|
| | .. method:: fork() -> int |
| | |
| | Fork a child process and return 0 to the child process and the PID of |
| | the child to the parent process. This implementation just calls |
| | :func:`os.fork` and returns its value. |
| |
|
| | .. method:: run(obj) |
| | |
| | This method runs install actions. The parameter *obj* may either |
| | be a PackageManager object in which case its **do_install()** method is |
| | called or the path to a deb file. |
| | |
| | If the object is a :class:`apt_pkg.PackageManager`, the functions |
| | returns the result of calling its ``do_install()`` method. Otherwise, |
| | the function returns the exit status of dpkg. In both cases, ``0`` |
| | means that there were no problems and ``!= 0`` means that there were |
| | issues. |
| |
|
| | .. method:: update_interface() |
| | |
| | This method is responsible for reading the status from dpkg/APT and |
| | calling the correct callback methods. Subclasses should not override |
| | this method. |
| |
|
| | .. method:: wait_child() |
| | |
| | This method is responsible for calling :meth:`update_interface` from |
| | time to time. It exits once the child has exited. The return value |
| | is the full status returned by :func:`os.waitpid` (not only the |
| | return code). Subclasses should not override this method. |
| |
|
| | The class also provides several attributes which may be useful: |
| |
|
| | .. attribute:: percent |
| |
|
| | The percentage of completion as it was in the last call to |
| | :meth:`status_change`. |
| |
|
| | .. attribute:: status |
| |
|
| | The status string passed in the last call to :meth:`status_change`. |
| |
|
| | .. attribute:: select_timeout |
| |
|
| | Used in :meth:`wait_child` to when calling :func:`select.select` |
| | on dpkg's/APT's status descriptor. Subclasses may set their own value |
| | if needed. |
| |
|
| | .. attribute:: statusfd |
| |
|
| | A readable :class:`file` object from which the status information from |
| | APT or dpkg is read. |
| |
|
| | .. attribute:: writefd |
| |
|
| | A writable :class:`file` object to which dpkg or APT write their status |
| | information. |
| |
|