commit bc7d5b3cd2def836fe3785e083ec2a8773f587bf
parent adb2c7aeeddb2687483d1a24e1b498a1af0daf9e
Author: lash <dev@holbrook.no>
Date:   Sat, 19 Nov 2022 09:22:30 +0000
Move list cmd code to show cmd
Diffstat:
7 files changed, 73 insertions(+), 85 deletions(-)
diff --git a/piknik/render/base.py b/piknik/render/base.py
@@ -15,15 +15,15 @@ class Renderer:
         pass
 
 
-    def apply_issue_pre(self, state, issue_id, issue, tags, w=sys.stdout):
+    def apply_issue_pre(self, state, issue, tags, w=sys.stdout):
         pass
 
 
-    def apply_issue(self, state, issue_id, issue, tags, w=sys.stdout):
+    def apply_issue(self, state, issue, tags, w=sys.stdout):
         pass
 
     
-    def apply_issue_post(self, state, issue_id, issue, tags, w=sys.stdout):
+    def apply_issue_post(self, state, issue, tags, w=sys.stdout):
         pass
 
 
@@ -31,5 +31,5 @@ class Renderer:
         pass
 
 
-    def apply_end(self, state, w=sys.stdout):
+    def apply_end(self, w=sys.stdout):
         pass
diff --git a/piknik/render/html.py b/piknik/render/html.py
@@ -30,22 +30,28 @@ class Renderer(BaseRenderer):
         self.state_buf.append(r)
 
 
-    def apply_issue(self, state, issue_id, issue, tags, w=sys.stdout):
-        v = li(a(issue.title, href=issue_id + '.html'))
+    def apply_issue(self, state, issue, tags, w=sys.stdout):
+        v = li(a(issue.title, href=issue.id + '.html'))
         self.issue_buf.append(v)
 
 
-    def apply_message(self, state, issue_id, issue, tags, message, w=None):
+    def apply_message(self, state, issue, tags, message, w=None):
+        pass
 
 
+    def apply_message_part(self, state, issue, envelope, message, message_date, message_id, dump_dir=None, w=sys.stdout):
+        m = parse_mime_type(message.get_content_type())
+        filename = message.get_filename()
 
-    def apply_issue_post(self, state, issue_id, issue, tags, w=None):
+
+
+    def apply_issue_post(self, state, issue, tags, w=None):
         close = False
         if w == None:
-            fp = os.path.join(self.outdir, issue_id + '.html')
+            fp = os.path.join(self.outdir, issue.id + '.html')
             w = open(fp, 'w')
             close = True
-        r = dominate.document(title='issue: {} ({})'.format(issue.title, issue_id))
+        r = dominate.document(title='issue: {} ({})'.format(issue.title, issue.id))
         r.add(h1(issue.title))
         w.write(r.render())
        
diff --git a/piknik/render/ini.py b/piknik/render/ini.py
@@ -9,8 +9,8 @@ class Renderer(BaseRenderer):
         w.write('[' + state + ']\n') 
 
 
-    def apply_issue(self, state, issue_id, issue, tags, w=sys.stdout):
-        w.write('{}\t{}\t{}\n'.format(issue.title, ','.join(tags), issue_id))
+    def apply_issue(self, state, issue, tags, w=sys.stdout):
+        w.write('{}\t{}\t{}\n'.format(issue.title, ','.join(tags), issue.id))
 
 
     def apply_state_post(self, state, w=sys.stdout):
diff --git a/piknik/render/plain.py b/piknik/render/plain.py
@@ -10,7 +10,7 @@ from .base import Renderer as BaseRenderer
 
 class Renderer(BaseRenderer):
 
