Script para empaquetar Extensiones
Publicado: Dom Dic 21, 2008 8:36 pm
Quizas este post seria algo entre tutoria, Macros y API y este foro. Pero creo que en sera util. Este es un script para auotmatizar el empaquetamiento de codigo. Siguiendo las especificaciones de esta pagina, podemos crear una extension con este codigo hecho en python.
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])