コード例 #1
0
ファイル: __init__.py プロジェクト: jpcw/minitage.paste
    def pre(self, command, output_dir, vars):
        """register catogory, and roll in common,"""
        if not 'with_ploneproduct_paasync' in vars:
            vars['with_ploneproduct_paasync'] = False
        if not 'with_ploneproduct_fss' in vars:
            vars['with_ploneproduct_fss'] = False
        #if vars['with_ploneproduct_ploneappblob']:
        #    vars['with_ploneproduct_fss'] = False
        vars['plonesite'] = common.SPECIALCHARS.sub('', vars['project'])
        vars['major'] = int(vars['plone_version'][0])
        vars['sources_url'] = self.get_sources_url(vars)
        #vars['versions_url'] = self.get_versions_url(vars)
        #vars['zope2_url'] = self.get_zope2_url(vars)
        #vars['ztk_url'] = self.get_ztk_url(vars)
        if not vars.get('ztk_url', None):
            vars['ztk_url'] = False
        vars['sane_name'] = common.SPECIALCHARS.sub('', vars['project'])
        vars['category'] = 'zope'
        vars['includesdirs'] = ''
        vars['hr'] = '#' * 120
        common.Template.pre(self, command, output_dir, vars)
        vars['mode'] = vars['mode'].lower().strip()

        # transforming eggs requirements as lists
        for var in self.sections_mappings:
            if var in vars:
                vars[var] = [a.strip() for a in vars[var].split(',')]

        vars['autocheckout'] = []
        for var in vars:
            if var.startswith('with_autocheckout') and vars[var]:
                vn = var.replace('with_autocheckout_', '')
                vars['autocheckout'].append(
                    self.plone_sources[vn]['name']
                )

        for var in self.plone_sources:
            if self.plone_sources[var].get('autocheckout', '') == 'y':
                if not self.plone_sources[var]['name'] in vars['autocheckout']:
                    if ((True in [vars.get(o, False)
                                  for o in self.plone_sources[var]['options']])
                        and (self.plone_sources[var]['name'] not in vars['autocheckout'])):
                        vars['autocheckout'].append(
                            self.plone_sources[var]['name']
                        )

        lps = copy.deepcopy(self.plone_sources)
        for item in self.plone_sources:
            col = self.plone_sources[item]
            found = False
            for option in col['options']:
                if vars.get(option, False):
                    found = True
                    break
            if not found:
                del lps[item]
        vars['plone_sources'] = lps

        # ZODB3 from egg
        if vars['major'] < 4:
            vars['additional_eggs'].append('#ZODB3 is installed as an EGG!')
            vars['additional_eggs'].append('ZODB3')

        # plone system dependencies
        if vars['inside_minitage']:
            for i in ['libxml2', 'libxslt', 'pil-1', 'libiconv']:
                vars['opt_deps'] += ' %s' %  search_latest('%s.*' % i, vars['minilays'])

        # databases
        minitage_dbs = ['mysql', 'postgresql']
        for db in minitage_dbs:
            if vars['with_database_%s' % db] and vars['inside_minitage']:
                vars['opt_deps'] += ' %s' % search_latest('%s-\d\.\d*'% db, vars['minilays'])
        # databases
        if vars['with_binding_mapscript'] and vars['inside_minitage']:
            vars['opt_deps'] += ' %s' % search_latest('mapserver-\d\.\d*', vars['minilays'])
        # collective.geo
        if 'with_ploneproduct_cgeo' in vars:
            if vars['with_ploneproduct_cgeo'] and vars['inside_minitage']:
                for i in ('geos-\d\.\d*','gdal-\d\.\d*'):
                    vars['opt_deps'] += ' %s' % search_latest(i, vars['minilays'])
        # tesseact
        if vars['with_binding_tesseract'] and vars['inside_minitage']:
            for i in ('tesseract-\d','leptonica-\d'):
                vars['opt_deps'] += ' %s' % search_latest(i, vars['minilays'])
        # pyqt
        vars['pyqt'] = ''
        if vars['with_binding_pyqt'] and vars['inside_minitage']:
            vars['opt_deps'] += ' %s' % search_latest('swiglib-\d\.\d+', vars['minilays'])
            for i in ('pyqt-\d\.\d+','sip-\d\.\d+'):
                vars['opt_deps'] += ' %s' % search_latest(i, vars['minilays'])
                vars['pyqt'] += '\n   %s' %  (
                    '${buildout:directory}/../../'
                    'eggs/%s/parts'
                    '/site-packages-%s/site-packages-%s' % (
                        search_latest(i, vars['minilays']),
                        vars['pyver'],
                        vars['pyver'],
                    )
                )

        # openldap
        if vars['with_binding_ldap'] and vars['inside_minitage']:
            cs = search_latest('cyrus-sasl-\d\.\d*', vars['minilays'])
            vars['opt_deps'] += ' %s %s %s' % (
                search_latest('openldap-\d\.\d*', vars['minilays']),
                search_latest('openssl-1', vars['minilays']),
                cs
            )
            vars['includesdirs'] = '\n    %s'%  os.path.join(
                vars['mt'], 'dependencies', cs, 'parts', 'part', 'include', 'sasl'
            )

        # haproxy
        if vars['with_haproxy'] and vars['inside_minitage']:
            vars['opt_deps'] += ' %s' % search_latest('haproxy-\d\.\d*', vars['minilays'])
        # htmldoc
        if vars['with_ploneproduct_awspdfbook'] and vars['inside_minitage']:
            vars['opt_deps'] += ' %s' % search_latest('htmldoc-\d\.\d*', vars['minilays'])

        # relstorage
        if 'relstorage' in vars['mode']:
            vars['additional_eggs'].append('#Relstorage')
            vars['additional_eggs'].append('Relstorage')
            for db in [var.replace('with_database_', '')
                        for var in vars
                        if 'with_database_' in var]:
                if db in vars['relstorage_type']:
                    vars['additional_eggs'].extend(
                        [a
                         for a in eggs_mappings['with_database_%s'%db]
                         if not a in vars['additional_eggs']
                        ]
                    )
                    if db in minitage_dbs and vars['inside_minitage']:
                        vars['opt_deps'] += ' %s' % search_latest('%s-\d\.\d*'% db, vars['minilays'])

        # do we need some pinned version
        vars['plone_versions'] = []
        pin_added = []
        for var in self.versions_mappings:
            vars['plone_versions'].append(('# %s' % var, '',))
            vmap = self.versions_mappings[var]
            vmap.sort()
            for pin in vmap:
                if not pin in pin_added:
                    pin_added.append(pin)
                    vars['plone_versions'].append(pin)

        if vars["with_checked_versions"]:
            for var in self.checked_versions_mappings:
                if vars.get(var, False):
                    vars['plone_versions'].append(('# %s' % var, '',))
                    vmap = self.checked_versions_mappings[var].keys()
                    vmap.sort()
                    for kpin in vmap:
                        pin = (kpin, self.checked_versions_mappings[var][kpin])
                        if not pin in pin_added:
                            pin_added.append(pin)
                            vars['plone_versions'].append(pin)

        if not vars['mode'] in ['zodb', 'relstorage', 'zeo']:
            raise Exception('Invalid mode (not in zeo, zodb, relstorage')
        if not os.path.exists(self.output_dir):
            os.makedirs(self.output_dir)

        for section in self.sections_mappings:
            for var in [k 
                        for k in self.sections_mappings[
                            section] 
                        if vars.get(k, '')]:
                # skip plone products which are already in the product 's setup.py
                if vars['with_generic'] and section == 'additional_eggs':
                    continue
                if not section == 'plone_zcml':
                    vars[section].append('#%s'%var)
                for item in self.sections_mappings[section][var]:
                   if section == 'plone_zcml':
                       item = '-'.join(item)
                   if not '%s\n' % item in vars[section]:
                       if not item in vars[section]:
                           vars[section].append(item)


        package_slug_re = re.compile('(.*)-(meta|configure|overrides)', common.reflags)
        def zcmlsort(obja, objb):
            obja = re.sub('^#', '', obja).strip()
            objb = re.sub('^#', '', objb).strip()
            ma, mb = package_slug_re.match(obja), package_slug_re.match(objb)
            if not obja:
                return 1
            if not objb:
                return -1
            apackage, aslug = (obja, 'configure')
            if ma:
                apackage, aslug = ma.groups()
            bpackage, bslug = (objb, 'configure')
            if mb:
                bpackage, bslug = mb.groups()
            aorder = self.zcml_loading_order.get((apackage, aslug), 50000)
            border = self.zcml_loading_order.get((bpackage, bslug), 50000)
            return aorder - border

        # order zcml
        vars["plone_zcml"].sort(zcmlsort)
        vars["plone_zcml"] = [a for a in  vars["plone_zcml"] if a.strip()]

        # add option marker
        for option in self.zcml_mappings:
            for p in self.zcml_mappings[option]:
                id = '-'.join(p)
                if id in vars['plone_zcml']:
                    i = vars['plone_zcml'].index(id)
                    vars['plone_zcml'][i:i] = ['#%s' % option]
        vars['plone_zcml'][0:0] = ['']

        cwd = os.getcwd()
        if not os.path.exists(self.output_dir):
            self.makedirs(self.output_dir)
        # install also the official template from ZopeSkel, setting its variables
        vars['plone_products_install'] = ''
        vars['zope2_install'] = ''
        vars['debug_mode'] = 'off'
        vars['verbose_security'] = 'off'

        # running default template (like plone3_buildout) and getting stuff from it.
        ep = None
        try:
            if not getattr(self, 'default_template_package', None):
                raise NoDefaultTemplateError('')

            epk = pkg_resources.load_entry_point(
                self.default_template_package,
                self.default_template_epn,
                self.default_template_templaten
            )
            ep = epk(self)
            coo = command.options.overwrite
            command.options.overwrite = True
            def null(a, b, c):
                pass
            ep.post = null
            ep.check_vars(vars, command)
            ep.run(command, vars['path'], vars)
            command.options.overwrite = coo
        except NoDefaultTemplateError, e:
            pass
