[Erp5-report] r42846 rafael - in /erp5/trunk/utils/erp5.utils.dists: ./ src/ src/erp5/ src/...

nobody at svn.erp5.org nobody at svn.erp5.org
Mon Jan 31 20:07:54 CET 2011


Author: rafael
Date: Mon Jan 31 20:07:53 2011
New Revision: 42846

URL: http://svn.erp5.org?rev=42846&view=rev
Log:
Initial Commit.

Added:
    erp5/trunk/utils/erp5.utils.dists/CHANGES.txt   (with props)
    erp5/trunk/utils/erp5.utils.dists/README.txt   (with props)
    erp5/trunk/utils/erp5.utils.dists/setup.py
    erp5/trunk/utils/erp5.utils.dists/src/
    erp5/trunk/utils/erp5.utils.dists/src/erp5/
    erp5/trunk/utils/erp5.utils.dists/src/erp5/__init__.py
    erp5/trunk/utils/erp5.utils.dists/src/erp5/utils/
    erp5/trunk/utils/erp5.utils.dists/src/erp5/utils/__init__.py
    erp5/trunk/utils/erp5.utils.dists/src/erp5/utils/dists/
    erp5/trunk/utils/erp5.utils.dists/src/erp5/utils/dists/__init__.py
    erp5/trunk/utils/erp5.utils.dists/src/erp5/utils/dists/bt5.py
    erp5/trunk/utils/erp5.utils.dists/src/erp5/utils/dists/genbt5list.py
    erp5/trunk/utils/erp5.utils.dists/src/erp5/utils/dists/repository.py

Added: erp5/trunk/utils/erp5.utils.dists/CHANGES.txt
URL: http://svn.erp5.org/erp5/trunk/utils/erp5.utils.dists/CHANGES.txt?rev=42846&view=auto
==============================================================================
--- erp5/trunk/utils/erp5.utils.dists/CHANGES.txt (added)
+++ erp5/trunk/utils/erp5.utils.dists/CHANGES.txt [utf8] Mon Jan 31 20:07:53 2011
@@ -0,0 +1,8 @@
+ChangeLog
+===============
+
+0.0.1 (unreleased)
+---------------------
+
+- Initial version
+  [Rafael Monnerat]

Propchange: erp5/trunk/utils/erp5.utils.dists/CHANGES.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Added: erp5/trunk/utils/erp5.utils.dists/README.txt
URL: http://svn.erp5.org/erp5/trunk/utils/erp5.utils.dists/README.txt?rev=42846&view=auto
==============================================================================
    (empty)

Propchange: erp5/trunk/utils/erp5.utils.dists/README.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Added: erp5/trunk/utils/erp5.utils.dists/setup.py
URL: http://svn.erp5.org/erp5/trunk/utils/erp5.utils.dists/setup.py?rev=42846&view=auto
==============================================================================
--- erp5/trunk/utils/erp5.utils.dists/setup.py (added)
+++ erp5/trunk/utils/erp5.utils.dists/setup.py [utf8] Mon Jan 31 20:07:53 2011
@@ -0,0 +1,40 @@
+from setuptools import setup, find_packages
+from setuptools import setup, find_packages
+import os
+
+name = "erp5.utils.dists"
+version = '0.0.1'
+
+def read(*rnames):
+  return open(os.path.join(os.path.dirname(__file__), *rnames)).read()
+
+long_description=( read('README.txt')
+                   + '\n' +
+                   read('CHANGES.txt')
+                 )
+
+setup(
+  name = name,
+  version = version,
+  author = 'Rafael Monnerat',
+  author_email = 'rafael at nexedi.com',
+  description = 
+    "",
+  long_description = long_description,
+  license = "ZPL 2.1",
+  keywords = "erp5 bt5 distribute",
+  classifiers = [
+    "License :: OSI Approved :: Zope Public License",
+    "Framework :: Buildout",
+  ],
+
+  package_dir = {'': 'src'},
+  packages = find_packages('src'),
+  namespace_packages = ['erp5', 'erp5.utils'],
+  include_package_data = True,
+  install_requires = [],
+  entry_points = {
+     'console_scripts' : ['bt5_repository_builder = erp5.utils.dists:builder',
+                          'bt5_genbt5list = erp5.utils.dists:genlist']
+    }
+  )

