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