コード例 #2
0
ファイル: __init__.py プロジェクト: minitage/minitage.paste
    def pre(self, command, output_dir, vars):
        """register catogory, and roll in common,"""
        vars['category'] = 'django'
        common.Template.pre(self, command, output_dir, vars)
        minitage_dbs = ['mysql', 'postgresql', 'sqlite']
        minilays = os.path.join(self.output_dir, 'minilays')
        cwd = os.getcwd()
        if not os.path.exists(self.output_dir):
            self.makedirs(self.output_dir)

        if vars['inside_minitage']:
            deps = [
                'zlib-1.*',
                'freetype-2',
                'libxml2-2.*',
                'libiconv.*',
                'libxslt-1.*',
                'fontconfig-2.\d*',
            ]
            #if vars['with_database_mysql']:
            #    deps.extend(['mysql-\d.\d*'],)
            #if vars['with_database_postgresql']:
            #   deps.extend(['postgresql-\d.\d'],)
            #if (vars['with_database_sqlite']
            #    or (
            #        not vars['with_database_postgresql']
            #        and not vars['with_database_mysql'])
            #   ):
            #  deps.extend(['sqlite-\d.\d',])
            ## openldap
            #if vars['with_binding_ldap']:
            #    cs = search_latest('cyrus-sasl-\d\.\d*', vars['minilays'])
            #    deps.extend(['openldap-\d\.\d*', cs])
            #    vars['includesdirs'] = '\n    %s'%  os.path.join(
            #        vars['mt'], 'dependencies', cs, 'parts', 'part', 'include', 'sasl'
            #    )

            # haproxy
            #if vars['with_haproxy']:
            #    deps.extend(['haproxy-\d\.\d*'])
            #if vars["with_binding_lxml"]:
            #    deps.extend(['libxml2-\d.\d*', 'libxslt-1.\d*'])
            #if vars["with_gis_gdal"]:
            #    vars['opt_deps'] += ' gdal-1'
            #    deps.extend(['pixman-0\d*',])
            #if vars["with_gis_pgrouting"]:
            #    deps.extend(['pgrouting-1.\d*',])
            #if vars["with_gis_mapnik"]:
            #    #deps.extend(['py-mapnik-\d.\d*', 'mapnik-\d.\d*',])
            #    deps.extend(['mapnik-\d.\d*',])
            #    deps.extend(['boost-python-.*',])
            #if vars["with_binding_cairo"]:
            #    vars['opt_deps'] += ' cairo-1.12 cairomm-1'
            #if vars["with_binding_pil"]:
            #    vars['opt_deps'] += ' libpng-1'
            #    deps.extend(['pil-\d.\d.\d*', ])
            #if vars['with_gis_mapscript']:
            #    deps.extend(['mapserver-\d\.\d*',])
            #if vars["with_binding_memcache"]:
            #    deps.extend(['libmemcache-\d.\d*',])
            for dep in deps:
                vars['opt_deps'] += ' %s' % search_latest(dep, vars['minilays'])

        vars['sane_name'] = common.SPECIALCHARS.sub('', vars['project'])
        vars['includesdirs'] = ''
        vars['hr'] = '#' * 120

        # transforming eggs requirements as lists
        for var in self.sections_mappings:
            if var in vars:
                vars[var] = [a.strip() for a in vars[var].split(',')]

        #vars['autocheckout'] = []
        #for var in vars:
        #    if var.startswith('with_autocheckout') and vars[var]:
        #        vn = var.replace('with_autocheckout_', '')
        #        vars['autocheckout'].append(
        #            self.plone_sources[vn]['name']
        #        )
        #
        #for var in self.plone_sources:
        #    if self.plone_sources[var].get('autocheckout', '') == 'y':
        #        if not self.plone_sources[var]['name'] in vars['autocheckout']:
        #            if ((True in [vars.get(o, False)
        #                          for o in self.plone_sources[var]['options']])
        #                and (self.plone_sources[var]['name'] not in vars['autocheckout'])):
        #                vars['autocheckout'].append(
        #                    self.plone_sources[var]['name']
        #                )
        #
        #lps = copy.deepcopy(self.plone_sources)
        #for item in self.plone_sources:
        #    col = self.plone_sources[item]
        #    found = False
        #    for option in col['options']:
        #        if vars.get(option, False):
        #            found = True
        #            break
        #    if not found:
        #        del lps[item]
        #vars['plone_sources'] = lps


        # Django core eggs
        vars['additional_eggs'].append('#Django')
        vars['additional_eggs'].extend(base_django_eggs)

        # databases
        #for db in [var.replace('with_database_', '')
        #            for var in vars
        #            if 'with_database_' in var
        #                and vars[var]]:
        #    if not db in ['sqlite',]:
        #        vars['additional_eggs'].extend(
        #            [a
        #             for a in eggs_mappings['with_database_%s'%db]
        #             if not a in vars['additional_eggs']
        #            ]
        #        )
        # pyqt
        #vars['pyqt'] = ''
        #if vars['with_binding_pyqt'] and vars['inside_minitage']:
        #    vars['opt_deps'] += ' %s' % search_latest('swiglib-\d\.\d+', vars['minilays'])
        #    for i in ('pyqt-\d\.\d+','sip-\d\.\d+'):
        #        vars['opt_deps'] += ' %s' % search_latest(i, vars['minilays'])
        #        vars['pyqt'] += '\n   %s' %  (
        #            '${buildout:directory}/../../'
        #            'eggs/%s/parts'
        #            '/site-packages-%s/site-packages-%s' % (
        #                search_latest(i, vars['minilays']),
        #                vars['pyver'],
        #                vars['pyver'],
        #            )
        #        )

        ## openldap
        #if vars['with_binding_ldap'] and vars['inside_minitage']:
        #    cs = search_latest('cyrus-sasl-\d\.\d*', vars['minilays'])
        #    vars['opt_deps'] += ' %s %s' % (
        #        search_latest('openldap-\d\.\d*', vars['minilays']),
        #        cs
        #    )
        #    vars['includesdirs'] = '\n    %s'%  os.path.join(
        #        vars['mt'], 'dependencies', cs, 'parts', 'part', 'include', 'sasl'
        #    )

        # do we need some pinned version
        #vars['plone_versions'] = []
        #for var in self.versions_mappings:
        #    vars['plone_versions'].append(('# %s' % var, '',))
        #    for pin in self.versions_mappings[var]:
        #        vars['plone_versions'].append(pin)

        #if vars["with_checked_versions"]:
        #    for var in self.checked_versions_mappings:
        #        if vars.get(var, False):
        #            vars['plone_versions'].append(('# %s' % var, '',))
        #            for pin in self.checked_versions_mappings[var]:
        #                vars['plone_versions'].append((pin, self.checked_versions_mappings[var][pin]))

        if not os.path.exists(self.output_dir):
            os.makedirs(self.output_dir)

        vars['framework_apps'] = []
        for section in self.sections_mappings:
            for var in [k for k in self.sections_mappings[section] if vars.get(k, '')]:
                vars[section].append('#%s'%var)
                for item in self.sections_mappings[section][var]:
                   if not '%s\n' % item in vars[section]:
                       if not item in vars[section]:
                           vars[section].append(item)

        # be sure our special python is in priority
        vars['opt_deps'] = re.sub('\s*%s\s*' % self.python, ' ', vars['opt_deps'])
        vars['opt_deps'] += " %s" % self.python
        vars['opt_deps'] += " %s" % self.python
        opt_deps, popt_deps = [], vars['opt_deps'].split()
        for i in popt_deps:
            if not i in opt_deps:
                opt_deps.append(i)
        vars['opt_deps'] = ' '.join(opt_deps)

        # http serverS ports
        vars['http_port1'] = int(vars['http_port']) + 1
        vars['http_port2'] = int(vars['http_port']) + 2
        vars['http_port3'] = int(vars['http_port']) + 3
        vars['http_port4'] = int(vars['http_port']) + 4
        vars['http_port5'] = int(vars['http_port']) + 5
        vars['http_port6'] = int(vars['http_port']) + 6
        vars['http_port7'] = int(vars['http_port']) + 7
        vars['http_port8'] = int(vars['http_port']) + 8
        vars['http_port9'] = int(vars['http_port']) + 9
        vars['http_port10'] = int(vars['http_port']) + 10
        vars['http_port11'] = int(vars['http_port']) + 11
        vars['http_port12'] = int(vars['http_port']) + 12
        vars['http_port13'] = int(vars['http_port']) + 13
        vars['running_user'] = common.running_user
        vars['instances_description'] = common.INSTANCES_DESCRIPTION % vars
        #if not vars['reverseproxy_aliases']:
        #    vars['reverseproxy_aliases'] = ''
        #vars['sreverseproxy_aliases'] = vars['reverseproxy_aliases'].split(',')
        vars['ndot'] = '.'
        for i in ['rabbitmq', 'mysql', 'mongo']:
            if vars['with_django_%s'%i]:
                vars['%s_comment'%i] = ''
            else:
                vars['%s_comment'%i] = '#'
