diff -Nru power-1.2+git20130312+dfsg/debian/changelog power-1.3+dfsg/debian/changelog --- power-1.2+git20130312+dfsg/debian/changelog 2014-02-22 21:06:12.000000000 +0000 +++ power-1.3+dfsg/debian/changelog 2014-09-29 23:47:58.000000000 +0000 @@ -1,3 +1,11 @@ +power (1.3+dfsg-1) unstable; urgency=medium + + * New upstream version + * Add a working debian/watch + * Python3 support + + -- Changwoo Ryu Tue, 30 Sep 2014 08:47:42 +0900 + power (1.2+git20130312+dfsg-1) unstable; urgency=low * New upstream version diff -Nru power-1.2+git20130312+dfsg/debian/control power-1.3+dfsg/debian/control --- power-1.2+git20130312+dfsg/debian/control 2014-02-22 21:06:12.000000000 +0000 +++ power-1.3+dfsg/debian/control 2014-09-29 23:47:58.000000000 +0000 @@ -4,21 +4,40 @@ Maintainer: 3-D printer team <3dprinter-general@lists.alioth.debian.org> Uploaders: Changwoo Ryu Build-Depends: debhelper (>= 9.0.0), + dh-python (>> 1.20130913), python-all (>= 2.6.6-3~), + python3-all (>= 3.2~), python-setuptools, + python3-setuptools, Standards-Version: 3.9.5 Homepage: https://github.com/Kentzo/Power Vcs-Git: git://anonscm.debian.org/3dprinter/packages/power.git Vcs-Browser: http://anonscm.debian.org/gitweb/?p=3dprinter/packages/power.git;a=summary X-Python-Version: >= 2.6 +X-Python3-Version: >= 3.2 Package: python-power Architecture: all Depends: ${python:Depends}, ${misc:Depends}, Provides: ${python:Provides} -Description: Python module to get get power and battery status +Description: Python module to get get power and battery status (Python 2) This is Python module that allows you to get power and battery status of the system. . Using this module, Python programs which read power status can be written in platform independent way. + . + This module is built for Python version 2.x. + +Package: python3-power +Architecture: all +Depends: ${python3:Depends}, ${misc:Depends}, +Provides: ${python3:Provides} +Description: Python module to get get power and battery status (Python 3) + This is Python module that allows you to get power and battery status + of the system. + . + Using this module, Python programs which read power status can + be written in platform independent way. + . + This module is built for Python version 3.x. diff -Nru power-1.2+git20130312+dfsg/debian/patches/python3.patch power-1.3+dfsg/debian/patches/python3.patch --- power-1.2+git20130312+dfsg/debian/patches/python3.patch 1970-01-01 00:00:00.000000000 +0000 +++ power-1.3+dfsg/debian/patches/python3.patch 2014-09-29 23:47:58.000000000 +0000 @@ -0,0 +1,47 @@ +Description: py3 compatibility +Author: Changwoo Ryu +Forwarded: https://github.com/Kentzo/Power/pull/6 + +diff --git a/power/__init__.py b/power/__init__.py +index 6e632c4..aa1b532 100644 +--- a/power/__init__.py ++++ b/power/__init__.py +@@ -8,10 +8,10 @@ Usage: + + class Observer(PowerManagementObserver): + def on_power_sources_change(self, power_management): +- print "Power sources did change." ++ print("Power sources did change.") + + def on_time_remaining_change(self, power_management): +- print "Time remaining did change." ++ print("Time remaining did change.") + + # class Observer(object): + # ... +diff --git a/power/tests.py b/power/tests.py +index 5bdf45e..1c4bb4f 100644 +--- a/power/tests.py ++++ b/power/tests.py +@@ -27,10 +27,10 @@ class TestPowerManagementCommon(unittest.TestCase): + + class TestObserver(power.PowerManagementObserver): + def on_power_sources_change(self, power_management): +- print "on_power_sources_change" ++ print("on_power_sources_change") + + def on_time_remaining_change(self, power_management): +- print "on_time_remaining_change" ++ print("on_time_remaining_change") + + + if __name__ == "__main__": +@@ -38,7 +38,7 @@ if __name__ == "__main__": + p = power.PowerManagement() + p.add_observer(o) + try: +- print "Power management observer is registered" ++ print("Power management observer is registered") + import time + while True: + time.sleep(1) diff -Nru power-1.2+git20130312+dfsg/debian/patches/series power-1.3+dfsg/debian/patches/series --- power-1.2+git20130312+dfsg/debian/patches/series 1970-01-01 00:00:00.000000000 +0000 +++ power-1.3+dfsg/debian/patches/series 2014-09-29 23:47:58.000000000 +0000 @@ -0,0 +1 @@ +python3.patch diff -Nru power-1.2+git20130312+dfsg/debian/python3-power.install power-1.3+dfsg/debian/python3-power.install --- power-1.2+git20130312+dfsg/debian/python3-power.install 1970-01-01 00:00:00.000000000 +0000 +++ power-1.3+dfsg/debian/python3-power.install 2014-09-29 23:47:58.000000000 +0000 @@ -0,0 +1 @@ +usr/lib/python3*/dist-packages/* diff -Nru power-1.2+git20130312+dfsg/debian/python-power.install power-1.3+dfsg/debian/python-power.install --- power-1.2+git20130312+dfsg/debian/python-power.install 1970-01-01 00:00:00.000000000 +0000 +++ power-1.3+dfsg/debian/python-power.install 2014-09-29 23:47:58.000000000 +0000 @@ -0,0 +1 @@ +usr/lib/python2*/dist-packages/* diff -Nru power-1.2+git20130312+dfsg/debian/rules power-1.3+dfsg/debian/rules --- power-1.2+git20130312+dfsg/debian/rules 2014-02-22 21:06:12.000000000 +0000 +++ power-1.3+dfsg/debian/rules 2014-09-29 23:47:58.000000000 +0000 @@ -1,5 +1,23 @@ #!/usr/bin/make -f #export DH_VERBOSE=1 +PYVERS := $(shell pyversions -r) +PY3VERS := $(shell py3versions -r) + %: - dh $@ --with python2 + dh $@ --with python2,python3 + +override_dh_auto_build: + # python2.x is expected to done in the auto build... + for PYTHON in $(PY3VERS); do \ + $$PYTHON setup.py build; \ + done + dh_auto_build + +override_dh_auto_install: + # python2.x is expected to done in the auto install... + for PYTHON in $(PY3VERS); do \ + $$PYTHON setup.py install --skip-build --root debian/tmp \ + --install-layout deb; \ + done + dh_auto_install diff -Nru power-1.2+git20130312+dfsg/debian/watch power-1.3+dfsg/debian/watch --- power-1.2+git20130312+dfsg/debian/watch 2014-02-22 21:06:12.000000000 +0000 +++ power-1.3+dfsg/debian/watch 2014-09-29 23:47:58.000000000 +0000 @@ -1,3 +1,3 @@ -# The upstream does not tag properly :( -#version=3 -#https://github.com/Kentzo/Power .*/(\d.*)\.tar\.gz +version=3 +opts=dversionmangle=s/\+dfsg\d*$// \ + https://github.com/Kentzo/Power/tags .*/v?(\d.*)\.tar\.gz diff -Nru power-1.2+git20130312+dfsg/power/freebsd.py power-1.3+dfsg/power/freebsd.py --- power-1.2+git20130312+dfsg/power/freebsd.py 1970-01-01 00:00:00.000000000 +0000 +++ power-1.3+dfsg/power/freebsd.py 2014-09-29 01:41:50.000000000 +0000 @@ -0,0 +1,174 @@ +# coding=utf-8 +""" +Implements PowerManagement functions using FreeBSD SYSCTL mechanism. +FreeBSD portion written by Tomasz CEDRO (http://www.tomek.cedro.info) +""" +__author__ = 'cederom@tlen.pl' + +import os +import warnings +from power import common +import subprocess + +class PowerManagement(common.PowerManagementBase): + @staticmethod + def power_source_type(): + """ + FreeBSD use sysctl hw.acpi.acline to tell if Mains (1) is used or Battery (0). + Beware, that on a Desktop machines this hw.acpi.acline oid may not exist. + @return: One of common.POWER_TYPE_* + @raise: Runtime error if type of power source is not supported + """ + try: + supply=int(subprocess.check_output(["sysctl","-n","hw.acpi.acline"])) + except: + return common.POWER_TYPE_AC + + if supply == 1: + return common.POWER_TYPE_AC + elif supply == 0: + return common.POWER_TYPE_BATTERY + else: + raise RuntimeError("Unknown power source type!") + + + @staticmethod + def is_ac_online(): + """ + @return: True if ac is online. Otherwise False + """ + try: + supply=int(subprocess.check_output(["sysctl","-n","hw.acpi.acline"])) + except: + return True + return supply == 1 + + + @staticmethod + def is_battery_present(): + """ + TODO + @return: True if battery is present. Otherwise False + """ + return False + + + @staticmethod + def is_battery_discharging(): + """ + TODO + @return: True if ac is online. Otherwise False + """ + return False + + + @staticmethod + def get_battery_state(): + """ + TODO + @return: Tuple (energy_full, energy_now, power_now) + """ + energy_now = float(100.0) + power_now = float(100.0) + energy_full = float(100.0) + return energy_full, energy_now, power_now + + + def get_providing_power_source_type(self): + """ + Looks through all power supplies in POWER_SUPPLY_PATH. + If there is an AC adapter online returns POWER_TYPE_AC. + If there is a discharging battery, returns POWER_TYPE_BATTERY. + Since the order of supplies is arbitrary, whatever found first is returned. + """ + type = self.power_source_type() + if type == common.POWER_TYPE_AC: + if self.is_ac_online(): + return common.POWER_TYPE_AC + elif type == common.POWER_TYPE_BATTERY: + if self.is_battery_present() and self.is_battery_discharging(): + return common.POWER_TYPE_BATTERY + else: + warnings.warn("UPS is not supported.") + return common.POWER_TYPE_AC + + + def get_low_battery_warning_level(self): + """ + Looks through all power supplies in POWER_SUPPLY_PATH. + If there is an AC adapter online returns POWER_TYPE_AC returns LOW_BATTERY_WARNING_NONE. + Otherwise determines total percentage and time remaining across all attached batteries. + """ + all_energy_full = [] + all_energy_now = [] + all_power_now = [] + try: + type = self.power_source_type() + if type == common.POWER_TYPE_AC: + if self.is_ac_online(): + return common.LOW_BATTERY_WARNING_NONE + elif type == common.POWER_TYPE_BATTERY: + if self.is_battery_present() and self.is_battery_discharging(): + energy_full, energy_now, power_now = self.get_battery_state() + all_energy_full.append(energy_full) + all_energy_now.append(energy_now) + all_power_now.append(power_now) + else: + warnings.warn("UPS is not supported.") + except (RuntimeError, IOError) as e: + warnings.warn("Unable to read system power information!") + + try: + total_percentage = sum(all_energy_full) / sum(all_energy_now) + total_time = sum([energy_now / power_now * 60.0 for energy_now, power_now in zip(all_energy_now, all_power_now)]) + if total_time <= 10.0: + return common.LOW_BATTERY_WARNING_FINAL + elif total_percentage <= 22.0: + return common.LOW_BATTERY_WARNING_EARLY + else: + return common.LOW_BATTERY_WARNING_NONE + except ZeroDivisionError as e: + warnings.warn("Unable to calculate low battery level: {error}".format(error=str(e))) + return common.LOW_BATTERY_WARNING_NONE + + + def get_time_remaining_estimate(self): + """ + Looks through all power sources and returns total time remaining estimate + or TIME_REMAINING_UNLIMITED if ac power supply is online. + """ + all_energy_now = [] + all_power_now = [] + try: + type = self.power_source_type() + if type == common.POWER_TYPE_AC: + if self.is_ac_online(supply_path): + return common.TIME_REMAINING_UNLIMITED + elif type == common.POWER_TYPE_BATTERY: + if self.is_battery_present() and self.is_battery_discharging(): + energy_full, energy_now, power_now = self.get_battery_state() + all_energy_now.append(energy_now) + all_power_now.append(power_now) + else: + warnings.warn("UPS is not supported.") + except (RuntimeError, IOError) as e: + warnings.warn("Unable to read system power information!") + + if len(all_energy_now) > 0: + try: + return sum([energy_now / power_now * 60.0 for energy_now, power_now in zip(all_energy_now, all_power_now)]) + except ZeroDivisionError as e: + warnings.warn("Unable to calculate time remaining estimate: {error}".format(error=str(e))) + return common.TIME_REMAINING_UNKNOWN + else: + return common.TIME_REMAINING_UNKNOWN + + + def add_observer(self, observer): + warnings.warn("Current system does not support observing.") + pass + + + def remove_observer(self, observer): + warnings.warn("Current system does not support observing.") + pass diff -Nru power-1.2+git20130312+dfsg/power/__init__.py power-1.3+dfsg/power/__init__.py --- power-1.2+git20130312+dfsg/power/__init__.py 2014-02-10 05:43:18.000000000 +0000 +++ power-1.3+dfsg/power/__init__.py 2014-09-29 01:41:50.000000000 +0000 @@ -17,8 +17,7 @@ # ... # PowerManagementObserver.register(Observer) """ -__author__ = 'kulakov.ilya@gmail.com' -__version__ = '1.2' +__version__ = '1.3' from sys import platform from power.common import * @@ -27,6 +26,8 @@ try: if platform.startswith('darwin'): from power.darwin import PowerManagement + elif platform.startswith('freebsd'): + from power.freebsd import PowerManagement elif platform.startswith('win32'): from power.win32 import PowerManagement elif platform.startswith('linux'): diff -Nru power-1.2+git20130312+dfsg/setup.py power-1.3+dfsg/setup.py --- power-1.2+git20130312+dfsg/setup.py 2014-02-10 05:43:18.000000000 +0000 +++ power-1.3+dfsg/setup.py 2014-09-29 01:41:50.000000000 +0000 @@ -15,13 +15,13 @@ setup( name="power", - version="1.2", + version="1.3", description="Cross-platform system power status information.", long_description="Library that allows you get current power source type (AC, Battery or UPS), warning level (none, <22%, <10min) and remaining minutes. You can also observe changes of power source and remaining time.", author="Ilya Kulakov", author_email="kulakov.ilya@gmail.com", url="https://github.com/Kentzo/Power", - platforms=["Mac OS X 10.6+", "Windows XP+", "Linux 2.6+"], + platforms=["Mac OS X 10.6+", "Windows XP+", "Linux 2.6+", "FreeBSD"], packages=['power'], license="MIT License", classifiers=[