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])
