Skip to main content

zc.buildout recipe for package and distribute files, modules, libs, archives, etc.

Project description

leocornus.recipe.distribute

A buildout recipe to package and distribute lib, module, archive, files, etc.

A simple buildout part to archive all skins in wiki skin folder:

[archive-skins]
recipe = leocornus.recipe.distribute
source-root = /full/path/to/wiki/skins
packages = *
dist-format = zip
output-root = /full/path/to/archive/folder

The packages = * tells the distribute recipe to archive all folders in the source-root folder.

More details in package README.rst

License

GPL license

Detailed Documentation

Overview

Let’s get start.

>>> print 'Hello'
Hello

Options

source-root

The root directory where we find out the packages’ source files.

packages

A list of packages’ name followed with verion number.

dist-format

Available formats: zip, tar, gztar, bztar. Default format is zip.

output-root

The output root dir, where the archived file saved. Default is parts directory.

Sample for distribute exact packages

Samples here are based on zc.buildout’s testing support. Check testing support for more details.

Preparing Dirs and Files

Some preparation.

>>> import os
>>> srcRoot = tmpdir('src-root')
>>> print srcRoot
/.../src-root
>>> distRoot = tmpdir('dist-root')
>>> print distRoot
/.../dist-root

preparting the test pakcages: create some folders, write some testing files too.

>>> packageOne = os.path.join(srcRoot, 'test-package-one')
>>> mkdir(packageOne)
>>> mkdir(os.path.join(packageOne, 'folderone'))
>>> mkdir(os.path.join(packageOne, 'foldertwo'))
>>> mkdir(os.path.join(packageOne, 'foldertwo', 'foldertwo2'))
>>> write(packageOne, 'README.txt', "Readme content")
>>> write(packageOne, 'folderone', 'fileone.txt', 'File one content')
>>> write(packageOne, 'foldertwo', 'filetwo.txt', 'file two content')
>>> write(packageOne, 'foldertwo', 'foldertwo2', 'filetwo2.txt', 'file two 2 content')
>>> packagetwo = os.path.join(srcRoot, 'test-package-two')
>>> mkdir(packagetwo)
>>> mkdir(os.path.join(packagetwo, 'folder2one'))
>>> mkdir(os.path.join(packagetwo, 'folder2two'))
>>> mkdir(os.path.join(packagetwo, 'folder2two', 'folder2two2'))
>>> write(packagetwo, 'README.txt', "Readme content")
>>> write(packagetwo, 'folder2one', 'fileone.txt', 'File one content')
>>> write(packagetwo, 'folder2two', 'folder2two2', 'filetwo2.txt', 'file two 2 content')

Create the buildout.cfg

The sample buildout config file. The sample_buildout is the temp folder for testing.

>>> write(sample_buildout, 'buildout.cfg',
... """
... [buildout]
... parts =
...     test-source-dist
...
... [test-source-dist]
... recipe = leocornus.recipe.distribute
... source-root = %(srcRoot)s
... packages =
...     test-package-one=1.0
...     test-package-two=2.0
... dist-format = zip
... output-root = %(distRoot)s
... """ % dict(srcRoot=srcRoot, distRoot=distRoot))
>>> ls(sample_buildout)
d  bin
-  buildout.cfg
d  develop-eggs
d  eggs
d  parts

Execute and Verify

run the buildout

>>> os.chdir(sample_buildout)
>>> print system(buildout)
Installing test-source-dist.
test-source-dist: Creating package: .../dist-root/test-package-one.1.0.zip
test-source-dist: Creating package: .../dist-root/test-package-two.2.0.zip...

Read the dist file to verify the result.

>>> import zipfile
>>> thezip = zipfile.ZipFile(os.path.join(distRoot, 'test-package-one.1.0.zip'), "r")
>>> files = thezip.namelist()
>>> len(files)
4
>>> 'test-package-one/README.txt' in files
True
>>> 'test-package-one/folderone/fileone.txt' in files
True
>>> 'test-package-one/foldertwo/filetwo.txt' in files
True
>>> 'test-package-one/foldertwo/foldertwo2/filetwo2.txt' in files
True

