Quickstart

Eager to get started? This page gives a good introduction in how to get started with okonomiyaki.

Let’s get started with some simple examples.

Querying an Enthought egg metadata

Begin by importing the EggMetadata class:

>>> from okonomiyaki.file_formats import EggMetadata

Now, to query metadata of an existing egg:

>>> metadata = EggMetadata.from_egg("enstaller-4.8.4-1.egg")
>>> print(metadata.name)
enstaller
>>> print(metadata.abi_tag)
None

Packaging files into an Enthought egg

If you want to packages existing files into an egg, you should use the EggBuilder class:

from okonomiyaki.file_formats import EggBuilder

metadata = EggMetadata(....)

with EggBuilder(metadata) as builder:
    builder.add_tree("./usr", "EGG-INFO/usr")

This will create an egg with the given metadata, adding every file in “./usr” into the egg.

Note

EggMetadata constructor is considered private. You generally do not want to create a new EggMetadata instance from scratch, but modify an existing one:

metadata = EggMetadata.from_egg("enstaller-4.8.4-1.egg")
new_metadata = EggMetadata.from_egg_metadata(metadata, name="yolo")
...

Repackaging an existing setuptools egg

If you want to create an Enthought egg from an existing setuptools egg, you should use the EggRewriter class:

from okonomiyaki.file_formats import EggBuilder

# Create metadata using the EggMetadata class to add platform,
# dependencies information
with EggRewriter(metadata, "foo-2.3-py2.7.egg") as rewriter:
    rewriter.add_file("dummy.txt", "EGG-INFO/dummy.txt")

Querying a edm runtime

Begin by importing the runtime_metadata_factory function:

>>> from okonomiyaki.file_formats import runtime_metadata_factory

To query metadata of an existing runtime:

>>> metadata = runtime_metadata_factory("python-cpython-2.7.10-1-rh5_x86_64.runtime")
>>> print(metadata.implementation)

Every metadata instance shares the attributes of the class RuntimeMetadataV1, but each instance may have additional attributes depending on the language.

Platform representations

There are 2 main classes to deal with platform representations in okonomiyaki, Platform and EPDPlatform.

Platform are generic representations, and provide a consistent API to query various details about a given platform, that is an OS + architecture + machine combination:

>>> from okonomiyaki.platforms import Platform
>>> p = Platform.from_running_system()
>>> print(p)
'Mac OS X 10.10.3 on x86_64'
>>> print(p.os)
'darwin'
>>> print(p.family)
'mac_os_x'
>>> print(p.release)
'10.10.3'

Architectures and machines are often the same, but not always: the platform for a program running in 64 bits on 32 bits Kernel OS X would have a x86_64 bits architecture on a x86 bits machine. A 32 bits process running on 64 bits would have a x86 bits architecture and x86_64 bits machine.

Platform instances are immutable (though not enforced) and can be safely hashed and compared.

EPDPlatform represents a given platform supported by Enthought. Internally, its state is stored as a Platform instance, and it provides various APIs that are specific to packaging.

>>> from okonomiyaki.platforms import EPDPlatform
>>> p = Platform.from_epd_string("rh5-32")
>>> print(p.arch_bits)
'64'
>>> print(p.pep425_tag)
'macosx_10_6_x86_64'