Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/bin/copy-from-journal
diff options
context:
space:
mode:
Diffstat (limited to 'bin/copy-from-journal')
-rwxr-xr-xbin/copy-from-journal56
1 files changed, 29 insertions, 27 deletions
diff --git a/bin/copy-from-journal b/bin/copy-from-journal
index 7a10bfd..c8d2d84 100755
--- a/bin/copy-from-journal
+++ b/bin/copy-from-journal
@@ -4,7 +4,6 @@
# Reinier Heeres, <reinier@heeres.eu>, 2007-12-24
# Phil Bordelon <phil@thenexusproject.org>
-import sys
import os
import shutil
import optparse
@@ -20,81 +19,84 @@ import sugar.mime
# for quicker operation.
RETURN_LIMIT = 2
+
def build_option_parser():
usage = "Usage: %prog [-o OBJECT_ID] [-q SEARCH_STR] [-m] OUTFILE"
parser = optparse.OptionParser(usage=usage)
parser.add_option("-o", "--object_id", action="store", dest="object_id",
- help="Retrieve object with explicit ID OBJECT_ID",
+ help="Retrieve object with explicit ID OBJECT_ID",
metavar="OBJECT_ID", default=None)
parser.add_option("-q", "--query", action="store", dest="query",
- help="Full-text-search the metadata for SEARCH_STR",
+ help="Full-text-search the metadata for SEARCH_STR",
metavar="SEARCH_STR", default=None)
- parser.add_option("-m", "--metadata", action="store_true", dest="show_meta",
- help="Show all non-preview metadata [default: hide]",
- default=False)
+ parser.add_option("-m", "--metadata", action="store_true",
+ dest="show_meta",
+ help="Show all non-preview metadata [default: hide]",
+ default=False)
return parser
if __name__ == "__main__":
- parser = build_option_parser()
- options, args = parser.parse_args()
+ option_parser = build_option_parser()
+ options, args = option_parser.parse_args()
if len(args) < 1:
- parser.print_help()
+ option_parser.print_help()
exit(0)
try:
dsentry = None
-
+
# Get object directly if we were given an explicit object ID.
if options.object_id is not None:
dsentry = datastore.get(options.object_id)
-
+
# Compose the query based on the options provided.
if dsentry is None:
query = {}
-
+
if options.query is not None:
query['query'] = options.query
-
+
# We only want a single file at a time; limit the number of objects
- # returned to two, as anything more than one means the criteria were
- # not limited enough.
- objects, count = datastore.find(query, limit=RETURN_LIMIT, sorting='-mtime')
+ # returned to two, as anything more than one means the criteria
+ # were not limited enough.
+ objects, count = \
+ datastore.find(query, limit=RETURN_LIMIT, sorting='-mtime')
if count > 1:
- print 'WARNING: %d objects found; retrieving most recent.' % (count)
+ print 'WARNING: %d objects found; getting most recent.' % count
for i in xrange(1, RETURN_LIMIT):
objects[i].destroy()
-
+
if count > 0:
dsentry = objects[0]
-
+
# If neither an explicit object ID nor a query gave us data, fail.
if dsentry is None:
print 'ERROR: unable to determine journal object to copy.'
- parser.print_help()
+ option_parser.print_help()
exit(0)
-
+
# Print metadata if that is what the user asked for.
if options.show_meta:
print 'Metadata:'
for key, val in dsentry.metadata.get_dictionary().iteritems():
if key != 'preview':
print '%20s -> %s' % (key, val)
-
+
# If no file is associated with this object, we can't save it out.
if dsentry.get_file_path() == "":
print 'ERROR: no file associated with object, just metadata.'
dsentry.destroy()
exit(0)
-
+
outname = args[0]
outroot, outext = os.path.splitext(outname)
-
+
# Do our best to determine the output file extension, based on Sugar's
# MIME-type-to-extension mappings.
if outext == "":
@@ -102,13 +104,13 @@ if __name__ == "__main__":
outext = sugar.mime.get_primary_extension(mimetype)
if outext == None:
outext = "dsobject"
- outext = '.' + outext
-
+ outext = '.' + outext
+
# Lastly, actually copy the file out of the datastore and onto the
# filesystem.
shutil.copyfile(dsentry.get_file_path(), outroot + outext)
print '%s -> %s' % (dsentry.get_file_path(), outroot + outext)
-
+
# Cleanup.
dsentry.destroy()