aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lesana/command.py61
-rwxr-xr-xscripts/lesana3
2 files changed, 49 insertions, 15 deletions
diff --git a/lesana/command.py b/lesana/command.py
index dbad2d2..16d38f3 100644
--- a/lesana/command.py
+++ b/lesana/command.py
@@ -65,6 +65,21 @@ class Command():
self.args = args
self.main()
+ def get_template_renderer(self, template_fname):
+ env = jinja2.Environment(
+ loader=jinja2.FileSystemLoader(
+ searchpath='.',
+ followlinks=True,
+ ),
+ # TODO: add autoescaping settings
+ )
+ try:
+ template = env.get_template(template_fname)
+ except jinja2.exceptions.TemplateNotFound as e:
+ logging.error("Could not find template: {}".format(e))
+ sys.exit(1)
+ return template
+
class New(Command):
arguments = [
@@ -129,6 +144,36 @@ class Edit(Command):
print(entry)
+class Show(Command):
+ arguments = [
+ (['--collection', '-c'], dict(
+ help='The collection to work on (default .)'
+ )),
+ (['--template', '-t'], dict(
+ help='Template to use when displaying results',
+ )),
+ (['uid'], dict(
+ help='uid of an entry to edit',
+ )),
+ ]
+
+ def main(self):
+ collection = Collection(self.args.collection)
+ entries = collection.entries_from_short_uid(self.args.uid)
+ if len(entries) > 1:
+ return "{} is not an unique uid".format(self.args.uid)
+ if not entries:
+ return "Could not find an entry with uid starting with: {}".format(
+ self.args.uid
+ )
+ entry = entries[0]
+ if self.args.template:
+ template = self.get_template_renderer(self.args.template)
+ print(template.render(entry=entry))
+ else:
+ print(entry.yaml_data)
+
+
class Index(Command):
arguments = [
(['--collection', '-c'], dict(
@@ -201,20 +246,8 @@ class Search(Command):
offset,
pagesize)
if self.args.template:
- env = jinja2.Environment(
- loader=jinja2.FileSystemLoader(
- searchpath='.',
- followlinks=True,
- ),
- # TODO: add autoescaping settings
- )
- try:
- template = env.get_template(self.args.template)
- except jinja2.exceptions.TemplateNotFound as e:
- logging.error("Could not find template: {}".format(e))
- sys.exit(1)
- else:
- print(template.render(entries=results))
+ template = self.get_template_renderer(self.args.template)
+ print(template.render(entries=results))
else:
for entry in results:
print("{entry}".format(
diff --git a/scripts/lesana b/scripts/lesana
index 713f8a7..b8b9929 100755
--- a/scripts/lesana
+++ b/scripts/lesana
@@ -2,7 +2,7 @@
import argparse
-from lesana.command import New, Edit, Index, Search, Init, Remove
+from lesana.command import New, Edit, Show, Index, Search, Init, Remove
class Lesana():
"""
@@ -12,6 +12,7 @@ class Lesana():
commands = (
('new', New()),
('edit', Edit()),
+ ('show', Show()),
('index', Index()),
('search', Search()),
('init', Init()),