X-Git-Url: https://scm.cri.ensmp.fr/git/photoprint.git/blobdiff_plain/ccaba0f54cbd41250107d36a49154353425da8b3..b521f0db73266a7bd6b69e6a9891046a03c482ee:/Products/photoprint/_utils/import_printing_list.py diff --git a/Products/photoprint/_utils/import_printing_list.py b/Products/photoprint/_utils/import_printing_list.py new file mode 100755 index 0000000..245e1e1 --- /dev/null +++ b/Products/photoprint/_utils/import_printing_list.py @@ -0,0 +1,119 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +####################################################################################### +# Copyright © 2009 Benoît Pin # +# Plinn - http://plinn.org # +# # +# # +# 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. # +####################################################################################### +""" +Downloads RSS based order description and make a local human readable file tree +to facilitate printing tasks. + +""" + + +from urllib2 import HTTPBasicAuthHandler +from urllib2 import build_opener +from urllib2 import urlopen +from xml.dom.minidom import parseString +from xml.dom import Node +from os import mkdir, chdir +from os.path import abspath, join, expanduser, exists +from getpass import getpass + +ELEMENT_NODE = Node.ELEMENT_NODE + +def getHttpOpener(url, login, password) : + auth_handler = HTTPBasicAuthHandler() + host = '/'.join(url.split('/', 3)[:3]) + auth_handler.add_password('Zope', host, login, password) + opener = build_opener(auth_handler) + return opener + +def getXml(url, opener) : + url = '%s?disable_cookie_login__=1' % url + xml = opener.open(url).read() + return xml + +def genFileTree(url, login, password, dest) : + opener = getHttpOpener(url, login, password) + xml = getXml(url, opener) + d = parseString(xml) + doc = d.documentElement + + channel = doc.getElementsByTagName('channel')[0] + orderName = getContentOf(channel, 'title') + + chdir(dest) + mkdir(orderName) + + for item in iterElementChildsByTagName(d.documentElement, 'item') : + ppTitle = getContentOf(item, 'pp:title') + ppQuantity = getContentOf(item, 'pp:quantity') + + printTypePath = join(orderName, ppTitle) + printQuantityPath = join(orderName, ppTitle, ppQuantity) + + if not exists(printTypePath) : + mkdir(printTypePath) + infoFile = open(join(printTypePath, 'info.txt'), 'w') + infoFile.write(getContentOf(item, 'pp:title')) + infoFile.write('\n\n') + infoFile.write(getContentOf(item, 'pp:description')) + infoFile.close() + + if not exists(printQuantityPath) : + mkdir(printQuantityPath) + + hdUrl = '%s?disable_cookie_login__=1' % getContentOf(item, 'link') + localFileName = getContentOf(item, 'title') + print localFileName + localFile = open(join(printQuantityPath, localFileName), 'w') + localFile.write(opener.open(hdUrl).read()) + localFile.close() + +def iterElementChildsByTagName(parent, tagName) : + child = parent.firstChild + while child : + if child.nodeType == ELEMENT_NODE and child.tagName == tagName : + yield child + child = child.nextSibling + +def getContentOf(parent, tagName) : + child = parent.firstChild + while child : + if child.nodeType == ELEMENT_NODE and child.tagName == tagName : + return child.firstChild.nodeValue.encode('utf-8') + child = child.nextSibling + + raise ValueError("%r tag not found" % tagName) + + +def main() : + url = raw_input('url flux xml de la commande : ') + login = raw_input('login : ') + password = getpass('mot de passe : ') + dest = raw_input('cible [~/Desktop]') + if not dest : + dest = expanduser('~/Desktop') + + genFileTree(url, login, password, dest) + +if __name__ == '__main__' : + main() + +