コード例 #3
0
ファイル: __init__.py プロジェクト: jpcw/minitage.paste
    def pre(self, command, output_dir, vars):
        common.Template.pre(self, command, output_dir, vars)
        vars['sharp'] = '#'
        vars['linux'] = 'linux' in sys.platform
        if not 'opt_deps' in vars:
            vars['opt_deps'] = ''
        if vars['inside_minitage']:
            if not self.special_output_dir:
                vars['path'] = os.path.join(
                    self.output_dir,
                    vars['category'],
                    vars['project'],
                )
            else:
                vars['path'] = self.output_dir
        else:
            vars['category'] = ''
            if not self.special_output_dir:
                vars['path'] = os.path.join(self.output_dir, vars['project'])
            else:
                vars['path'] = self.output_dir
        if not self.special_output_dir:
            vars['project_dir'] = vars['project']
            vars['category_dir'] = vars['category']
        else:
             vars['project_dir'] = ''
             vars['category_dir'] = ''
        interpreter, pyver = None, None
        pythons = {
            'python2.4': '2.4',
            'python2.5': '2.5',
            'python2.6': '2.6',
            'python2.7': '2.7',
            'python3.0': '3.0',
            'python3.1': '3.1',
            'python3.2': '3.2',
        }
        python = getattr(self, 'python', None)
        if vars['inside_minitage']:
            latest_python = None
            dsearch_latest = {'py-libxslt.*': 'xslt',
                             'py-libxml2.*': 'xml2',
                             'python-\d.\d': 'latest_python'}
            vars['minilays'] = minilays = os.path.join(vars['mt'], 'minilays')
            xml2, xslt = [search_latest(a, minilays)
                                  for a in (
                                      'py-libxml2-.', 
                                      'py-libxslt-.*', 
                                      #'py-mapnik-.*'
                                  )]
            for regex in dsearch_latest.keys():
                minibuild = search_latest(regex, minilays)
                stmt = '%s=\'%s\'' % (dsearch_latest[regex], minibuild)
                exec  stmt
                del dsearch_latest[regex]
            if (not python) and latest_python:
                python = latest_python
            pyver = pythons[python.replace('-', '')]
        else:
            if not python:
                python = vars['python']
            else:
                python = python.replace('-', '')
                pyver = pythons[python]
            interpreter = which(python)
            executable_version = os.popen(
                '%s -c "%s"' % (
                    interpreter,
                    'import sys;print sys.version[:3]'
                )
            ).read().replace('\n', '')
            executable_prefix = os.path.abspath(
                subprocess.Popen(
                    [interpreter, '-c', 'import sys;print sys.prefix'],
                    stdin=subprocess.PIPE, stdout=subprocess.PIPE,
                    close_fds=True).stdout.read().replace('\n', '')
            )
            if pyver and (executable_version != pyver):
                try:
                    interpreter = which('python%s' % pyver)
                    executable_version = os.popen(
                        '%s -c "%s"' % (
                            interpreter,
                            'import sys;print sys.version[:3]'
                        )
                    ).read().replace('\n', '')
                    executable_prefix = os.path.abspath(
                        subprocess.Popen(
                            [interpreter, '-c', 'import sys;print sys.prefix'],
                            stdin=subprocess.PIPE, stdout=subprocess.PIPE,
                            close_fds=True).stdout.read().replace('\n', '')
                    )
                except:
                    print 'Cant find a python %s installation, you didnt give a %s python to paster' % (pyver, pyver)
                    raise
            if pyver and (executable_version != pyver):
                print 'Cant find a python %s installation, you didnt give a %s python to paster' % (pyver, pyver)
                raise Exception('Incompatible python')

        if vars['inside_minitage']:
            interpreter = os.path.join(
                '${buildout:directory}', '..', '..',
                'dependencies', python, 'parts', 'part', 'bin', 'python')
            executable_prefix = os.path.join(
                vars['mt'], 'dependencies',
                'python-%s' %  pyver, 'parts', 'part')
            executable_version = pyver
            vars['opt_deps'] = '%s %s  %s' % (xml2, xslt, 'python-%s' %  pyver)
            vars['xml2'] = os.path.join('${minitage:location}',
                                        'eggs', xml2,
                                    'parts', 'site-packages-%s' % pyver)
            #vars['mapnik'] = os.path.join('${minitage:location}',
            #                        'eggs', mapnik,
            #                        'parts', 'site-packages-%s' % pyver,
            #                             'lib', 'python%s' % pyver, 'site-packages') 
            vars['xslt'] = os.path.join('${minitage:location}',
                                    'eggs', xslt,
                                    'parts', 'site-packages-%s' % pyver)
            vars['mt'] = '${buildout:directory}/../..'
        else:
            vars['xml2'] = os.path.join(executable_prefix, 'lib', 'python%s' % executable_version, 'site-packages')
            vars['xslt'] = os.path.join(executable_prefix, 'lib', 'python%s' % executable_version, 'site-packages')
            #vars['mapnik'] = os.path.join(executable_prefix, 'lib', 'python%s' % executable_version, 'site-packages')
            vars['opt_deps'] = ''

        # minitage needs python.
        if not interpreter and (not vars['inside_minitage']):
            raise Exception('Python interpreter not found')

        vars['python'] = interpreter
        vars['python26'] = re.sub('(2|3)\..', '2.6', interpreter)
        vars['python_minibuild'] = 'python-%s' % pyver
        vars['python_minibuild'] = 'python-%s' % pyver
        vars['pyver'] = pyver
        vars['libpyver'] = pyver.replace('.', '')
        vars['python_version'] = executable_version
        vars['executable_site_packages'] = os.path.join(
            executable_prefix, 'lib', 'python%s'%executable_version, 'site-packages')
        vars['executable_prefix'] = executable_prefix
