[hamster-applet] getFacts dbus method and better behavior on no data
- From: Toms Baugis <tbaugis src gnome org>
- To: svn-commits-list gnome org
- Subject: [hamster-applet] getFacts dbus method and better behavior on no data
- Date: Thu, 16 Jul 2009 17:12:41 +0000 (UTC)
commit 126e8490db52102156288cd220ddbf565d275e57
Author: J.Felix Ontanon <fontanon emergya es>
Date: Thu Jul 16 20:12:11 2009 +0300
getFacts dbus method and better behavior on no data
hamster/hamsterdbus.py | 69 +++++++++++++++++++++++++++++++++------------
tests/hamsterdbus_test.py | 42 +++++++++++----------------
2 files changed, 68 insertions(+), 43 deletions(-)
---
diff --git a/hamster/hamsterdbus.py b/hamster/hamsterdbus.py
index 7725649..f21e6c1 100644
--- a/hamster/hamsterdbus.py
+++ b/hamster/hamsterdbus.py
@@ -55,22 +55,24 @@ class HamsterDbusController(dbus.service.Object):
dbus supported data types
"""
+ if not fact:
+ return dbus.Dictionary({}, signature='sv')
+
# Default fact values
dbus_fact = {FCT_KEY: 0, ACT_KEY:'', CAT_KEY:'', DSC_KEY:'',
SRT_KEY:0, END_KEY:0}
- if fact:
- # Workaround for fill values
- fact_keys = fact.keys()
+ # Workaround for fill values
+ fact_keys = fact.keys()
+
+ for key in (FCT_KEY, ACT_KEY, CAT_KEY, DSC_KEY):
+ if key in fact_keys and fact[key]:
+ dbus_fact[key] = fact[key]
- for key in (FCT_KEY, ACT_KEY, CAT_KEY, DSC_KEY):
- if key in fact_keys and fact[key]:
- dbus_fact[key] = fact[key]
-
- for key in (SRT_KEY, END_KEY):
- if key in fact_keys and fact[key]:
- # Convert datetime to unix timestamp (seconds since epoch)
- dbus_fact[key] = timegm(fact[key].timetuple())
+ for key in (SRT_KEY, END_KEY):
+ if key in fact_keys and fact[key]:
+ # Convert datetime to unix timestamp (seconds since epoch)
+ dbus_fact[key] = timegm(fact[key].timetuple())
return dbus_fact
@@ -102,6 +104,37 @@ class HamsterDbusController(dbus.service.Object):
"""
return HamsterDbusController.to_dbus_fact(runtime.storage.get_fact(fact_id))
+ @dbus.service.method(HAMSTER_URI, in_signature='uu', out_signature='aa{sv}')
+ def GetFacts(self, start_date, end_date):
+ """Gets facts between the day of start_date and the day of end_date.
+ Parameters:
+ u start_date: Seconds since epoch (timestamp). Use 0 for today
+ u end_date: Seconds since epoch (timestamp). Use 0 for today
+ Returns Array of fact where fact it's Dict of:
+ i id: Unique fact identifier
+ s name: Activity name
+ s category: Category name
+ s description: Description of the fact
+ u start_time: Seconds since epoch (timestamp)
+ u end_time: Seconds since epoch (timestamp)
+ """
+ #TODO: Assert start > end ?
+ if start_date:
+ start = datetime.datetime.utcfromtimestamp(start_date).date()
+ else:
+ start = datetime.date.today()
+
+ if end_date:
+ end = datetime.datetime.utcfromtimestamp(end_date).date()
+ else:
+ end = datetime.date.today()
+
+ facts = dbus.Array([], signature='a{sv}')
+ for fact in runtime.storage.get_facts(start, end):
+ facts.append(HamsterDbusController.to_dbus_fact(fact))
+
+ return facts
+
@dbus.service.method(HAMSTER_URI, out_signature='a(ss)')
def GetActivities(self):
"""Gets all defined activities with matching category
@@ -109,7 +142,7 @@ class HamsterDbusController(dbus.service.Object):
s activity: Activity name
s category: Category name
"""
- activities = []
+ activities = dbus.Array([], signature='(ss)')
for act in runtime.storage.get_autocomplete_activities():
activities.append((act[ACT_KEY] or '', act[CAT_KEY] or ''))
return activities
@@ -120,9 +153,9 @@ class HamsterDbusController(dbus.service.Object):
Returns Array of:
s category: Category name
"""
- categories = []
- for i in runtime.storage.get_category_list():
- categories.append(i[ACT_KEY] or '')
+ categories = dbus.Array([], signature='s')
+ for cat in runtime.storage.get_category_list():
+ categories.append(cat[ACT_KEY] or '')
return categories
@dbus.service.method(HAMSTER_URI, in_signature='suu', out_signature='i')
@@ -135,7 +168,7 @@ class HamsterDbusController(dbus.service.Object):
on the fly.
u start_time: Seconds since epoch (timestamp). Use 0 for 'now'
u end_time: Seconds since epoch (timestamp).
- Use 0 for i 'in progress task'
+ Use 0 for 'in progress task'
"""
#TODO: Assert start > end ?
start, end = None, None
@@ -213,7 +246,7 @@ class HamsterDbusController(dbus.service.Object):
@dbus.service.signal(HAMSTER_URI, signature='i')
def FactUpdated(self, fact_id):
- """Notice fact changes
+ """Notifies fact changes
Parameters:
i id: Unique fact identifier
"""
@@ -221,5 +254,5 @@ class HamsterDbusController(dbus.service.Object):
@dbus.service.signal(HAMSTER_URI)
def TrackingStopped(self):
- """Notice the fact tracking has been stopped"""
+ """Notifies the fact tracking has been stopped"""
self.current_fact_id = 0
diff --git a/tests/hamsterdbus_test.py b/tests/hamsterdbus_test.py
index 6bb0b28..ed30d3a 100644
--- a/tests/hamsterdbus_test.py
+++ b/tests/hamsterdbus_test.py
@@ -23,6 +23,7 @@ class TestTracking(unittest.TestCase):
self.addfact = self.hamster.get_dbus_method('AddFact')
self.getfactbyid = self.hamster.get_dbus_method('GetFactById')
self.removefact = self.hamster.get_dbus_method('RemoveFact')
+ self.getfacts = self.hamster.get_dbus_method('GetFacts')
self.getcurrentfact = self.hamster.get_dbus_method('GetCurrentFact')
self.addactivity = self.hamster.get_dbus_method('AddActivity')
self.getactivities = self.hamster.get_dbus_method('GetActivities')
@@ -53,6 +54,14 @@ class TestTracking(unittest.TestCase):
self.assertEqual(fact['end_time'], dbfact['end_time'],
'expected same end_time')
+ facts = self.getfacts(dbfact['start_time'], dbfact['end_time'])
+ in_facts = False
+ for item in facts:
+ if item == dbfact:
+ in_facts = True
+ self.assertTrue(in_facts, 'expected fact between %i and %i' % \
+ (fact['start_time'], fact['end_time']))
+
self.removeactivity(dbfact['name'], dbfact['category'])
result = self.__findactivity(dbfact['name'], dbfact['category'])
self.assertFalse(result, 'not expecting %s %s in database' % \
@@ -65,16 +74,7 @@ class TestTracking(unittest.TestCase):
self.removefact(fact_id)
deletedfact = self.getfactbyid(fact_id)
- self.assertEqual(deletedfact['name'], '',
- 'expected no name on deleted fact')
- self.assertEqual(deletedfact['category'], '',
- 'expected no category on deleted fact')
- self.assertEqual(deletedfact['description'], '',
- 'expected no description on deleted fact')
- self.assertEqual(deletedfact['start_time'], 0,
- 'expected no start_time on deleted fact')
- self.assertEqual(deletedfact['end_time'], 0,
- 'expected no end_time on deleted fact')
+ self.assertFalse(deletedfact, 'expected no fact after deleted it')
def test_getcurrent_stop(self):
fact = self.__rndfactgenerator()
@@ -99,16 +99,7 @@ class TestTracking(unittest.TestCase):
self.stoptracking()
current = self.getcurrentfact()
- self.assertEqual(current['name'], '',
- 'expected no name on deleted fact')
- self.assertEqual(current['category'], '',
- 'expected no category on deleted fact')
- self.assertEqual(current['description'], '',
- 'expected no description on deleted fact')
- self.assertEqual(current['start_time'], 0,
- 'expected no start_time on deleted fact')
- self.assertEqual(current['end_time'], 0,
- 'expected no end_time on deleted fact')
+ self.assertFalse(current, 'expected no fact after stop tracking')
self.removeactivity(fact['name'], fact['category'])
result = self.__findactivity(fact['name'], fact['category'])
@@ -147,11 +138,12 @@ class TestTracking(unittest.TestCase):
result = self.__findcategory(cat)
self.assertFalse(result, 'not expecting %s in database' % cat)
- def __rndfactgenerator(self):
- fact = {'name':rndstr(), 'category':rndstr(),
- 'description':rndstr(),
- 'start_time':timegm(dt.datetime.now().timetuple()),
- 'end_time':timegm((dt.datetime.now() + \
+ def __rndfactgenerator(self, name=None, category=None, description=None,
+ start_time=None, end_time=None):
+ fact = {'name':name or rndstr(), 'category':category or rndstr(),
+ 'description':description or rndstr(),
+ 'start_time':start_time or timegm(dt.datetime.now().timetuple()),
+ 'end_time':end_time or timegm((dt.datetime.now() + \
dt.timedelta(hours=1)).timetuple())}
return fact
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]