Kall p� setImage i Python

F�lgende Python-skript er sendt inn av Steinar Kleven (HiST), og bruker setImage i BAS for � tilbakeskrive bilder til FS. Man kan oppgi enkeltbilder, eller *.jpg for � sende inn i bulk. Brukernavn og passord m� endres (disse er for enkelhets skyld satt rett inn i skriptet under).

#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-

"""
update_FS_images.py - Demonstrate how to set images in FS (Felles Studentsystem) using webservices.
"""

__version__ = "$Revision: 00000001 $"

__author__ = "Steinar Kleven "
__date__ = "21. June 2010"
__license__ = "Public Domain"

import getopt
import sys
import os
import glob

import logging
# logging.basicConfig(level=logging.INFO)
# logging.getLogger('suds.client').setLevel(logging.DEBUG)
# logging.getLogger('suds.transport').setLevel(logging.DEBUG)
# logging.getLogger('suds.xsd.schema').setLevel(logging.DEBUG)
# logging.getLogger('suds.wsdl').setLevel(logging.DEBUG)

import suds
from suds.transport.https import HttpAuthenticated
from suds.client import Client

def get_file_list(values):
    files = []
    for val in values: 
        files.extend(glob.glob(val))
    return files    
    
def set_image(client, fnr, filename):
    base64data = {'image' : open(filename).read().encode('base64')}
    try:
        reply = client.service.setImage(fnr, base64data)
        if reply != "OK":
           logging.warning("Setting image for %s failed: %s" % (fnr, reply))
    except suds.WebFault as detail:
        print detail 

def upload_images(client, fileglobs):
    filelist = get_file_list(fileglobs)
    if filelist == []:
        logging.warning("No files found.")
    for filename in filelist:
        if os.path.isfile(filename):
            fnr = os.path.basename(filename).split('.')[0]
            set_image(client, fnr, filename)
        else:
            logging.warning("Skipping '"+filename+"', not a file.")    

def usage(msg):
    if msg:
        print msg
    else:
        print "Usage: update_FS_images.py fileglob"
        print "Examples:\n\tupdate_FS_images.py 01234567123.jpg\n\tupdate_FS_images.py images/*.jpg"    
    exit(1)

def main():

    options, args = getopt.getopt(sys.argv[1:], "")
    if args == []:
        usage(None)

    url = 'https://fsws.usit.no/fsservices/bas?wsdl'
    credentials = dict(username='username', password='password')
    t = HttpAuthenticated(**credentials)
    client = Client(url, location="https://fsws.usit.no/fsservices/bas", transport=t)
    upload_images(client, args)

if __name__ == "__main__":
  main()