コード例 #4
0
ファイル: __init__.py プロジェクト: ebrehault/minitage.paste
    def pre(self, command, output_dir, vars):
        common.Template.pre(self, command, output_dir, vars)
        vars["sharp"] = "#"
        vars["linux"] = "linux" in sys.platform
        if not "opt_deps" in vars:
            vars["opt_deps"] = ""
        if vars["inside_minitage"]:
            if not self.special_output_dir:
                vars["path"] = os.path.join(self.output_dir, vars["category"], vars["project"])
            else:
                vars["path"] = self.output_dir
        else:
            vars["category"] = ""
            if not self.special_output_dir:
                vars["path"] = os.path.join(self.output_dir, vars["project"])
            else:
                vars["path"] = self.output_dir
        if not self.special_output_dir:
            vars["project_dir"] = vars["project"]
            vars["category_dir"] = vars["category"]
        else:
            vars["project_dir"] = ""
            vars["category_dir"] = ""
        interpreter, pyver = None, None
        pythons = {
            "python2.4": "2.4",
            "python2.5": "2.5",
            "python2.6": "2.6",
            "python2.7": "2.7",
            "python3.0": "3.0",
            "python3.1": "3.1",
            "python3.2": "3.2",
        }
        python = getattr(self, "python", None)
        if vars["inside_minitage"]:
            latest_python = None
            dsearch_latest = {"py-libxslt.*": "xslt", "py-libxml2.*": "xml2", "python-\d.\d": "latest_python"}
            vars["minilays"] = minilays = os.path.join(vars["mt"], "minilays")
            xml2, xslt = [
                search_latest(a, minilays)
                for a in (
                    "py-libxml2-.",
                    "py-libxslt-.*",
                    #'py-mapnik-.*'
                )
            ]
            for regex in dsearch_latest.keys():
                minibuild = search_latest(regex, minilays)
                stmt = "%s='%s'" % (dsearch_latest[regex], minibuild)
                exec stmt
                del dsearch_latest[regex]
            if (not python) and latest_python:
                python = latest_python
            pyver = pythons[python.replace("-", "")]
        else:
            if not python:
                python = vars["python"]
            else:
                python = python.replace("-", "")
                pyver = pythons[python]
            interpreter = which(python)
            executable_version = (
                os.popen('%s -c "%s"' % (interpreter, "import sys;print sys.version[:3]")).read().replace("\n", "")
            )
            executable_prefix = os.path.abspath(
                subprocess.Popen(
                    [interpreter, "-c", "import sys;print sys.prefix"],
                    stdin=subprocess.PIPE,
                    stdout=subprocess.PIPE,
                    close_fds=True,
                )
                .stdout.read()
                .replace("\n", "")
            )
            if pyver and (executable_version != pyver):
                try:
                    interpreter = which("python%s" % pyver)
                    executable_version = (
                        os.popen('%s -c "%s"' % (interpreter, "import sys;print sys.version[:3]"))
                        .read()
                        .replace("\n", "")
                    )
                    executable_prefix = os.path.abspath(
                        subprocess.Popen(
                            [interpreter, "-c", "import sys;print sys.prefix"],
                            stdin=subprocess.PIPE,
                            stdout=subprocess.PIPE,
                            close_fds=True,
                        )
                        .stdout.read()
                        .replace("\n", "")
                    )
                except:
                    print "Cant find a python %s installation, you didnt give a %s python to paster" % (pyver, pyver)
                    raise
            if pyver and (executable_version != pyver):
                print "Cant find a python %s installation, you didnt give a %s python to paster" % (pyver, pyver)
                raise Exception("Incompatible python")

        if vars["inside_minitage"]:
            interpreter = os.path.join(
                "${buildout:directory}", "..", "..", "dependencies", python, "parts", "part", "bin", "python"
            )
            executable_prefix = os.path.join(vars["mt"], "dependencies", "python-%s" % pyver, "parts", "part")
            executable_version = pyver
            vars["opt_deps"] = "%s %s  %s" % (xml2, xslt, "python-%s" % pyver)
            vars["xml2"] = os.path.join("${minitage:location}", "eggs", xml2, "parts", "site-packages-%s" % pyver)
            # vars['mapnik'] = os.path.join('${minitage:location}',
            #                        'eggs', mapnik,
            #                        'parts', 'site-packages-%s' % pyver,
            #                             'lib', 'python%s' % pyver, 'site-packages')
            vars["xslt"] = os.path.join("${minitage:location}", "eggs", xslt, "parts", "site-packages-%s" % pyver)
            vars["mt"] = "${buildout:directory}/../.."
        else:
            vars["xml2"] = os.path.join(executable_prefix, "lib", "python%s" % executable_version, "site-packages")
            vars["xslt"] = os.path.join(executable_prefix, "lib", "python%s" % executable_version, "site-packages")
            # vars['mapnik'] = os.path.join(executable_prefix, 'lib', 'python%s' % executable_version, 'site-packages')
            vars["opt_deps"] = ""

        # minitage needs python.
        if not interpreter and (not vars["inside_minitage"]):
            raise Exception("Python interpreter not found")

        vars["python"] = interpreter
        vars["python26"] = re.sub("(2|3)\..", "2.6", interpreter)
        vars["python_minibuild"] = "python-%s" % pyver
        vars["python_minibuild"] = "python-%s" % pyver
        vars["pyver"] = pyver
        vars["libpyver"] = pyver.replace(".", "")
        vars["python_version"] = executable_version
        vars["executable_site_packages"] = os.path.join(
            executable_prefix, "lib", "python%s" % executable_version, "site-packages"
        )
        vars["executable_prefix"] = executable_prefix
