photo-python/openphoto/main.py

86 lines
3.1 KiB
Python

#!/usr/bin/env python
import os
import sys
import string
import urllib
from optparse import OptionParser
try:
import json
except ImportError:
import simplejson as json
from openphoto import OpenPhoto
def main(args=sys.argv[1:]):
consumer_key = os.getenv('consumerKey')
consumer_secret = os.getenv('consumerSecret')
token = os.getenv('token')
token_secret = os.getenv('tokenSecret')
parser = OptionParser()
parser.add_option('-H', '--host', action='store', type='string', dest='host',
help="Hostname of the OpenPhoto install", default="localhost")
parser.add_option('-X', action='store', type='choice', dest='method', choices=('GET', 'POST'),
help="Method to use (GET or POST)", default="GET")
parser.add_option('-F', action='append', type='string', dest='fields',
help="Fields")
parser.add_option('-e', action='store', type='string', dest='endpoint',
default='/photos/list.json',
help="Endpoint to call")
parser.add_option('-p', action="store_true", dest="pretty", default=False,
help="pretty print the json")
parser.add_option('-v', action="store_true", dest="verbose", default=False,
help="verbose output")
parser.add_option('--encode', action="store_true", dest="encode", default=False)
options, args = parser.parse_args(args)
params = {}
if options.fields:
for field in options.fields:
(key, value) = string.split(field, '=')
params[key] = value
client = OpenPhoto(options.host, consumer_key, consumer_secret, token, token_secret)
if options.method == "GET":
result = client.get(options.endpoint, process_response=False, **params)
else:
params, files = extract_files(params)
result = client.post(options.endpoint, process_response=False, files=files, **params)
if options.verbose:
print "==========\nMethod: %s\nHost: %s\nEndpoint: %s" % (options.method, options.host, options.endpoint)
if len( params ) > 0:
print "Fields:"
for kv in params.iteritems():
print " %s=%s" % kv
print "==========\n"
if options.pretty:
print json.dumps(json.loads(result), sort_keys=True, indent=4, separators=(',',':'))
else:
print result
def extract_files(params):
"""
Extract filenames from the "photo" parameter, so they can be uploaded, returning (updated_params, files).
Uses the same technique as openphoto-php:
* Filename can only be in the "photo" parameter
* Filename must be prefixed with "@"
* Filename must exist
...otherwise the parameter is not extracted
"""
files = {}
updated_params = {}
for name in params:
if name == "photo" and params[name].startswith("@") and os.path.isfile(os.path.expanduser(params[name][1:])):
files[name] = params[name][1:]
else:
updated_params[name] = params[name]
return updated_params, files
if __name__ == "__main__":
main()