← Back to team overview

oerppy-hackers team mailing list archive

[Branch ~oerppy-hackers/oerppy/trunk] Rev 42: * Improved some of the command line help options.

 

------------------------------------------------------------
revno: 42
committer: duncan@xxxxxxxxxx
branch nick: trunk
timestamp: Thu 2011-06-09 08:24:33 -0600
message:
  * Improved some of the command line help options.
  * Added support for querying all projects.
  * Moved Project query methods out of the Canonical query class and into the
    project one.
  * Added a TODO file.
added:
  TODO
modified:
  bin/export_month_timesheets
  oerppy/addons/canonical/query.py
  oerppy/addons/canonical/scripting/export.py
  oerppy/addons/project/query.py
  oerppy/scripting/base.py


--
lp:oerppy
https://code.launchpad.net/~oerppy-hackers/oerppy/trunk

Your team oerppy Hackers is subscribed to branch lp:oerppy.
To unsubscribe from this branch go to https://code.launchpad.net/~oerppy-hackers/oerppy/trunk/+edit-subscription
=== added file 'TODO'
--- TODO	1970-01-01 00:00:00 +0000
+++ TODO	2011-06-09 14:24:33 +0000
@@ -0,0 +1,4 @@
+* Create a convenience method on the base Query class for getting an addon.
+* Update the data models per the email from James Jesudason regarding the
+  Canonical customizations.
+* Add a script for getting all the project names.

=== modified file 'bin/export_month_timesheets'
--- bin/export_month_timesheets	2011-06-09 03:06:38 +0000
+++ bin/export_month_timesheets	2011-06-09 14:24:33 +0000
@@ -7,6 +7,7 @@
 from oerppy.addons.canonical import canonical_query
 from oerppy.addons.canonical.scripting import export
 from oerppy.addons.hr import hr_query
+from oerppy.addons.project import project_query
 
 
 # get configuration; note that option parsing is handled by the script
@@ -15,6 +16,7 @@
 # setup any addons that we want
 registry.add("base", query.Query)
 registry.add("hr", hr_query.HRQuery)
+registry.add("project", project_query.ProjectQuery)
 registry.add("canonical", canonical_query.CanonicalQuery)
 # run the exporter
 monthly_export = export.MonthExport(config_data)

=== modified file 'oerppy/addons/canonical/query.py'
--- oerppy/addons/canonical/query.py	2011-06-09 03:06:38 +0000
+++ oerppy/addons/canonical/query.py	2011-06-09 14:24:33 +0000
@@ -78,44 +78,6 @@
         self._cache["oem_user_ids"] = result.user_ids
         return result.user_ids
 
-    def get_project(self, id=None, name=""):
-        if name:
-            query = [('name','=',name)]
-        elif id:
-            query = [('id','=',id)]
-        raw_results = self.client.searchfields(
-            entity='project.project',
-            query=query,
-            fields=[])
-        return project.model.ProjectSet(raw_results).get_first()
-
-    def get_project_id(self, project_name):
-        project = self.get_project(name=project_name)
-        if project:
-            return project.id
-
-    def get_project_user_ids(self, project_name="", project_id=None):
-        if project_name:
-            query = [('name', '=', project_name)]
-        elif project_id:
-            query = [('id', '=', project_id)]
-        else:
-            query = []
-        raw_results = self.client.searchfields(
-            entity='project.project',
-            query=query,
-            fields=['members'])
-        result = project.model.ProjectSet(raw_results).get_first()
-        return result.members
-
-    def get_project_names(self):
-        raw_results = self.client.searchfields(
-            entity='project.project',
-            query=[],
-            fields=['name'])
-        results = project.model.ProjectSet(raw_results)
-        return [x.name for x in results]
-
     def get_timesheet_hours(self, domains=None):
         if not domains:
             domains = []
@@ -217,7 +179,8 @@
                                      user_ids=None):
         mondays = util.get_mondays(date(year, month, 1), return_iso=True)
         if not user_ids:
-            user_ids = self.get_project_user_ids(project_name=project_name)
+            user_ids = registry.get_addon("project").get_project_user_ids(
+                project_name=project_name)
         all_timesheets = []
         records = []
         for monday in mondays:
