#!/usr/bin/env python
# Cormac Reynolds, January 2016: Post stdin to the LBA wiki.

from dokuwikixmlrpc import DokuWikiClient
import getpass, sys, fileinput, optparse, os


wiki = 'https://www.atnf.csiro.au/vlbi/dokuwiki/'
usage = '''%prog <wikipage>
will post text from stdin to <wikipage> on LBA wiki'''
parser = optparse.OptionParser(usage=usage, version='%prog ' + '0.1')

parser.add_option( "--user", "-u",
        type='str', dest="user", default=None,
        help='wiki username')
parser.add_option( "--password", "-p",
        type='str', dest="password", default=None,
        help='wiki password')
parser.add_option( "--overwrite", "-o",
        action="store_false", dest="append", default=True,
        help="Overwrite existing content (default appends)")




(options, args) = parser.parse_args()
if len(args) < 1:
    parser.print_help()
    parser.error("Give a wiki output page")

user = options.user
password = options.password

wikipage = args[0]

#print "Enter the wiki text (EOF=^D^D):"
text = str()
for line in fileinput.input('-'):
    text += line
fileinput.close()

# user/pass can be interactive if not receiving from pipe
if os.isatty(sys.stdin.fileno()):
    while True:
        try:
            if not user:
                user = input('Enter wiki username: ')
            if not password:
                password = getpass.getpass()
            doku = DokuWikiClient(wiki, user, password)
            break
        except KeyboardInterrupt:
            sys.exit()
        except:
            sys.stderr.write("Couldn't connect to wiki, try again\n")
            user = str()
            password = str()
else:
    try:
        doku = DokuWikiClient(wiki, user, password)
    except:
        sys.stderr.write("Couldn't connect to wiki, check username and passwd\n")
        raise

if options.append:
    oldtext = doku.page(wikipage)
    text = oldtext + "\n" + text
    print (text)

doku.put_page(wikipage, text, summary='postwiki.py', minor=False)