Added: erp5/trunk/utils/erp5.utils.dists/src/erp5/__init__.py
URL: http://svn.erp5.org/erp5/trunk/utils/erp5.utils.dists/src/erp5/__init__.py?rev=42846&view=auto
==============================================================================
--- erp5/trunk/utils/erp5.utils.dists/src/erp5/__init__.py (added)
+++ erp5/trunk/utils/erp5.utils.dists/src/erp5/__init__.py [utf8] Mon Jan 31 20:07:53 2011
@@ -0,0 +1,6 @@
+# See http://peak.telecommunity.com/DevCenter/setuptools#namespace-packages
+try:
+    __import__('pkg_resources').declare_namespace(__name__)
+except ImportError:
+    from pkgutil import extend_path
+    __path__ = extend_path(__path__, __name__) 

Added: erp5/trunk/utils/erp5.utils.dists/src/erp5/utils/__init__.py
URL: http://svn.erp5.org/erp5/trunk/utils/erp5.utils.dists/src/erp5/utils/__init__.py?rev=42846&view=auto
==============================================================================
--- erp5/trunk/utils/erp5.utils.dists/src/erp5/utils/__init__.py (added)
+++ erp5/trunk/utils/erp5.utils.dists/src/erp5/utils/__init__.py [utf8] Mon Jan 31 20:07:53 2011
@@ -0,0 +1,6 @@
+# See http://peak.telecommunity.com/DevCenter/setuptools#namespace-packages
+try:
+    __import__('pkg_resources').declare_namespace(__name__)
+except ImportError:
+    from pkgutil import extend_path
+    __path__ = extend_path(__path__, __name__) 

Added: erp5/trunk/utils/erp5.utils.dists/src/erp5/utils/dists/__init__.py
URL: http://svn.erp5.org/erp5/trunk/utils/erp5.utils.dists/src/erp5/utils/dists/__init__.py?rev=42846&view=auto
==============================================================================
--- erp5/trunk/utils/erp5.utils.dists/src/erp5/utils/dists/__init__.py (added)
+++ erp5/trunk/utils/erp5.utils.dists/src/erp5/utils/dists/__init__.py [utf8] Mon Jan 31 20:07:53 2011
@@ -0,0 +1,8 @@
+from repository import main as repository_builder
+from genbt5list import main as list_builder
+
+def builder():
+  repository_builder()
+
+def genlist():
+  list_builder()

Added: erp5/trunk/utils/erp5.utils.dists/src/erp5/utils/dists/bt5.py
URL: http://svn.erp5.org/erp5/trunk/utils/erp5.utils.dists/src/erp5/utils/dists/bt5.py?rev=42846&view=auto
==============================================================================
--- erp5/trunk/utils/erp5.utils.dists/src/erp5/utils/dists/bt5.py (added)
+++ erp5/trunk/utils/erp5.utils.dists/src/erp5/utils/dists/bt5.py [utf8] Mon Jan 31 20:07:53 2011
@@ -0,0 +1,47 @@
+#! /usr/bin/python
+##############################################################################
+#
+# Copyright (c) 2010 Nexedi SA and Contributors. All Rights Reserved.
+#                    Rafael Monnerat <rafael at nexedi.com>
+#
+# WARNING: This program as such is intended to be used by professional
+# programmers who take the whole responsability of assessing all potential
+# consequences resulting from its eventual inadequacies and bugs
+# End users who are looking for a ready-to-use solution with commercial
+# garantees and support are strongly adviced to contract a Free Software
+# Service Company
+#
+# 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., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+##############################################################################
+import tarfile
+import os
+
+def compress_business_template(destination, source):
+  t = tarfile.open(destination, "w:gz")
+  def exclude_svn(filemane):
+    return ".svn" in filemane
+  t.add(source, exclude=exclude_svn)
+  t.close()
+
+def compress_business_template_list(destination, source):
+  """ Compress all business templates from source directory 
+      into destination directory
+  """
+  current_dir = os.getcwd()
+  os.chdir(source)
+  for bt in os.listdir("."):
+    if bt != ".svn" and os.path.isdir(bt):
+      compress_business_template("%s/%s.bt5" % (destination,bt), bt) 