verify package two

>>> thezip = zipfile.ZipFile(os.path.join(distRoot, 'test-package-two.2.0.zip'), "r")
>>> files = thezip.namelist()
>>> len(files)
3
>>> 'test-package-two/README.txt' in files
True
>>> 'test-package-two/folder2one/fileone.txt' in files
True
>>> 'test-package-two/folder2two/folder2two2/filetwo2.txt' in files
True

Sample to distribute whole folder

We will distirbue the whole WordPress plugins or themes folder. Here a list of things we are going to do:

  • preparing some testing folders and files to simulate WordPress Plugins and Themes

  • create buildout.cfg with the distribute recipe to archive all plugins and themes

  • verify the generated zip files have the correct content.

Prepare Plugins and Themes

We will use the same testing folders and files from previous example.

Make a WordPres Plugin package, could be any PHP file.

>>> pluginData = """
... /**
...  * Plugin Name: Package One
...  * Description: this the a dummy testing plugin.
...  * Version: 2.3.4
...  */
... ** Some other content.
... """
>>> write(packageOne, 'pone.php', pluginData)

Make a WordPress Theme package, has to be the exact file name style.css.

>>> themeData = """
... /**
...  * Theme Name: Package Two Theme.
...  * Description: this is a dummy theme for testing.
...  * Version: 3.4.5
...  * other header content.
...  */
... ** other style contnet.
... """
>>> write(packagetwo, 'style.css', themeData)

Create the buildout file

The buildout will be very simple.

>>> write(sample_buildout, 'buildout.cfg',
... """
... [buildout]
... parts =
...     test-source-dist
...
... [test-source-dist]
... recipe = leocornus.recipe.distribute
... source-root = %(srcRoot)s
... packages = ALL
... dist-format = zip
... output-root = %(distRoot)s
... """ % dict(srcRoot=srcRoot, distRoot=distRoot))
>>> ls(sample_buildout)
-  .installed.cfg
d  bin
-  buildout.cfg
d  develop-eggs
d  eggs
d  parts

Execute and Verify

Execute the buildout

>>> os.chdir(sample_buildout)
>>> print system(buildout)
Uninstalling test-source-dist.
Installing test-source-dist.
test-source-dist: Creating package: .../test-package-one.2.3.4.zip
test-source-dist: Creating package: .../test-package-two.3.4.5.zip
...

Read the zip file and verify the content. We will expect the following files are created:

>>> pOne = os.path.join(distRoot, 'test-package-one.2.3.4.zip')
>>> os.path.exists(pOne)
True
>>> tTwo = os.path.join(distRoot, 'test-package-two.3.4.5.zip')
>>> os.path.exists(tTwo)
True

Download

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

leocornus.recipe.distribute-1.0.0.tar.gz (11.0 kB view details)

Uploaded Source

Built Distribution

File details

Details for the file leocornus.recipe.distribute-1.0.0.tar.gz.

File metadata

File hashes

Hashes for leocornus.recipe.distribute-1.0.0.tar.gz
Algorithm Hash digest
SHA256 c73400fcf900b132c8e50b802387d5f3e36f5ca5152eb7c520e55fa9926867d7
MD5 aaa81feef65d69243b53f9d005dd4a77
BLAKE2b-256 c75c59b1b2749b8f2ffa91f310308700ae7eef0c4c562beb2627dc89ed1f0eed

See more details on using hashes here.

Provenance

File details

Details for the file leocornus.recipe.distribute-1.0.0.linux-x86_64.tar.gz.

File metadata

File hashes

Hashes for leocornus.recipe.distribute-1.0.0.linux-x86_64.tar.gz
Algorithm Hash digest
SHA256 da0c988b64f586297b9e2755eab32acd881e04dfafb0843a0238210c621650b8
MD5 3ce71642cef017ce9842ffde1173dd26
BLAKE2b-256 a756198025ee796d98f846a15744354def241a2bf3a498b4bb06aa81e0d40273

See more details on using hashes here.

Provenance

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page