@@ -238,3 +201,12 @@
                         "hours": project_data.hours}
                     records.append(row)
         return records
+
+    def get_month_timesheets(self, month, year, user_ids=None):
+        records = []
+        project_names = registry.get_addon("project").get_project_names()
+        for project_name in project_names:
+            records = self.get_month_project_timesheets(
+                month, year, project_name)
+            records.extend(records)
+        return records

=== modified file 'oerppy/addons/canonical/scripting/export.py'
--- oerppy/addons/canonical/scripting/export.py	2011-06-09 03:06:38 +0000
+++ oerppy/addons/canonical/scripting/export.py	2011-06-09 14:24:33 +0000
@@ -18,14 +18,14 @@
         parser.add_option(
             "-m", "--month", dest="month", action="store", type="int",
             default=now.month,
-            help="the month to export")
+            help="the month to export (default is current month)")
         parser.add_option(
             "-y", "--year", dest="year", action="store", type="int",
             default=now.year,
-            help="the year to export")
+            help="the year to export (default is current year)")
         parser.add_option(
             "-p", "--project", dest="project_name", action="store",
-            default=now.year,
+            default="all",
             help="the project to get timesheet data for (if not provided, "
                  "all projects will be returned).")
         return parser
@@ -36,8 +36,12 @@
         # options of this class added to those
         options = self.get_options(purge=True)
         addon = self.service.get_addon("canonical")
-        data = addon.get_month_project_timesheets(
-            options.month, options.year, options.project_name)
+        project_name = options.project_name
+        if project_name == "all":
+            data = addon.get_month_timesheets(options.month, options.year)
+        else:
+            data = addon.get_month_project_timesheets(
+                options.month, options.year, project_name)
         self.export(data)
 
 

=== modified file 'oerppy/addons/project/query.py'
--- oerppy/addons/project/query.py	2011-06-09 03:06:38 +0000
+++ oerppy/addons/project/query.py	2011-06-09 14:24:33 +0000
@@ -5,6 +5,44 @@
 class ProjectQuery(query.Query):
     """
     """
+    def get_project(self, id=None, name=""):
+        if name:
+            query = [('name','=',name)]
+        elif id:
+            query = [('id','=',id)]
+        raw_results = self.client.searchfields(
+            entity='project.project',
+            query=query,
+            fields=[])
+        return model.ProjectSet(raw_results).get_first()
+
+    def get_project_id(self, project_name):
+        project = self.get_project(name=project_name)
+        if project:
+            return project.id
+
+    def get_project_user_ids(self, project_name="", project_id=None):
+        if project_name:
+            query = [('name', '=', project_name)]
+        elif project_id:
+            query = [('id', '=', project_id)]
+        else:
+            query = []
+        raw_results = self.client.searchfields(
+            entity='project.project',
+            query=query,
+            fields=['members'])
+        result = model.ProjectSet(raw_results).get_first()
+        return result.members
+
+    def get_project_names(self):
+        raw_results = self.client.searchfields(
+            entity='project.project',
+            query=[],
+            fields=['name'])
+        results = model.ProjectSet(raw_results)
+        return [x.name for x in results]
+
     def timesheet_hours(self, domains):
         raw_results = self.client.searchfields(
             entity="project.task.work",

=== modified file 'oerppy/scripting/base.py'
--- oerppy/scripting/base.py	2011-06-09 03:06:38 +0000
+++ oerppy/scripting/base.py	2011-06-09 14:24:33 +0000
@@ -68,11 +68,11 @@
         parser.add_option(
             "-o", "--output-file", dest="output_filename", action="store",
             default=const.STDOUT_FILENAME,
-            help="the file to write the export to")
+            help="the file to write the export to (default is stdout)")
         parser.add_option(
             "-f", "--format", dest="export_format", action="store",
             default=const.EXPORT_RAW,
-            help="the format to export the data in")
+            help="the format to export the data in (default is JSON)")
         return parser
 
     def export(self, data, *args, **kwargs):