Added: erp5/trunk/utils/erp5.utils.dists/src/erp5/utils/dists/genbt5list.py
URL: http://svn.erp5.org/erp5/trunk/utils/erp5.utils.dists/src/erp5/utils/dists/genbt5list.py?rev=42846&view=auto
==============================================================================
--- erp5/trunk/utils/erp5.utils.dists/src/erp5/utils/dists/genbt5list.py (added)
+++ erp5/trunk/utils/erp5.utils.dists/src/erp5/utils/dists/genbt5list.py [utf8] Mon Jan 31 20:07:53 2011
@@ -0,0 +1,163 @@
+#! /usr/bin/python
+##############################################################################
+#
+# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved.
+#                    Yoshinori Okuji <yo at nexedi.com>
+#
+# WARNING: This program as such is intended to be used by professional
+# programmers who take the whole responsability of assessing all potential
+# consequences resulting from its eventual inadequacies and bugs
+# End users who are looking for a ready-to-use solution with commercial
+# garantees and support are strongly adviced to contract a Free Software
+# Service Company
+#
+# 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., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+##############################################################################
+
+
+"""Generate repository information on Business Templates.
+"""
+
+import tarfile
+import os
+import os.path
+import sys
+import tempfile
+import shutil
+import cgi
+
+property_list = '''
+title
+version
+revision
+description
+license
+dependency_list
+provision_list
+copyright_list
+'''.strip().splitlines()
+
+bt_title_path = os.path.join('bt', 'title')
+
+def info(message):
+  """Print a message to stdout.
+  """
+  sys.stdout.write(message)
+
+def err(message):
+  """Print a message to stderr.
+  """
+  sys.stderr.write(message)
+
+def readProperty(property_dict, property_name, property_file):
+    try:
+      text = property_file.read()
+      if property_name.endswith('_list'):
+        property_dict[property_name[:-5]] = text and text.split('\n') or []
+      else:
+        property_dict[property_name] = text
+    finally:
+      property_file.close()
+
+def readBusinessTemplate(tar):
+  """Read an archived Business Template info.
+  """
+  property_dict = {}
+  for info in tar:
+    name_list = info.name.split('/')
+    if len(name_list) == 3 and name_list[1] == 'bt' and name_list[2] in property_list:
+      property_file = tar.extractfile(info)
+      property_name = name_list[2]
+      readProperty(property_dict, property_name, property_file)
+
+  return property_dict
+
+def readBusinessTemplateDirectory(dir):
+  """Read Business Template Directory info.
+  """
+  property_dict = {}
+  for property_name in property_list:
+    filename = os.path.join(dir, 'bt', property_name)
+    if os.path.isfile(filename):
+      property_file = open(filename, 'rb')
+      readProperty(property_dict, property_name, property_file)
+
+  return property_dict
+
+def generateInformation(fd):
+  os.write(fd, '<?xml version="1.0"?>\n')
+  os.write(fd, '<repository>\n')
+
+  for file in sorted(os.listdir(os.getcwd())):
+    if file.endswith('.bt5'):
+      info('Reading %s... ' % (file,))
+      try:
+        tar = tarfile.open(file, 'r:gz')
+      except tarfile.TarError:
+        err('An error happened in %s; skipping\n' % (file,))
+        continue
+      try:
+        property_dict = readBusinessTemplate(tar)
+      finally:
+        tar.close()
+    elif os.path.isfile(os.path.join(file, bt_title_path)):
+      info('Reading Directory %s... ' % (file,))
+      property_dict = readBusinessTemplateDirectory(file)
+    else:
+      continue
+    property_id_list = property_dict.keys()
+    property_id_list.sort()
+    os.write(fd, '  <template id="%s">\n' % (file,))
+    for property_id in property_id_list:
+      property_value = property_dict[property_id]
+      if type(property_value) == type(''):
+        os.write(fd, '    <%s>%s</%s>\n' % (
+              property_id, cgi.escape(property_value), property_id))
+      else:
+        for value in property_value:
+          os.write(fd, '    <%s>%s</%s>\n' % (
+                property_id, cgi.escape(value), property_id))
+    os.write(fd, '  </template>\n')
+    info('done\n')
+  os.write(fd, '</repository>\n')
+
+def main():
+  if len(sys.argv) < 2:
+    dir_list = ['.']
+  else:
+    dir_list = sys.argv[1:]
+
+  cwd = os.getcwd()
+  for d in dir_list:
+    os.chdir(d)
+    fd, path = tempfile.mkstemp()
+    try:
+      try:
+        generateInformation(fd)
+      finally:
+        os.close(fd)
+    except:
+      os.remove(path)
+      raise
+    else:
+      shutil.move(path, 'bt5list')
+      cur_umask = os.umask(0666)
+      os.chmod('bt5list', 0666 & ~cur_umask)
+      os.umask(cur_umask)
+    os.chdir(cwd)
+
+if __name__ == "__main__":
+  main()

