summaryrefslogtreecommitdiffstats
path: root/fedora_business_cards/frontend/cmdline.py
diff options
context:
space:
mode:
Diffstat (limited to 'fedora_business_cards/frontend/cmdline.py')
-rw-r--r--fedora_business_cards/frontend/cmdline.py173
1 files changed, 173 insertions, 0 deletions
diff --git a/fedora_business_cards/frontend/cmdline.py b/fedora_business_cards/frontend/cmdline.py
new file mode 100644
index 0000000..1b36998
--- /dev/null
+++ b/fedora_business_cards/frontend/cmdline.py
@@ -0,0 +1,173 @@
+###
+# fedora-business-cards - for rendering Fedora contributor business cards
+# Copyright (C) 2008 Ian Weller <ianweller@gmail.com>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+###
+
+"""
+Command-line interface to business card generator. Takes no arguments; uses
+optparser.OptionParser instead.
+"""
+
+from optparse import OptionParser
+import os
+import sys
+from getpass import getpass
+
+# local imports
+from .. import config
+from .. import information
+from .. import generate
+from .. import export
+
+
+def cmdline_card_line(data):
+ """
+ Print a line of the business card for the cmdline frontend.
+ """
+ return "| %s%s |" % (data, ' '*(59-len(data)))
+
+
+def main():
+ """
+ Call this to make things happen.
+ """
+ # setup option parser
+ parser = OptionParser()
+ parser.usage = "%prog [options]"
+ parser.add_option("-d", "--dpi", dest="dpi", default=300, type="int",
+ help="DPI of exported file")
+ parser.add_option("-t", "--template", dest="template",
+ default="northamerica", help="Name of template to use,"+\
+ " run with --list-templates to see a list")
+ parser.add_option("--list-templates", action="store_true", default=False,
+ dest="listtemplates", help="List available templates")
+ parser.add_option("-u", "--username", dest="username", default="",
+ help="If set, use a different name than the one logged"+\
+ " in with to fill out business card information")
+ parser.add_option("--pdf", dest="output", default="png", const="pdf",
+ action="store_const", help="Export as PDF")
+ parser.add_option("--png", dest="output", default="png", const="png",
+ action="store_const", help="Export as PNG (default)")
+ parser.add_option("--svg", dest="output", default="png", const="svg",
+ action="store_const", help="Export as SVG")
+ parser.add_option("-c", "--config", dest="config_location", default="",
+ help="Location of config.ini configuration file")
+ options = parser.parse_args()[0]
+ # check what templates are available
+ config.parser.read(options.config_location)
+ templates_dir = config.parser.get('location', 'templates')
+ contents = os.listdir(templates_dir)
+ checked_once = []
+ available_templates = []
+ for i in contents:
+ if i[-4:] == '.svg':
+ if i[:6] == 'front-':
+ name = i[6:-4]
+ elif i[:5] == 'back-':
+ name = i[5:-4]
+ else:
+ continue
+ if name in checked_once:
+ available_templates.append(name)
+ else:
+ checked_once.append(name)
+ if options.listtemplates:
+ print "Available templates:"
+ for i in available_templates:
+ print " %s" % i
+ sys.exit(0)
+ if options.template not in available_templates:
+ print "%s not an available template" % options.template
+ sys.exit(1)
+ # ask for FAS login
+ print "Login to FAS:"
+ print "Username:",
+ username = raw_input()
+ password = getpass()
+ if options.username == "":
+ options.username = username
+ infodict = information.get_information(username, password,
+ options.username)
+ # setup default content
+ name = infodict['name']
+ title = infodict['title']
+ if infodict['gpgid'] == None:
+ gpg = ''
+ else:
+ gpg = "GPG key ID: %s" % infodict['gpgid']
+ if infodict['irc'] == None:
+ lines = [infodict['email'],
+ infodict['phone'],
+ infodict['url'],
+ '',
+ gpg,
+ '']
+ else:
+ lines = [infodict['email'],
+ infodict['phone'],
+ infodict['irc']+" on irc.freenode.net",
+ infodict['url'],
+ '',
+ "GPG key ID: "+infodict['gpgid']]
+ done_editing = False
+ while not done_editing:
+ print "Current business card layout:"
+ print " +"+"-"*61+"+"
+ print " n "+cmdline_card_line(name)
+ print " t "+cmdline_card_line(title)
+ print " "+cmdline_card_line('')
+ for i in range(6):
+ print (" %i " % i)+cmdline_card_line(lines[i])
+ print " "+cmdline_card_line('')
+ print " "+cmdline_card_line('')
+ print " "+cmdline_card_line('fedora'+' '*17+\
+ 'freedom | friends | features | first')
+ print " +"+"-"*61+"+"
+ print "Enter a line number to edit, or [y] to accept:",
+ lineno = raw_input()
+ if lineno == "" or lineno == "y":
+ done_editing = True
+ else:
+ print ("Enter new data for line %s:" % lineno),
+ newdata = raw_input()
+ if lineno == 'n':
+ name = newdata
+ elif lineno == 't':
+ title = newdata
+ elif lineno == '0' or lineno == '1' or lineno == '2' or \
+ lineno == '3' or lineno == '4' or lineno == '5':
+ lines[int(lineno)] = newdata
+ # generate front of business card
+ print "Generating front...",
+ sys.stdout.flush()
+ xml = generate.gen_front(name, title, lines, options.template)
+ if options.output == "svg":
+ export.svg_to_file(xml, options.username+'-front.'+options.output)
+ else:
+ export.svg_to_pdf_png(xml, options.username+'-front.'+options.output,
+ options.output, options.dpi)
+ # generate back of business card
+ print "Generating back...",
+ sys.stdout.flush()
+ xml = generate.gen_back(options.template)
+ if options.output == "svg":
+ export.svg_to_file(xml, options.username+'-back.'+options.output)
+ else:
+ export.svg_to_pdf_png(xml, options.username+'-back.'+options.output,
+ options.output, options.dpi)
+ print "Done."
+ sys.stdout.flush()