コード例 #5
0
ファイル: __init__.py プロジェクト: jpcw/minitage.paste
    def pre(self, command, output_dir, vars):
        """register catogory, and roll in common,"""
        vars["category"] = "pyramid"
        common.Template.pre(self, command, output_dir, vars)
        minitage_dbs = ["mysql", "postgresql", "sqlite"]
        minilays = os.path.join(self.output_dir, "minilays")
        cwd = os.getcwd()
        if not os.path.exists(self.output_dir):
            self.makedirs(self.output_dir)

        if vars["inside_minitage"]:
            deps = ["zlib-1.*", "freetype-2", "libxml2-2.*", "libiconv.*", "libxslt-1.*", "fontconfig-2.\d*"]
            if vars["with_database_mysql"]:
                deps.extend(["mysql-\d.\d*"])
            if vars["with_database_postgresql"]:
                deps.extend(["postgresql-\d.\d"])
            if vars["with_database_sqlite"] or (
                not vars["with_database_postgresql"] and not vars["with_database_mysql"]
            ):
                deps.extend(["sqlite-\d.\d"])
            # openldap
            if vars["with_binding_ldap"]:
                cs = search_latest("cyrus-sasl-\d\.\d*", vars["minilays"])
                deps.extend(["openldap-\d\.\d*", cs])
                vars["includesdirs"] = "\n    %s" % os.path.join(
                    vars["mt"], "dependencies", cs, "parts", "part", "include", "sasl"
                )

            # haproxy
            if vars["with_haproxy"]:
                deps.extend(["haproxy-\d\.\d*"])
            if vars["with_binding_lxml"]:
                deps.extend(["libxml2-\d.\d*", "libxslt-1.\d*"])
            if vars["with_gis_gdal"]:
                deps.extend(["gdal-\d.\d*", "pixman-0\d*"])
            if vars["with_gis_pgrouting"]:
                deps.extend(["pgrouting-1.\d*"])
            if vars["with_gis_mapnik"]:
                # deps.extend(['py-mapnik-\d.\d*', 'mapnik-\d.\d*',])
                deps.extend(["mapnik-\d.\d*"])
                deps.extend(["boost-python-.*"])
            if vars["with_binding_cairo"]:
                deps.extend(["cairo-1.\d*"])
            if vars["with_binding_pil"]:
                deps.extend(["libpng-1.\d*", "pil-\d.\d.\d*"])
            if vars["with_gis_mapscript"]:
                deps.extend(["mapserver-\d\.\d*"])
            if vars["with_binding_memcache"]:
                deps.extend(["libmemcache-\d.\d*"])
            for dep in deps:
                vars["opt_deps"] += " %s" % search_latest(dep, vars["minilays"])

        vars["sane_name"] = common.SPECIALCHARS.sub("", vars["project"])
        vars["includesdirs"] = ""
        vars["hr"] = "#" * 120

        # transforming eggs requirements as lists
        for var in self.sections_mappings:
            if var in vars:
                vars[var] = [a.strip() for a in vars[var].split(",")]

        vars["autocheckout"] = []
        for var in vars:
            if var.startswith("with_autocheckout") and vars[var]:
                vn = var.replace("with_autocheckout_", "")
                vars["autocheckout"].append(self.plone_sources[vn]["name"])

        for var in self.plone_sources:
            if self.plone_sources[var].get("autocheckout", "") == "y":
                if not self.plone_sources[var]["name"] in vars["autocheckout"]:
                    if (True in [vars.get(o, False) for o in self.plone_sources[var]["options"]]) and (
                        self.plone_sources[var]["name"] not in vars["autocheckout"]
                    ):
                        vars["autocheckout"].append(self.plone_sources[var]["name"])

        lps = copy.deepcopy(self.plone_sources)
        for item in self.plone_sources:
            col = self.plone_sources[item]
            found = False
            for option in col["options"]:
                if vars.get(option, False):
                    found = True
                    break
            if not found:
                del lps[item]
        vars["plone_sources"] = lps

        # Django core eggs
        vars["additional_eggs"].append("#Pyramid")
        vars["additional_eggs"].extend(base_pyramid_eggs)

        # databases
        for db in [var.replace("with_database_", "") for var in vars if "with_database_" in var and vars[var]]:
            if not db in ["sqlite"]:
                vars["additional_eggs"].extend(
                    [a for a in eggs_mappings["with_database_%s" % db] if not a in vars["additional_eggs"]]
                )
        # pyqt
        vars["pyqt"] = ""
        if vars["with_binding_pyqt"] and vars["inside_minitage"]:
            vars["opt_deps"] += " %s" % search_latest("swiglib-\d\.\d+", vars["minilays"])
            for i in ("pyqt-\d\.\d+", "sip-\d\.\d+"):
                vars["opt_deps"] += " %s" % search_latest(i, vars["minilays"])
                vars["pyqt"] += "\n   %s" % (
                    "${buildout:directory}/../../"
                    "eggs/%s/parts"
                    "/site-packages-%s/site-packages-%s"
                    % (search_latest(i, vars["minilays"]), vars["pyver"], vars["pyver"])
                )

        # openldap
        if vars["with_binding_ldap"] and vars["inside_minitage"]:
            cs = search_latest("cyrus-sasl-\d\.\d*", vars["minilays"])
            vars["opt_deps"] += " %s %s" % (search_latest("openldap-\d\.\d*", vars["minilays"]), cs)
            vars["includesdirs"] = "\n    %s" % os.path.join(
                vars["mt"], "dependencies", cs, "parts", "part", "include", "sasl"
            )

        # do we need some pinned version
        vars["plone_versions"] = []
        for var in self.versions_mappings:
            vars["plone_versions"].append(("# %s" % var, ""))
            for pin in self.versions_mappings[var]:
                vars["plone_versions"].append(pin)

        if vars["with_checked_versions"]:
            for var in self.checked_versions_mappings:
                if vars.get(var, False):
                    vars["plone_versions"].append(("# %s" % var, ""))
                    for pin in self.checked_versions_mappings[var]:
                        vars["plone_versions"].append((pin, self.checked_versions_mappings[var][pin]))

        if not os.path.exists(self.output_dir):
            os.makedirs(self.output_dir)

        vars["framework_apps"] = []
        for section in self.sections_mappings:
            for var in [k for k in self.sections_mappings[section] if vars.get(k, "")]:
                vars[section].append("#%s" % var)
                for item in self.sections_mappings[section][var]:
                    if not "%s\n" % item in vars[section]:
                        if not item in vars[section]:
                            vars[section].append(item)

        # be sure our special python is in priority
        vars["opt_deps"] = re.sub("\s*%s\s*" % self.python, " ", vars["opt_deps"])
        vars["opt_deps"] += " %s" % self.python

        # http serverS ports
        vars["http_port1"] = int(vars["http_port"]) + 1
        vars["http_port2"] = int(vars["http_port"]) + 2
        vars["http_port3"] = int(vars["http_port"]) + 3
        vars["http_port4"] = int(vars["http_port"]) + 4
        vars["http_port5"] = int(vars["http_port"]) + 5
        vars["http_port6"] = int(vars["http_port"]) + 6
        vars["http_port7"] = int(vars["http_port"]) + 7
        vars["running_user"] = common.running_user
        vars["instances_description"] = common.INSTANCES_DESCRIPTION % vars
        if not vars["reverseproxy_aliases"]:
            vars["reverseproxy_aliases"] = ""
        vars["sreverseproxy_aliases"] = vars["reverseproxy_aliases"].split(",")