-    def apply_issue(self, state, issue_id, issue, tags, w=sys.stdout):
+    def apply_issue(self, state, issue, tags, w=sys.stdout):
         w.write("""id: {}
 title: {}
 tags: {}
@@ -38,7 +38,7 @@ tags: {}
             w.write('\t' + str(s))
 
 
-    def apply_message(self, state, issue_id, issue, tags, message, w=sys.stdout):
+    def apply_message(self, state, issue, tags, message, w=sys.stdout):
         pass
 
 
diff --git a/piknik/runnable/list.py b/piknik/runnable/list.py
@@ -1,65 +0,0 @@
-import sys
-import argparse
-
-from piknik import Basket
-from piknik import Issue
-from piknik.store import FileStoreFactory
-
-
-argp = argparse.ArgumentParser()
-argp.add_argument('-d', type=str, help='Data directory')
-argp.add_argument('-s', '--state', type=str, action='append', default=[], help='Include state in list')
-argp.add_argument('--show-finished', dest='show_finished', action='store_true', help='Include finished issues')
-argp.add_argument('-r', '--renderer', type=str, default='ini', help='Renderer module for output')
-arg = argp.parse_args(sys.argv[1:])
-
-store_factory = FileStoreFactory(arg.d)
-basket = Basket(store_factory)
-
-
-def render(b, r, m):
-    m.apply_begin()
-
-    for k in basket.states():
-        if k == 'FINISHED' and not arg.show_finished:
-            continue
-
-        m.apply_state(k)
-
-        for v in r[k]:
-            if k != 'BLOCKED' and v in r['BLOCKED']:
-                continue
-            o = b.get(v)
-            t = b.tags(v)
-            m.apply_issue(k, v, o, t)
-            m.apply_issue_post(k, v, o, t)
-
-        m.apply_state_post(k)
-
-    m.apply_end()
-
-
-def main():
-    results = {}
-    states = []
-    for s in arg.state:
-        states.append(s.upper())
-
-    l = len(states)
-    for s in basket.states():
-        
-        if results.get(s) == None:
-            results[s] = []
-
-        if l == 0 or s in states:
-            for v in basket.list(category=s):
-               results[s].append(v)
-
-    import piknik.render.html
-    m = piknik.render.html.Renderer()
-    #globals()['render_' + arg.renderer](basket, results, m)
-    render(basket, results, m)
-
-
-if __name__ == '__main__':
-    main()
diff --git a/piknik/runnable/show.py b/piknik/runnable/show.py
@@ -23,8 +23,10 @@ argp.add_argument('-d', type=str, help='Data directory')
 argp.add_argument('-f', '--files', dest='f', action='store_true', help='Save attachments to filesystem')
 argp.add_argument('-o', '--files-dir', dest='files_dir', type=str, default='.', help='Directory to output saved files to')
 argp.add_argument('-r', '--renderer', type=str, default='default', help='Renderer module for output')
+argp.add_argument('-s', '--state', type=str, action='append', default=[], help='Limit results to state(s)')
+argp.add_argument('--show-finished', dest='show_finished', action='store_true', help='Include finished issues')
 argp.add_argument('--reverse', action='store_true', help='Sort comments by oldest first')
-argp.add_argument('issue_id', type=str, help='Issue id to show')
+argp.add_argument('issue_id', type=str, nargs='?', default=None, help='Issue id to show')
 arg = argp.parse_args(sys.argv[1:])
 
 store_factory = FileStoreFactory(arg.d)
@@ -127,24 +129,70 @@ gpg_home = os.environ.get('GPGHOME')
 
 
 def render(renderer, basket, state, issue, tags):
-    renderer.apply_issue(state, arg.issue_id, issue, tags)
+    renderer.apply_issue(state, issue, tags)
     verifier = PGPWrapper(renderer, state, issue, home_dir=gpg_home)
     m = basket.get_msg(
             arg.issue_id,
             envelope_callback=verifier.envelope_callback,
             message_callback=verifier.message_callback,
             post_callback=verifier.post_callback,
-            )
+        )
+
+def render_states(renderer, basket, states):
+    renderer.apply_begin()
+
+    for k in basket.states():
+        if k == 'FINISHED' and not arg.show_finished:
+            continue
+
+        renderer.apply_state(k)
+
+        for issue_id in states[k]:
+            if k != 'BLOCKED' and issue_id in states['BLOCKED']:
+                continue
+            issue = basket.get(issue_id)
+            tags = basket.tags(issue_id)
+            renderer.apply_issue(k, issue, tags)
+            renderer.apply_issue_post(k, issue, tags)
+
+        renderer.apply_state_post(k)
+
+    renderer.apply_end()
+
+
+def process_states(renderer, basket):
+    results = {}
+    states = []
+    for s in arg.state:
+        states.append(s.upper())
+
+    l = len(states)
+    for s in basket.states():
+        
+        if results.get(s) == None:
+            results[s] = []
+
+        if l == 0 or s in states:
+            for v in basket.list(category=s):
+               results[s].append(v)
+
+    render_states(renderer, basket, results)
 
 
 def main():
+    if arg.issue_id == None:
+        import piknik.render.html
+        renderer = piknik.render.html.Renderer()
+        return process_states(renderer, basket)
+
+    import piknik.render.plain
+    renderer = piknik.render.plain.Renderer()
+
     issue = basket.get(arg.issue_id)
     tags = basket.tags(arg.issue_id)
     state = basket.get_state(arg.issue_id)
 
     #globals()['render_' + arg.renderer](basket, state, issue, tags)
-    import piknik.render.plain
-    renderer = piknik.render.plain.Renderer()
     render(renderer, basket, state, issue, tags)
     
 
diff --git a/setup.cfg b/setup.cfg
@@ -34,6 +34,5 @@ packages =
 console_scripts =
 	piknik-add = piknik.runnable.add.py:main
 	piknik-mod = piknik.runnable.mod.py:main
-	piknik-list = piknik.runnable.list.py:main
 	piknik-show = piknik.runnable.show.py:main
 	piknik-comment = piknik.runnable.comment.py:main