Código: Seleccionar todo
# -*- coding: iso-8859-1 -*-
# Empaquetador de extensiones python para OOo
import sys
import zipfile
import os
import os.path
import tempfile
class Empaquetador:
def __init__(self, dir):
# Primero comprobamos que el path pasado sea un directorio
if os.path.isdir(dir):
# separamos la cabecera del nombre del directorio en si
(parent, self.paquete) = os.path.split(dir)
# Creamos el archivo comprimido
self.zipfile = zipfile.ZipFile(self.paquete+'.pkg', 'w')
# Vamos al directorio padre del paquete
os.chdir(parent)
# Listamos el contenido del directorio del paquete ...
for fich in os.listdir(dir):
# ... y añadimos cada fichero al zip
self.zipfile.write(os.path.join(self.paquete, fich))
self.grabaMeta()
self.zipfile.close()
def grabaMeta(self):
'Escribe el fichero manifest.xml en el directorio META-INF'
# obtener el directorio temporal
tmp = tempfile.gettempdir()
#ir al directorio temporal
os.chdir(tmp)
# Crear ahí el directorio META-INF
os.mkdir('META-INF')
# Escribir el xml
fo = file(os.path.join('META-INF','manifest.xml'), 'w')
fo.write('<?xml version="1.0" encoding="UTF-8"?>\n')
fo.write('<!DOCTYPE manifest:manifest PUBLIC "-//OpenOffice.org//DTD Manifest 1.0//EN" "Manifest.dtd">\n')
fo.write('<manifest:manifest xmlns:manifest="http://openoffice.org/2001/manifest">\n')
fo.write('<manifest:file-entry manifest:media-type="application/vnd.sun.star.framework-script" manifest:full-path="%s"/>\n' % self.paquete)
fo.write('</manifest:manifest>')
fo.close()
# añadirlo al fichero zip
self.zipfile.write(fo.name)
# borrar el fichero xml de la carpeta temporal
os.remove(fo.name)
# borrar el directorio de la carpeta temporal
os.rmdir('META-INF')
if len(sys.argv) != 2:
print "uso: %s directorio_del_paquete"
sys.exit(-1)
p = Empaquetador(sys.argv[1])