Example #1
0
 def test_ctor(self):
     meta = PackageMetadata(name="foo",
                            version="1.0",
                            author="John Doe",
                            author_email="*****@*****.**")
     self.assertEqual(meta.fullname, "foo-1.0")
     self.assertEqual(meta.contact, "John Doe")
     self.assertEqual(meta.contact_email, "*****@*****.**")
Example #2
0
def create_msi_installer(package,
                         run_node,
                         msi_root_node,
                         installer_name=None,
                         output_dir="dist"):
    meta = PackageMetadata.from_package(package)

    string_version = "%d.%d.%d" % (meta.version_major, meta.version_minor,
                                   meta.version_micro)

    fullname = "%s-%s" % (package.name, string_version)
    if installer_name is None:
        installer_name = "%s-%s.msi" % (package.name, string_version)
    parent_node = run_node.make_node(output_dir)
    if parent_node is None:
        raise IOError()
    installer_node = parent_node.make_node(installer_name)
    installer_name = installer_node.abspath()
    installer_node.parent.mkdir()

    author = meta.author

    short_version = sysconfig.get_python_version()

    has_ext_modules = True
    if has_ext_modules:
        target_version = short_version
    else:
        target_version = None

    if target_version:
        product_name = "Python %s %s" % (target_version, meta.fullname)
    else:
        product_name = "Python %s" % meta.fullname

    if target_version:
        versions = [target_version]
    else:
        versions = list(ALL_VERSIONS)

    db = msilib.init_database(installer_name, schema, product_name,
                              msilib.gen_uuid(), string_version, author)
    msilib.add_tables(db, sequence)

    props = [('DistVersion', meta.version)]
    email = meta.author_email or meta.maintainer_email
    if email:
        props.append(("ARPCONTACT", email))
    if meta.url:
        props.append(("ARPURLINFOABOUT", meta.url))
    if props:
        add_data(db, 'Property', props)

    add_find_python(db, versions)
    add_files(db, msi_root_node, versions, OTHER_VERSION)
    add_scripts(db)
    add_ui(db, fullname, versions, OTHER_VERSION)
    db.Commit()
Example #3
0
def write_template(top_node, template_file, package, additional_metadata=None):
    if additional_metadata is None:
        additional_metadata = {}

    source = top_node.find_node(template_file)
    if source is None:
        raise InvalidPackage("File %r not found (defined in 'MetaTemplateFile' field)" \
                             % (package.meta_template_file,))
    package_metadata = PackageMetadata.from_package(package)
    meta = dict((k, getattr(package_metadata, k)) for k in package_metadata.metadata_attributes)
    meta.update(additional_metadata)
    return _write_template(source, meta)
Example #4
0
def create_msi_installer(package, run_node, msi_root_node, installer_name=None, output_dir="dist"):
    meta = PackageMetadata.from_package(package)

    string_version = "%d.%d.%d" % (meta.version_major, meta.version_minor, meta.version_micro)

    fullname = "%s-%s" % (package.name, string_version)
    if installer_name is None:
        installer_name = "%s-%s.msi" % (package.name, string_version)
    parent_node = run_node.make_node(output_dir)
    if parent_node is None:
        raise IOError()
    installer_node = parent_node.make_node(installer_name)
    installer_name = installer_node.abspath()
    installer_node.parent.mkdir()

    author = meta.author

    short_version = sysconfig.get_python_version()

    has_ext_modules = True
    if has_ext_modules:
        target_version = short_version
    else:
        target_version = None

    if target_version:
        product_name = "Python %s %s" % (target_version, meta.fullname)
    else:
        product_name = "Python %s" % meta.fullname

    if target_version:
        versions = [target_version]
    else:
        versions = list(ALL_VERSIONS)

    db = msilib.init_database(installer_name, schema, product_name, msilib.gen_uuid(), string_version, author)
    msilib.add_tables(db, sequence)

    props = [("DistVersion", meta.version)]
    email = meta.author_email or meta.maintainer_email
    if email:
        props.append(("ARPCONTACT", email))
    if meta.url:
        props.append(("ARPURLINFOABOUT", meta.url))
    if props:
        add_data(db, "Property", props)

    add_find_python(db, versions)
    add_files(db, msi_root_node, versions, OTHER_VERSION)
    add_scripts(db)
    add_ui(db, fullname, versions, OTHER_VERSION)
    db.Commit()
Example #5
0
def write_template(top_node, template_file, package, additional_metadata=None):
    if additional_metadata is None:
        additional_metadata = {}

    source = top_node.find_node(template_file)
    if source is None:
        raise InvalidPackage("File %r not found (defined in 'MetaTemplateFile' field)" \
                             % (package.meta_template_file,))
    package_metadata = PackageMetadata.from_package(package)
    meta = dict((k, getattr(package_metadata, k))
                for k in package_metadata.metadata_attributes)
    meta.update(additional_metadata)
    return _write_template(source, meta)
Example #6
0
def fill_metadata_template(content, pkg):
    tpl = string.Template(content)
    meta = PackageMetadata.from_package(pkg)

    def _safe_repr(val):
        # FIXME: actually not safe at all. Needs to escape and all.
        if is_string(val):
            if len(val.splitlines()) > 1:
                return '"""%s"""' % (val,)
            else:
                return '"%s"' % (val,)
        else:
            return repr(val)

    meta_dict = dict([(k.upper(), _safe_repr(getattr(meta, k))) for k in meta.metadata_attributes])

    return tpl.substitute(meta_dict)