Added: erp5/trunk/utils/erp5.utils.dists/src/erp5/utils/dists/repository.py
URL: http://svn.erp5.org/erp5/trunk/utils/erp5.utils.dists/src/erp5/utils/dists/repository.py?rev=42846&view=auto
==============================================================================
--- erp5/trunk/utils/erp5.utils.dists/src/erp5/utils/dists/repository.py (added)
+++ erp5/trunk/utils/erp5.utils.dists/src/erp5/utils/dists/repository.py [utf8] Mon Jan 31 20:07:53 2011
@@ -0,0 +1,117 @@
+#! /usr/bin/python
+##############################################################################
+#
+# Copyright (c) 2010 Nexedi SA and Contributors. All Rights Reserved.
+#                    Rafael Monnerat <rafael at nexedi.com>
+#
+# WARNING: This program as such is intended to be used by professional
+# programmers who take the whole responsability of assessing all potential
+# consequences resulting from its eventual inadequacies and bugs
+# End users who are looking for a ready-to-use solution with commercial
+# garantees and support are strongly adviced to contract a Free Software
+# Service Company
+#
+# 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., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+##############################################################################
+from optparse import OptionParser
+try:
+  from hashlib import md5
+except ImportError:
+  from md5 import new as md5
+import os
+import shutil
+import genbt5list
+from bt5 import compress_business_template_list
+
+# Lock file name
+LOCKFILE="/tmp/update_repository.lock"
+WORKDIR = "/tmp/update_repository_work"
+DOWNLOADDIR = "/tmp/update_repository_download"
+DOWNLOAD_COMMAND = "svn co --trust-server-cert --non-interactive --quiet"
+
+def load_options():
+  parser = OptionParser()
+  parser.add_option("-u", "--url", dest="url",
+                    help="write report to FILE", metavar="URL", 
+                    default="https://svn.erp5.org/repos/public/erp5/trunk/bt5,"\
+                            "https://svn.erp5.org/repos/public/erp5/trunk/products/ERP5/bootstrap")
+  
+  parser.add_option("-r", "--repository",
+                    dest="repository", default=os.getcwd(),
+                    help="don't print status messages to stdout")
+
+  parser.add_option("-d", "--download-dir",
+                     dest="downloaddir", default=DOWNLOADDIR,
+                     help="don't print statu messages to stdout")
+
+  parser.add_option("-c", "--download-cmd",
+                     dest="downloadcmd", default=DOWNLOAD_COMMAND,
+                     help="don't print status messages to stdout")
+
+  parser.add_option("-p", "--preserve-download",
+                     dest="downloadcmd", default=DOWNLOAD_COMMAND,
+                     help="don't print status messages to stdout")
+
+  return parser.parse_args()
+
+def build(url_list, destination,
+         download_dir=DOWNLOADDIR, 
+         download_cmd=DOWNLOAD_COMMAND, 
+         preserve_download=True):
+
+  if os.path.exists(LOCKFILE):
+      raise ValueError("Lock file %s exists" % LOCKFILE)
+
+  try: 
+    f = open(LOCKFILE, "w+"); f.close()
+    if not os.path.exists(download_dir):
+      os.mkdir(download_dir)
+    os.mkdir(WORKDIR)
+    for url in url_list:
+      if url != "":
+        os.chdir(download_dir)
+        repos = md5(url).hexdigest()
+        os.system("%s %s %s" % (download_cmd, url, repos))
+        compress_business_template_list(WORKDIR, repos)
+
+    ### # Publish the repository
+    for bt in os.listdir(WORKDIR):
+      bt_path = os.path.join(destination,bt)
+      if os.path.exists(bt_path):
+        os.remove(bt_path)
+      shutil.move('%s/%s' % (WORKDIR,bt), destination)
+    
+    os.chdir(destination)
+    genbt5list.main()
+  finally:
+    if os.path.exists(LOCKFILE):
+      os.remove(LOCKFILE)
+    shutil.rmtree(WORKDIR)
+    if not preserve_download:
+      shutil.rmtree(download_dir)
+  return True
+
+def main():
+  (options, args) = load_options()
+  build(url_list = options.url.split(","), 
+        destination = options.repository, 
+        download_dir=options.downloaddir,
+        download_cmd=options.downloadcmd,
+        preserve_download=False
+       )
+
+if __name__ == "__main__":
+  main()



More information about the Erp5-report mailing list