From 2ef047694461b7ec3a9f20b3e255e89621396e6d Mon Sep 17 00:00:00 2001 From: Walter Bender Date: Thu, 20 Sep 2012 19:02:13 +0000 Subject: new sample project --- (limited to 'pysamples') diff --git a/pysamples/journal-stats.py b/pysamples/journal-stats.py new file mode 100644 index 0000000..f19b042 --- /dev/null +++ b/pysamples/journal-stats.py @@ -0,0 +1,137 @@ +# Copyright (c) 2012, Walter Bender + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +def myblock(tw, x): # ignore second argument + ''' Load journal stats to heap (Sugar only) ''' + + import os + import glob + MAX = 19 + DIROFINTEREST = 'datastore' + + + class ParseJournal(): + ''' Simple parser of datastore ''' + + def __init__(self): + self._dsdict = {} + self._activity_name = [] + self._activity_count = [] + + homepath = os.environ['HOME'] + for path in glob.glob(os.path.join(homepath, '.sugar', '*')): + if isdsdir(path): + self._dsdict[os.path.basename(path)] = [] + dsobjdirs = glob.glob( + os.path.join(path, DIROFINTEREST, '??')) + for dsobjdir in dsobjdirs: + dsobjs = glob.glob(os.path.join(dsobjdir, '*')) + for dsobj in dsobjs: + self._dsdict[os.path.basename(path)].append({}) + activity = isactivity(dsobj) + if not activity: + self._dsdict[os.path.basename(path)][-1][ + 'activity'] = 'media object' + else: + self._dsdict[os.path.basename(path)][-1][ + 'activity'] = activity + + for k, v in self._dsdict.iteritems(): + for a in v: + if 'activity' in a: + if a['activity'] in self._activity_name: + i = self._activity_name.index(a['activity']) + self._activity_count[i] += 1 + else: + self._activity_name.append(a['activity']) + self._activity_count.append(1) + + def get_list(self): + activity_list = [] + for i in range(len(self._activity_name)): + activity_list.append([self._activity_name[i], + self._activity_count[i]]) + return activity_list + + def get_max(self): + max_count = -1 + max_name = '' + for i in range(len(self._activity_name)): + if self._activity_count[i] > max_count: + max_count = self._activity_count[i] + max_name = self._activity_name[i] + return max_name + + def get_sorted(self): + activity_tuples = [] + for i in range(len(self._activity_name)): + activity_tuples.append((self._activity_name[i], + self._activity_count[i])) + sorted_tuples = sorted(activity_tuples, key=lambda x: x[1]) + activity_list = [] + count = 0 + length = len(sorted_tuples) + for i in range(length): + if i < MAX: + activity_list.append([sorted_tuples[length - i - 1][0], + sorted_tuples[length - i - 1][1]]) + else: + count += sorted_tuples[length - i - 1][1] + if count > 0: + activity_list.append([_('other'), count]) + return activity_list + + + def hascomponent(path, component): + ''' Return metadata attribute, if any ''' + if not os.path.exists(os.path.join(path, 'metadata')): + return False + if not os.path.exists(os.path.join(path, 'metadata', component)): + return False + fd = open(os.path.join(path, 'metadata', component)) + data = fd.readline() + fd.close() + if len(data) == 0: + return False + return data + + + def isactivity(path): + ''' Return activity name ''' + activity = hascomponent(path, 'activity') + if not activity: + return False + else: + return activity.split('.')[-1] + + + def isdsdir(path): + ''' Only interested if it is a datastore directory ''' + if not os.path.isdir(path): + return False + if not os.path.exists(os.path.join(path, DIROFINTEREST)): + return False + return True + + + data = ParseJournal() + activity_list = data.get_sorted() + for a in activity_list: + tw.lc.heap.append(a[0]) + tw.lc.heap.append(a[1]) + + tw.lc.heap.append(activity_list[0][1]) + return -- cgit v0.9.1