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 = ALL
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

Change Logs

Release 2.0.0

  • Ability to distribute all WordPress plugins and themes under a folder.

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-2.0.0.tar.gz (14.4 kB view hashes)

Uploaded Source

Built Distribution

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