diff options
Diffstat (limited to 'eggs/zc.recipe.egg-1.3.2-py2.6.egg/zc')
16 files changed, 2089 insertions, 0 deletions
diff --git a/eggs/zc.recipe.egg-1.3.2-py2.6.egg/zc/__init__.py b/eggs/zc.recipe.egg-1.3.2-py2.6.egg/zc/__init__.py new file mode 100644 index 0000000..de40ea7 --- /dev/null +++ b/eggs/zc.recipe.egg-1.3.2-py2.6.egg/zc/__init__.py @@ -0,0 +1 @@ +__import__('pkg_resources').declare_namespace(__name__) diff --git a/eggs/zc.recipe.egg-1.3.2-py2.6.egg/zc/__init__.pyo b/eggs/zc.recipe.egg-1.3.2-py2.6.egg/zc/__init__.pyo Binary files differnew file mode 100644 index 0000000..26cf973 --- /dev/null +++ b/eggs/zc.recipe.egg-1.3.2-py2.6.egg/zc/__init__.pyo diff --git a/eggs/zc.recipe.egg-1.3.2-py2.6.egg/zc/recipe/__init__.py b/eggs/zc.recipe.egg-1.3.2-py2.6.egg/zc/recipe/__init__.py new file mode 100644 index 0000000..de40ea7 --- /dev/null +++ b/eggs/zc.recipe.egg-1.3.2-py2.6.egg/zc/recipe/__init__.py @@ -0,0 +1 @@ +__import__('pkg_resources').declare_namespace(__name__) diff --git a/eggs/zc.recipe.egg-1.3.2-py2.6.egg/zc/recipe/__init__.pyo b/eggs/zc.recipe.egg-1.3.2-py2.6.egg/zc/recipe/__init__.pyo Binary files differnew file mode 100644 index 0000000..b3c3c15 --- /dev/null +++ b/eggs/zc.recipe.egg-1.3.2-py2.6.egg/zc/recipe/__init__.pyo diff --git a/eggs/zc.recipe.egg-1.3.2-py2.6.egg/zc/recipe/egg/README.txt b/eggs/zc.recipe.egg-1.3.2-py2.6.egg/zc/recipe/egg/README.txt new file mode 100644 index 0000000..1a43f9e --- /dev/null +++ b/eggs/zc.recipe.egg-1.3.2-py2.6.egg/zc/recipe/egg/README.txt @@ -0,0 +1,645 @@ +Installation of distributions as eggs +===================================== + +The zc.recipe.egg:eggs recipe can be used to install various types if +distutils distributions as eggs. It takes a number of options: + +eggs + A list of eggs to install given as one or more setuptools + requirement strings. Each string must be given on a separate + line. + +find-links + A list of URLs, files, or directories to search for distributions. + +index + The URL of an index server, or almost any other valid URL. :) + + If not specified, the Python Package Index, + http://cheeseshop.python.org/pypi, is used. You can specify an + alternate index with this option. If you use the links option and + if the links point to the needed distributions, then the index can + be anything and will be largely ignored. In the examples, here, + we'll just point to an empty directory on our link server. This + will make our examples run a little bit faster. + +python + The name of a section to get the Python executable from. + If not specified, then the buildout python option is used. The + Python executable is found in the executable option of the named + section. + +We have a link server that has a number of distributions: + + >>> print get(link_server), + <html><body> + <a href="bigdemo-0.1-py2.3.egg">bigdemo-0.1-py2.3.egg</a><br> + <a href="demo-0.1-py2.3.egg">demo-0.1-py2.3.egg</a><br> + <a href="demo-0.2-py2.3.egg">demo-0.2-py2.3.egg</a><br> + <a href="demo-0.3-py2.3.egg">demo-0.3-py2.3.egg</a><br> + <a href="demo-0.4c1-py2.3.egg">demo-0.4c1-py2.3.egg</a><br> + <a href="demoneeded-1.0.zip">demoneeded-1.0.zip</a><br> + <a href="demoneeded-1.1.zip">demoneeded-1.1.zip</a><br> + <a href="demoneeded-1.2c1.zip">demoneeded-1.2c1.zip</a><br> + <a href="extdemo-1.4.zip">extdemo-1.4.zip</a><br> + <a href="index/">index/</a><br> + <a href="other-1.0-py2.3.egg">other-1.0-py2.3.egg</a><br> + </body></html> + +We have a sample buildout. Let's update its configuration file to +install the demo package. + + >>> write(sample_buildout, 'buildout.cfg', + ... """ + ... [buildout] + ... parts = demo + ... + ... [demo] + ... recipe = zc.recipe.egg:eggs + ... eggs = demo<0.3 + ... find-links = %(server)s + ... index = %(server)s/index + ... """ % dict(server=link_server)) + +In this example, we limited ourselves to revisions before 0.3. We also +specified where to find distributions using the find-links option. + +Let's run the buildout: + + >>> import os + >>> print system(buildout), + Installing demo. + Getting distribution for 'demo<0.3'. + Got demo 0.2. + Getting distribution for 'demoneeded'. + Got demoneeded 1.2c1. + +Now, if we look at the buildout eggs directory: + + >>> ls(sample_buildout, 'eggs') + - demo-0.2-py2.3.egg + - demoneeded-1.2c1-py2.3.egg + - setuptools-0.6-py2.3.egg + - zc.buildout-1.0-py2.3.egg + +We see that we got an egg for demo that met the requirement, as well +as the egg for demoneeded, which demo requires. (We also see an egg +link for the recipe in the develop-eggs directory. This egg link was +actually created as part of the sample buildout setup. Normally, when +using the recipe, you'll get a regular egg installation.) + +Script generation +----------------- + +The demo egg defined a script, but we didn't get one installed: + + >>> ls(sample_buildout, 'bin') + - buildout + +If we want scripts provided by eggs to be installed, we should use the +scripts recipe: + + >>> write(sample_buildout, 'buildout.cfg', + ... """ + ... [buildout] + ... parts = demo + ... + ... [demo] + ... recipe = zc.recipe.egg:scripts + ... eggs = demo<0.3 + ... find-links = %(server)s + ... index = %(server)s/index + ... """ % dict(server=link_server)) + + >>> print system(buildout), + Uninstalling demo. + Installing demo. + Generated script '/sample-buildout/bin/demo'. + +Now we also see the script defined by the demo script: + + >>> ls(sample_buildout, 'bin') + - buildout + - demo + +The scripts recipe defines some additional options: + +entry-points + A list of entry-point identifiers of the form: + + name=module:attrs + + where name is a script name, module is a dotted name resolving to a + module name, and attrs is a dotted name resolving to a callable + object within a module. + + This option is useful when working with distributions that don't + declare entry points, such as distributions not written to work + with setuptools. + + Examples can be seen in the section "Specifying entry points" below. + +scripts + Control which scripts are generated. The value should be a list of + zero or more tokens. Each token is either a name, or a name + followed by an '=' and a new name. Only the named scripts are + generated. If no tokens are given, then script generation is + disabled. If the option isn't given at all, then all scripts + defined by the named eggs will be generated. + +dependent-scripts + If set to the string "true", scripts will be generated for all + required eggs in addition to the eggs specifically named. + +interpreter + The name of a script to generate that allows access to a Python + interpreter that has the path set based on the eggs installed. + (See the ``z3c.recipe.scripts`` recipe for a more full-featured + interpreter.) + +extra-paths + Extra paths to include in a generated script. + +initialization + Specify some Python initialization code. This is very limited. In + particular, be aware that leading whitespace is stripped from the + code given. + +arguments + Specify some arguments to be passed to entry points as Python source. + +relative-paths + If set to true, then egg paths will be generated relative to the + script path. This allows a buildout to be moved without breaking + egg paths. This option can be set in either the script section or + in the buildout section. + +Let's add an interpreter option: + + >>> write(sample_buildout, 'buildout.cfg', + ... """ + ... [buildout] + ... parts = demo + ... + ... [demo] + ... recipe = zc.recipe.egg + ... eggs = demo<0.3 + ... find-links = %(server)s + ... index = %(server)s/index + ... interpreter = py-demo + ... """ % dict(server=link_server)) + +Note that we omitted the entry point name from the recipe +specification. We were able to do this because the scripts recipe is +the default entry point for the zc.recipe.egg egg. + + >>> print system(buildout), + Uninstalling demo. + Installing demo. + Generated script '/sample-buildout/bin/demo'. + Generated interpreter '/sample-buildout/bin/py-demo'. + +Now we also get a py-demo script for giving us a Python prompt with +the path for demo and any eggs it depends on included in sys.path. +This is useful for debugging and testing. + + >>> ls(sample_buildout, 'bin') + - buildout + - demo + - py-demo + +If we run the demo script, it prints out some minimal data: + + >>> print system(join(sample_buildout, 'bin', 'demo')), + 2 2 + +The value it prints out happens to be some values defined in the +modules installed. + +We can also run the py-demo script. Here we'll just print out +the bits if the path added to reflect the eggs: + + >>> print system(join(sample_buildout, 'bin', 'py-demo'), + ... """import os, sys + ... for p in sys.path: + ... if 'demo' in p: + ... print os.path.basename(p) + ... + ... """).replace('>>> ', '').replace('... ', ''), + ... # doctest: +ELLIPSIS +NORMALIZE_WHITESPACE + demo-0.2-py2.4.egg + demoneeded-1.2c1-py2.4.egg + +Egg updating +------------ + +The recipe normally gets the most recent distribution that satisfies the +specification. It won't do this is the buildout is either in +non-newest mode or in offline mode. To see how this works, we'll +remove the restriction on demo: + + >>> write(sample_buildout, 'buildout.cfg', + ... """ + ... [buildout] + ... parts = demo + ... + ... [demo] + ... recipe = zc.recipe.egg + ... find-links = %(server)s + ... index = %(server)s/index + ... """ % dict(server=link_server)) + +and run the buildout in non-newest mode: + + >>> print system(buildout+' -N'), + Uninstalling demo. + Installing demo. + Generated script '/sample-buildout/bin/demo'. + +Note that we removed the eggs option, and the eggs defaulted to the +part name. Because we removed the eggs option, the demo was +reinstalled. + +We'll also run the buildout in off-line mode: + + >>> print system(buildout+' -o'), + Updating demo. + +We didn't get an update for demo: + + >>> ls(sample_buildout, 'eggs') + - demo-0.2-py2.3.egg + - demoneeded-1.2c1-py2.3.egg + - setuptools-0.6-py2.3.egg + - zc.buildout-1.0-py2.3.egg + +If we run the buildout on the default online and newest modes, +we'll get an update for demo: + + >>> print system(buildout), + Updating demo. + Getting distribution for 'demo'. + Got demo 0.4c1. + Generated script '/sample-buildout/bin/demo'. + +Then we'll get a new demo egg: + + >>> ls(sample_buildout, 'eggs') + - demo-0.2-py2.3.egg + - demo-0.4c1-py2.3.egg + - demoneeded-1.2c1-py2.3.egg + - setuptools-0.6-py2.4.egg + - zc.buildout-1.0-py2.4.egg + +The script is updated too: + + >>> print system(join(sample_buildout, 'bin', 'demo')), + 4 2 + +Controlling script generation +----------------------------- + +You can control which scripts get generated using the scripts option. +For example, to suppress scripts, use the scripts option without any +arguments: + + >>> write(sample_buildout, 'buildout.cfg', + ... """ + ... [buildout] + ... parts = demo + ... + ... [demo] + ... recipe = zc.recipe.egg + ... find-links = %(server)s + ... index = %(server)s/index + ... scripts = + ... """ % dict(server=link_server)) + + + >>> print system(buildout), + Uninstalling demo. + Installing demo. + + >>> ls(sample_buildout, 'bin') + - buildout + +You can also control the name used for scripts: + + >>> write(sample_buildout, 'buildout.cfg', + ... """ + ... [buildout] + ... parts = demo + ... + ... [demo] + ... recipe = zc.recipe.egg + ... find-links = %(server)s + ... index = %(server)s/index + ... scripts = demo=foo + ... """ % dict(server=link_server)) + + >>> print system(buildout), + Uninstalling demo. + Installing demo. + Generated script '/sample-buildout/bin/foo'. + + >>> ls(sample_buildout, 'bin') + - buildout + - foo + +Specifying extra script paths +----------------------------- + +If we need to include extra paths in a script, we can use the +extra-paths option: + + >>> write(sample_buildout, 'buildout.cfg', + ... """ + ... [buildout] + ... parts = demo + ... + ... [demo] + ... recipe = zc.recipe.egg + ... find-links = %(server)s + ... index = %(server)s/index + ... scripts = demo=foo + ... extra-paths = + ... /foo/bar + ... ${buildout:directory}/spam + ... """ % dict(server=link_server)) + + >>> print system(buildout), + Uninstalling demo. + Installing demo. + Generated script '/sample-buildout/bin/foo'. + +Let's look at the script that was generated: + + >>> cat(sample_buildout, 'bin', 'foo') # doctest: +NORMALIZE_WHITESPACE + #!/usr/local/bin/python2.4 + <BLANKLINE> + import sys + sys.path[0:0] = [ + '/sample-buildout/eggs/demo-0.4c1-py2.4.egg', + '/sample-buildout/eggs/demoneeded-1.2c1-py2.4.egg', + '/foo/bar', + '/sample-buildout/spam', + ] + <BLANKLINE> + import eggrecipedemo + <BLANKLINE> + if __name__ == '__main__': + eggrecipedemo.main() + +Relative egg paths +------------------ + +If the relative-paths option is specified with a true value, then +paths will be generated relative to the script. This is useful when +you want to be able to move a buildout directory around without +breaking scripts. + + >>> write(sample_buildout, 'buildout.cfg', + ... """ + ... [buildout] + ... parts = demo + ... + ... [demo] + ... recipe = zc.recipe.egg + ... find-links = %(server)s + ... index = %(server)s/index + ... scripts = demo=foo + ... relative-paths = true + ... extra-paths = + ... /foo/bar + ... ${buildout:directory}/spam + ... """ % dict(server=link_server)) + + >>> print system(buildout), + Uninstalling demo. + Installing demo. + Generated script '/sample-buildout/bin/foo'. + +Let's look at the script that was generated: + + >>> cat(sample_buildout, 'bin', 'foo') # doctest: +NORMALIZE_WHITESPACE + #!/usr/local/bin/python2.4 + <BLANKLINE> + import os + <BLANKLINE> + join = os.path.join + base = os.path.dirname(os.path.abspath(os.path.realpath(__file__))) + base = os.path.dirname(base) + <BLANKLINE> + import sys + sys.path[0:0] = [ + join(base, 'eggs/demo-0.4c1-pyN.N.egg'), + join(base, 'eggs/demoneeded-1.2c1-pyN.N.egg'), + '/foo/bar', + join(base, 'spam'), + ] + <BLANKLINE> + import eggrecipedemo + <BLANKLINE> + if __name__ == '__main__': + eggrecipedemo.main() + +You can specify relative paths in the buildout section, rather than in +each individual script section: + + + >>> write(sample_buildout, 'buildout.cfg', + ... """ + ... [buildout] + ... parts = demo + ... relative-paths = true + ... + ... [demo] + ... recipe = zc.recipe.egg + ... find-links = %(server)s + ... index = %(server)s/index + ... scripts = demo=foo + ... extra-paths = + ... /foo/bar + ... ${buildout:directory}/spam + ... """ % dict(server=link_server)) + + >>> print system(buildout), + Uninstalling demo. + Installing demo. + Generated script '/sample-buildout/bin/foo'. + + >>> cat(sample_buildout, 'bin', 'foo') # doctest: +NORMALIZE_WHITESPACE + #!/usr/local/bin/python2.4 + <BLANKLINE> + import os + <BLANKLINE> + join = os.path.join + base = os.path.dirname(os.path.abspath(os.path.realpath(__file__))) + base = os.path.dirname(base) + <BLANKLINE> + import sys + sys.path[0:0] = [ + join(base, 'eggs/demo-0.4c1-pyN.N.egg'), + join(base, 'eggs/demoneeded-1.2c1-pyN.N.egg'), + '/foo/bar', + join(base, 'spam'), + ] + <BLANKLINE> + import eggrecipedemo + <BLANKLINE> + if __name__ == '__main__': + eggrecipedemo.main() + +Specifying initialialization code and arguments +----------------------------------------------- + +Sometimes, we need to do more than just calling entry points. We can +use the initialialization and arguments options to specify extra code +to be included in generated scripts: + + + >>> write(sample_buildout, 'buildout.cfg', + ... """ + ... [buildout] + ... parts = demo + ... + ... [demo] + ... recipe = zc.recipe.egg + ... find-links = %(server)s + ... index = %(server)s/index + ... scripts = demo=foo + ... extra-paths = + ... /foo/bar + ... ${buildout:directory}/spam + ... initialization = a = (1, 2 + ... 3, 4) + ... arguments = a, 2 + ... """ % dict(server=link_server)) + + >>> print system(buildout), + Uninstalling demo. + Installing demo. + Generated script '/sample-buildout/bin/foo'. + + >>> cat(sample_buildout, 'bin', 'foo') # doctest: +NORMALIZE_WHITESPACE + #!/usr/local/bin/python2.4 + <BLANKLINE> + import sys + sys.path[0:0] = [ + '/sample-buildout/eggs/demo-0.4c1-py2.4.egg', + '/sample-buildout/eggs/demoneeded-1.2c1-py2.4.egg', + '/foo/bar', + '/sample-buildout/spam', + ] + <BLANKLINE> + a = (1, 2 + 3, 4) + <BLANKLINE> + import eggrecipedemo + <BLANKLINE> + if __name__ == '__main__': + eggrecipedemo.main(a, 2) + +Here we see that the initialization code we specified was added after +setting the path. Note, as mentioned above, that leading whitespace +has been stripped. Similarly, the argument code we specified was +added in the entry point call (to main). + +Specifying entry points +----------------------- + +Scripts can be generated for entry points declared explicitly. We can +declare entry points using the entry-points option: + + >>> write(sample_buildout, 'buildout.cfg', + ... """ + ... [buildout] + ... parts = demo + ... + ... [demo] + ... recipe = zc.recipe.egg + ... find-links = %(server)s + ... index = %(server)s/index + ... extra-paths = + ... /foo/bar + ... ${buildout:directory}/spam + ... entry-points = alt=eggrecipedemo:alt other=foo.bar:a.b.c + ... """ % dict(server=link_server)) + + >>> print system(buildout), + Uninstalling demo. + Installing demo. + Generated script '/sample-buildout/bin/demo'. + Generated script '/sample-buildout/bin/alt'. + Generated script '/sample-buildout/bin/other'. + + >>> ls(sample_buildout, 'bin') + - alt + - buildout + - demo + - other + + >>> cat(sample_buildout, 'bin', 'other') # doctest: +NORMALIZE_WHITESPACE + #!/usr/local/bin/python2.4 + <BLANKLINE> + import sys + sys.path[0:0] = [ + '/sample-buildout/eggs/demo-0.4c1-py2.4.egg', + '/sample-buildout/eggs/demoneeded-1.2c1-py2.4.egg', + '/foo/bar', + '/sample-buildout/spam', + ] + <BLANKLINE> + import foo.bar + <BLANKLINE> + if __name__ == '__main__': + foo.bar.a.b.c() + +Generating all scripts +---------------------- + +The `bigdemo` package doesn't have any scripts, but it requires the `demo` +package, which does have a script. Specify `dependent-scripts = true` to +generate all scripts in required packages: + + >>> write(sample_buildout, 'buildout.cfg', + ... """ + ... [buildout] + ... parts = bigdemo + ... + ... [bigdemo] + ... recipe = zc.recipe.egg + ... find-links = %(server)s + ... index = %(server)s/index + ... dependent-scripts = true + ... """ % dict(server=link_server)) + >>> print system(buildout+' -N'), + Uninstalling demo. + Installing bigdemo. + Getting distribution for 'bigdemo'. + Got bigdemo 0.1. + Generated script '/sample-buildout/bin/demo'. + +Offline mode +------------ + +If the buildout offline option is set to "true", then no attempt will +be made to contact an index server: + + >>> write(sample_buildout, 'buildout.cfg', + ... """ + ... [buildout] + ... parts = demo + ... offline = true + ... + ... [demo] + ... recipe = zc.recipe.egg + ... index = eek! + ... scripts = demo=foo + ... """ % dict(server=link_server)) + + >>> print system(buildout), + Uninstalling bigdemo. + Installing demo. + Generated script '/sample-buildout/bin/foo'. + diff --git a/eggs/zc.recipe.egg-1.3.2-py2.6.egg/zc/recipe/egg/__init__.py b/eggs/zc.recipe.egg-1.3.2-py2.6.egg/zc/recipe/egg/__init__.py new file mode 100644 index 0000000..b63fb85 --- /dev/null +++ b/eggs/zc.recipe.egg-1.3.2-py2.6.egg/zc/recipe/egg/__init__.py @@ -0,0 +1,2 @@ +from zc.recipe.egg.egg import Egg, Scripts, Eggs +from zc.recipe.egg.custom import Custom, Develop diff --git a/eggs/zc.recipe.egg-1.3.2-py2.6.egg/zc/recipe/egg/__init__.pyo b/eggs/zc.recipe.egg-1.3.2-py2.6.egg/zc/recipe/egg/__init__.pyo Binary files differnew file mode 100644 index 0000000..73c3321 --- /dev/null +++ b/eggs/zc.recipe.egg-1.3.2-py2.6.egg/zc/recipe/egg/__init__.pyo diff --git a/eggs/zc.recipe.egg-1.3.2-py2.6.egg/zc/recipe/egg/api.txt b/eggs/zc.recipe.egg-1.3.2-py2.6.egg/zc/recipe/egg/api.txt new file mode 100644 index 0000000..d3da306 --- /dev/null +++ b/eggs/zc.recipe.egg-1.3.2-py2.6.egg/zc/recipe/egg/api.txt @@ -0,0 +1,152 @@ +Egg Recipe API for other Recipes +================================ + +It is common for recipes to accept a collection of egg specifications +and generate scripts based on the resulting working sets. The egg +recipe provides an API that other recipes can use. + +A recipe can reuse the egg recipe, supporting the eggs, find-links, +index, extra-paths, and python options. This is done by creating an +egg recipe instance in a recipes's contructor. In the recipe's +install script, the egg-recipe instance's working_set method is used +to collect the requested eggs and working set. + +To illustrate, we create a sample recipe that is a very thin layer +around the egg recipe: + + >>> mkdir(sample_buildout, 'sample') + >>> write(sample_buildout, 'sample', 'sample.py', + ... """ + ... import logging, os + ... import zc.recipe.egg + ... + ... class Sample: + ... + ... def __init__(self, buildout, name, options): + ... self.egg = zc.recipe.egg.Scripts(buildout, name, options) + ... self.name = name + ... self.options = options + ... + ... def install(self): + ... extras = self.options['extras'].split() + ... requirements, ws = self.egg.working_set(extras) + ... print 'Part:', self.name + ... print 'Egg requirements:' + ... for r in requirements: + ... print r + ... print 'Working set:' + ... for d in ws: + ... print d + ... print 'extra paths:', self.egg.extra_paths + ... return () + ... + ... update = install + ... """) + +Here we instantiated the egg recipe in the constructor, saving it in +an attribute. This also initialized the options dictionary. + +In our install method, we called the working_set method on the +instance we saved. The working_set method takes an optional sequence +of extra requirements to be included in the working set. + + >>> write(sample_buildout, 'sample', 'setup.py', + ... """ + ... from setuptools import setup + ... + ... setup( + ... name = "sample", + ... entry_points = {'zc.buildout': ['default = sample:Sample']}, + ... install_requires = 'zc.recipe.egg', + ... ) + ... """) + + + >>> write(sample_buildout, 'sample', 'README.txt', " ") + + >>> write(sample_buildout, 'buildout.cfg', + ... """ + ... [buildout] + ... develop = sample + ... parts = sample-part + ... + ... [sample-part] + ... recipe = sample + ... eggs = demo<0.3 + ... find-links = %(server)s + ... index = %(server)sindex + ... extras = other + ... """ % dict(server=link_server)) + + >>> import os + >>> os.chdir(sample_buildout) + >>> buildout = os.path.join(sample_buildout, 'bin', 'buildout') + >>> print system(buildout + ' -q'), + Part: sample-part + Egg requirements: + demo<0.3 + Working set: + demo 0.2 + other 1.0 + demoneeded 1.2c1 + extra paths: [] + +We can see that the options were augmented with additional data +computed by the egg recipe by looking at .installed.cfg: + + >>> cat(sample_buildout, '.installed.cfg') + ... # doctest: +NORMALIZE_WHITESPACE + [buildout] + installed_develop_eggs = /sample-buildout/develop-eggs/sample.egg-link + parts = sample-part + <BLANKLINE> + [sample-part] + __buildout_installed__ = + __buildout_signature__ = sample-6aWMvV2EJ9Ijq+bR8ugArQ== + zc.recipe.egg-cAsnudgkduAa/Fd+WJIM6Q== + setuptools-0.6-py2.4.egg + zc.buildout-+rYeCcmFuD1K/aB77XTj5A== + _b = /sample-buildout/bin + _d = /sample-buildout/develop-eggs + _e = /sample-buildout/eggs + bin-directory = /sample-buildout/bin + develop-eggs-directory = /sample-buildout/develop-eggs + eggs = demo<0.3 + eggs-directory = /sample-buildout/eggs + executable = /usr/local/bin/python2.3 + extras = other + find-links = http://localhost:27071/ + index = http://localhost:27071/index + python = buildout + recipe = sample + +If we use the extra-paths option: + + >>> write(sample_buildout, 'buildout.cfg', + ... """ + ... [buildout] + ... develop = sample + ... parts = sample-part + ... + ... [sample-part] + ... recipe = sample + ... eggs = demo<0.3 + ... find-links = %(server)s + ... index = %(server)sindex + ... extras = other + ... extra-paths = /foo/bar + ... /spam/eggs + ... """ % dict(server=link_server)) + +Then we'll see that reflected in the extra_paths attribute in the egg +recipe instance: + + >>> print system(buildout + ' -q'), + Part: sample-part + Egg requirements: + demo<0.3 + Working set: + demo 0.2 + other 1.0 + demoneeded 1.2c1 + extra paths: ['/foo/bar', '/spam/eggs'] diff --git a/eggs/zc.recipe.egg-1.3.2-py2.6.egg/zc/recipe/egg/custom.py b/eggs/zc.recipe.egg-1.3.2-py2.6.egg/zc/recipe/egg/custom.py new file mode 100644 index 0000000..6616ed1 --- /dev/null +++ b/eggs/zc.recipe.egg-1.3.2-py2.6.egg/zc/recipe/egg/custom.py @@ -0,0 +1,170 @@ +############################################################################## +# +# Copyright (c) 2006 Zope Corporation and Contributors. +# All Rights Reserved. +# +# This software is subject to the provisions of the Zope Public License, +# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution. +# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED +# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS +# FOR A PARTICULAR PURPOSE. +# +############################################################################## +"""Install packages as eggs + +$Id: custom.py 84019 2008-02-18 12:41:04Z zagy $ +""" + +import logging, os, re, zipfile +import zc.buildout.easy_install + +logger = logging.getLogger(__name__) + + +class Base: + + def __init__(self, buildout, name, options): + self.name, self.options = name, options + + options['_d'] = buildout['buildout']['develop-eggs-directory'] + + python = options.get('python', buildout['buildout']['python']) + options['executable'] = buildout[python]['executable'] + + self.build_ext = build_ext(buildout, options) + + def update(self): + return self.install() + + +class Custom(Base): + + def __init__(self, buildout, name, options): + Base.__init__(self, buildout, name, options) + + links = options.get('find-links', + buildout['buildout'].get('find-links')) + if links: + links = links.split() + options['find-links'] = '\n'.join(links) + else: + links = () + self.links = links + + index = options.get('index', buildout['buildout'].get('index')) + if index is not None: + options['index'] = index + self.index = index + + environment_section = options.get('environment') + if environment_section: + self.environment = buildout[environment_section] + else: + self.environment = {} + environment_data = self.environment.items() + environment_data.sort() + options['_environment-data'] = repr(environment_data) + + options['_e'] = buildout['buildout']['eggs-directory'] + + assert options.get('unzip') in ('true', 'false', None) + + if buildout['buildout'].get('offline') == 'true': + self.install = lambda: () + + self.newest = buildout['buildout'].get('newest') == 'true' + + def install(self): + options = self.options + distribution = options.get('egg') + if distribution is None: + distribution = options.get('eggs') + if distribution is None: + distribution = self.name + else: + logger.warn("The eggs option is deprecated. Use egg instead") + + + distribution = options.get('egg', options.get('eggs', self.name) + ).strip() + self._set_environment() + try: + return zc.buildout.easy_install.build( + distribution, options['_d'], self.build_ext, + self.links, self.index, options['executable'], [options['_e']], + newest=self.newest, + ) + finally: + self._restore_environment() + + + def _set_environment(self): + self._saved_environment = {} + for key, value in self.environment.items(): + if key in os.environ: + self._saved_environment[key] = os.environ[key] + # Interpolate value with variables from environment. Maybe there + # should be a general way of doing this in buildout with something + # like ${environ:foo}: + os.environ[key] = value % os.environ + + def _restore_environment(self): + for key in self.environment: + if key in self._saved_environment: + os.environ[key] = self._saved_environment[key] + else: + try: + del os.environ[key] + except KeyError: + pass + + +class Develop(Base): + + def __init__(self, buildout, name, options): + Base.__init__(self, buildout, name, options) + options['setup'] = os.path.join(buildout['buildout']['directory'], + options['setup']) + + def install(self): + options = self.options + return zc.buildout.easy_install.develop( + options['setup'], options['_d'], self.build_ext, + options['executable'], + ) + + +def build_ext(buildout, options): + result = {} + for be_option in ('include-dirs', 'library-dirs', 'rpath'): + value = options.get(be_option) + if value is None: + continue + value = [ + os.path.join( + buildout['buildout']['directory'], + v.strip() + ) + for v in value.strip().split('\n') + if v.strip() + ] + result[be_option] = os.pathsep.join(value) + options[be_option] = os.pathsep.join(value) + + swig = options.get('swig') + if swig: + options['swig'] = result['swig'] = os.path.join( + buildout['buildout']['directory'], + swig, + ) + + for be_option in ('define', 'undef', 'libraries', 'link-objects', + 'debug', 'force', 'compiler', 'swig-cpp', 'swig-opts', + ): + value = options.get(be_option) + if value is None: + continue + result[be_option] = value + + return result diff --git a/eggs/zc.recipe.egg-1.3.2-py2.6.egg/zc/recipe/egg/custom.pyo b/eggs/zc.recipe.egg-1.3.2-py2.6.egg/zc/recipe/egg/custom.pyo Binary files differnew file mode 100644 index 0000000..4b4e883 --- /dev/null +++ b/eggs/zc.recipe.egg-1.3.2-py2.6.egg/zc/recipe/egg/custom.pyo diff --git a/eggs/zc.recipe.egg-1.3.2-py2.6.egg/zc/recipe/egg/custom.txt b/eggs/zc.recipe.egg-1.3.2-py2.6.egg/zc/recipe/egg/custom.txt new file mode 100644 index 0000000..0cf88e6 --- /dev/null +++ b/eggs/zc.recipe.egg-1.3.2-py2.6.egg/zc/recipe/egg/custom.txt @@ -0,0 +1,579 @@ +Creating eggs with extensions needing custom build settings +============================================================= + +Sometimes, It's necessary to provide extra control over how an egg is +created. This is commonly true for eggs with extension modules that +need to access libraries or include files. + +The zc.recipe.egg:custom recipe can be used to define an egg with +custom build parameters. The currently defined parameters are: + +include-dirs + A new-line separated list of directories to search for include + files. + +library-dirs + A new-line separated list of directories to search for libraries + to link with. + +rpath + A new-line separated list of directories to search for dynamic libraries + at run time. + +define + A comma-separated list of names of C preprocessor variables to + define. + +undef + A comman separated list of names of C preprocessor variables to + undefine. + +libraries + The name of an additional library to link with. Due to limitations + in distutils and desprite the option name, only a single library + can be specified. + +link-objects + The name of an link object to link against. Due to limitations + in distutils and desprite the option name, only a single link object + can be specified. + +debug + Compile/link with debugging information + +force + Forcibly build everything (ignore file timestamps) + +compiler + Specify the compiler type + +swig + The path to the swig executable + +swig-cpp + Make SWIG create C++ files (default is C) + +swig-opts + List of SWIG command line options + +In addition, the following options can be used to specify the egg: + +egg + An specification for the egg to be created, to install given as a + setuptools requirement string. This defaults to the part name. + +find-links + A list of URLs, files, or directories to search for distributions. + +index + The URL of an index server, or almost any other valid URL. :) + + If not specified, the Python Package Index, + http://cheeseshop.python.org/pypi, is used. You can specify an + alternate index with this option. If you use the links option and + if the links point to the needed distributions, then the index can + be anything and will be largely ignored. In the examples, here, + we'll just point to an empty directory on our link server. This + will make our examples run a little bit faster. + +python + The name of a section to get the Python executable from. + If not specified, then the buildout python option is used. The + Python executable is found in the executable option of the named + section. + +environment + The name of a section with additional environment variables. The + environment variables are set before the egg is built. + +To illustrate this, we'll define a buildout that builds an egg for a +package that has a simple extension module:: + + #include <Python.h> + #include <extdemo.h> + + static PyMethodDef methods[] = {}; + + PyMODINIT_FUNC + initextdemo(void) + { + PyObject *m; + m = Py_InitModule3("extdemo", methods, ""); + #ifdef TWO + PyModule_AddObject(m, "val", PyInt_FromLong(2)); + #else + PyModule_AddObject(m, "val", PyInt_FromLong(EXTDEMO)); + #endif + } + +The extension depends on a system-dependent include file, extdemo.h, +that defines a constant, EXTDEMO, that is exposed by the extension. + +The extension module is available as a source distribution, +extdemo-1.4.tar.gz, on a distribution server. + +We have a sample buildout that we'll add an include directory to with +the necessary include file: + + >>> mkdir('include') + >>> write('include', 'extdemo.h', + ... """ + ... #define EXTDEMO 42 + ... """) + +We'll also update the buildout configuration file to define a part for +the egg: + + >>> write(sample_buildout, 'buildout.cfg', + ... """ + ... [buildout] + ... parts = extdemo + ... + ... [extdemo] + ... recipe = zc.recipe.egg:custom + ... find-links = %(server)s + ... index = %(server)s/index + ... include-dirs = include + ... + ... """ % dict(server=link_server)) + + >>> print system(buildout), + Installing extdemo. + zip_safe flag not set; analyzing archive contents... + +We got the zip_safe warning because the source distribution we used +wasn't setuptools based and thus didn't set the option. + +The egg is created in the develop-eggs directory *not* the eggs +directory because it depends on buildout-specific parameters and the +eggs directory can be shared across multiple buildouts. + + >>> ls(sample_buildout, 'develop-eggs') + d extdemo-1.4-py2.4-unix-i686.egg + - z3c.recipe.scripts.egg-link + - zc.recipe.egg.egg-link + +Note that no scripts or dependencies are installed. To install +dependencies or scripts for a custom egg, define another part and use +the zc.recipe.egg recipe, listing the custom egg as one of the eggs to +be installed. The zc.recipe.egg recipe will use the installed egg. + +Let's define a script that uses out ext demo: + + >>> mkdir('demo') + >>> write('demo', 'demo.py', + ... """ + ... import extdemo + ... def main(): + ... print extdemo.val + ... """) + + >>> write('demo', 'setup.py', + ... """ + ... from setuptools import setup + ... setup(name='demo') + ... """) + + + >>> write('buildout.cfg', + ... """ + ... [buildout] + ... develop = demo + ... parts = extdemo demo + ... + ... [extdemo] + ... recipe = zc.recipe.egg:custom + ... find-links = %(server)s + ... index = %(server)s/index + ... include-dirs = include + ... + ... [demo] + ... recipe = zc.recipe.egg + ... eggs = demo + ... extdemo + ... entry-points = demo=demo:main + ... """ % dict(server=link_server)) + + >>> print system(buildout), + Develop: '/sample-buildout/demo' + Updating extdemo. + Installing demo. + Generated script '/sample-buildout/bin/demo'. + +When we run the script, we'll 42 printed: + + >>> print system(join('bin', 'demo')), + 42 + +Updating +-------- + +The custom recipe will normally check for new source distributions +that meet the given specification. This can be suppressed using the +buildout non-newest and offline modes. We'll generate a new source +distribution for extdemo: + + >>> update_extdemo() + +If we run the buildout in non-newest or offline modes: + + >>> print system(buildout+' -N'), + Develop: '/sample-buildout/demo' + Updating extdemo. + Updating demo. + + >>> print system(buildout+' -o'), + Develop: '/sample-buildout/demo' + Updating extdemo. + Updating demo. + +We won't get an update. + + >>> ls(sample_buildout, 'develop-eggs') + - demo.egg-link + d extdemo-1.4-py2.4-unix-i686.egg + - z3c.recipe.scripts.egg-link + - zc.recipe.egg.egg-link + +But if we run the buildout in the default on-line and newest modes, we +will. This time we also get the test-variable message again, because the new +version is imported: + + >>> print system(buildout), + Develop: '/sample-buildout/demo' + Updating extdemo. + zip_safe flag not set; analyzing archive contents... + Updating demo. + Generated script '/sample-buildout/bin/demo'. + + >>> ls(sample_buildout, 'develop-eggs') + - demo.egg-link + d extdemo-1.4-py2.4-linux-i686.egg + d extdemo-1.5-py2.4-linux-i686.egg + - z3c.recipe.scripts.egg-link + - zc.recipe.egg.egg-link + +Controlling the version used +---------------------------- + +We can specify a specific version using the egg option: + + >>> write('buildout.cfg', + ... """ + ... [buildout] + ... develop = demo + ... parts = extdemo demo + ... + ... [extdemo] + ... recipe = zc.recipe.egg:custom + ... egg = extdemo ==1.4 + ... find-links = %(server)s + ... index = %(server)s/index + ... include-dirs = include + ... + ... [demo] + ... recipe = zc.recipe.egg + ... eggs = demo + ... extdemo ==1.4 + ... entry-points = demo=demo:main + ... """ % dict(server=link_server)) + + >>> print system(buildout+' -D'), + Develop: '/sample-buildout/demo' + Uninstalling demo. + Uninstalling extdemo. + Installing extdemo. + zip_safe flag not set; analyzing archive contents... + Installing demo. + Generated script '/sample-buildout/bin/demo'. + + >>> ls(sample_buildout, 'develop-eggs') + - demo.egg-link + d extdemo-1.4-py2.4-linux-i686.egg + - z3c.recipe.scripts.egg-link + - zc.recipe.egg.egg-link + + +Controlling environment variables ++++++++++++++++++++++++++++++++++ + +To set additional environment variables, the `environment` option is used. + +Let's create a recipe which prints out environment variables. We need this to +make sure the set envirionment variables are removed after the egg:custom +recipe was run. + + >>> mkdir(sample_buildout, 'recipes') + >>> write(sample_buildout, 'recipes', 'environ.py', + ... """ + ... import logging, os, zc.buildout + ... + ... class Environ: + ... + ... def __init__(self, buildout, name, options): + ... self.name = name + ... + ... def install(self): + ... logging.getLogger(self.name).info( + ... 'test-variable left over: %s' % ( + ... 'test-variable' in os.environ)) + ... return [] + ... + ... def update(self): + ... self.install() + ... """) + >>> write(sample_buildout, 'recipes', 'setup.py', + ... """ + ... from setuptools import setup + ... + ... setup( + ... name = "recipes", + ... entry_points = {'zc.buildout': ['environ = environ:Environ']}, + ... ) + ... """) + + +Create our buildout: + + >>> write(sample_buildout, 'buildout.cfg', + ... """ + ... [buildout] + ... develop = recipes + ... parts = extdemo checkenv + ... + ... [extdemo-env] + ... test-variable = foo + ... + ... [extdemo] + ... recipe = zc.recipe.egg:custom + ... find-links = %(server)s + ... index = %(server)s/index + ... include-dirs = include + ... environment = extdemo-env + ... + ... [checkenv] + ... recipe = recipes:environ + ... + ... """ % dict(server=link_server)) + >>> print system(buildout), + Develop: '/sample-buildout/recipes' + Uninstalling demo. + Uninstalling extdemo. + Installing extdemo. + Have environment test-variable: foo + zip_safe flag not set; analyzing archive contents... + Installing checkenv. + checkenv: test-variable left over: False + + +The setup.py also printed out that we have set the environment `test-variable` +to foo. After the buildout the variable is reset to its original value (i.e. +removed). + +When an environment variable has a value before zc.recipe.egg:custom is run, +the original value will be restored: + + >>> import os + >>> os.environ['test-variable'] = 'bar' + >>> print system(buildout), + Develop: '/sample-buildout/recipes' + Updating extdemo. + Updating checkenv. + checkenv: test-variable left over: True + + >>> os.environ['test-variable'] + 'bar' + + +Sometimes it is required to prepend or append to an existing environment +variable, for instance for adding something to the PATH. Therefor all variables +are interpolated with os.environ before the're set: + + >>> write(sample_buildout, 'buildout.cfg', + ... """ + ... [buildout] + ... develop = recipes + ... parts = extdemo checkenv + ... + ... [extdemo-env] + ... test-variable = foo:%%(test-variable)s + ... + ... [extdemo] + ... recipe = zc.recipe.egg:custom + ... find-links = %(server)s + ... index = %(server)s/index + ... include-dirs = include + ... environment = extdemo-env + ... + ... [checkenv] + ... recipe = recipes:environ + ... + ... """ % dict(server=link_server)) + >>> print system(buildout), + Develop: '/sample-buildout/recipes' + Uninstalling extdemo. + Installing extdemo. + Have environment test-variable: foo:bar + zip_safe flag not set; analyzing archive contents... + Updating checkenv. + checkenv: test-variable left over: True + + >>> os.environ['test-variable'] + 'bar' + >>> del os.environ['test-variable'] + + +Create a clean buildout.cfg w/o the checkenv recipe, and delete the recipe: + + >>> write(sample_buildout, 'buildout.cfg', + ... """ + ... [buildout] + ... develop = recipes + ... parts = extdemo + ... + ... [extdemo] + ... recipe = zc.recipe.egg:custom + ... find-links = %(server)s + ... index = %(server)s/index + ... include-dirs = include + ... + ... """ % dict(server=link_server)) + >>> print system(buildout), + Develop: '/sample-buildout/recipes' + Uninstalling checkenv. + Uninstalling extdemo. + Installing extdemo. + zip_safe flag not set; analyzing archive contents... + + >>> rmdir(sample_buildout, 'recipes') + + +Controlling develop-egg generation +================================== + +If you want to provide custom build options for a develop egg, you can +use the develop recipe. The recipe has the following options: + +path + The path to a setup script or directory containing a startup + script. This is required. + +include-dirs + A new-line separated list of directories to search for include + files. + +library-dirs + A new-line separated list of directories to search for libraries + to link with. + +rpath + A new-line separated list of directories to search for dynamic libraries + at run time. + +define + A comma-separated list of names of C preprocessor variables to + define. + +undef + A comman separated list of names of C preprocessor variables to + undefine. + +libraries + The name of an additional library to link with. Due to limitations + in distutils and desprite the option name, only a single library + can be specified. + +link-objects + The name of an link object to link against. Due to limitations + in distutils and desprite the option name, only a single link object + can be specified. + +debug + Compile/link with debugging information + +force + Forcibly build everything (ignore file timestamps) + +compiler + Specify the compiler type + +swig + The path to the swig executable + +swig-cpp + Make SWIG create C++ files (default is C) + +swig-opts + List of SWIG command line options + +python + The name of a section to get the Python executable from. + If not specified, then the buildout python option is used. The + Python executable is found in the executable option of the named + section. + +To illustrate this, we'll use a directory containing the extdemo +example from the earlier section: + + >>> ls(extdemo) + - MANIFEST + - MANIFEST.in + - README + - extdemo.c + - setup.py + + >>> write('buildout.cfg', + ... """ + ... [buildout] + ... develop = demo + ... parts = extdemo demo + ... + ... [extdemo] + ... setup = %(extdemo)s + ... recipe = zc.recipe.egg:develop + ... include-dirs = include + ... define = TWO + ... + ... [demo] + ... recipe = zc.recipe.egg + ... eggs = demo + ... extdemo + ... entry-points = demo=demo:main + ... """ % dict(extdemo=extdemo)) + +Note that we added a define option to cause the preprocessor variable +TWO to be defined. This will cause the module-variable, 'val', to be +set with a value of 2. + + >>> print system(buildout), + Develop: '/sample-buildout/demo' + Uninstalling extdemo. + Installing extdemo. + Installing demo. + Generated script '/sample-buildout/bin/demo'. + +Our develop-eggs now includes an egg link for extdemo: + + >>> ls('develop-eggs') + - demo.egg-link + - extdemo.egg-link + - z3c.recipe.scripts.egg-link + - zc.recipe.egg.egg-link + +and the extdemo now has a built extension: + + >>> ls(extdemo) + - MANIFEST + - MANIFEST.in + - README + d build + - extdemo.c + d extdemo.egg-info + - extdemo.so + - setup.py + +Because develop eggs take precedence over non-develop eggs, the demo +script will use the new develop egg: + + >>> print system(join('bin', 'demo')), + 2 diff --git a/eggs/zc.recipe.egg-1.3.2-py2.6.egg/zc/recipe/egg/egg.py b/eggs/zc.recipe.egg-1.3.2-py2.6.egg/zc/recipe/egg/egg.py new file mode 100644 index 0000000..c19f757 --- /dev/null +++ b/eggs/zc.recipe.egg-1.3.2-py2.6.egg/zc/recipe/egg/egg.py @@ -0,0 +1,230 @@ +############################################################################## +# +# Copyright (c) 2006 Zope Corporation and Contributors. +# All Rights Reserved. +# +# This software is subject to the provisions of the Zope Public License, +# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution. +# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED +# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS +# FOR A PARTICULAR PURPOSE. +# +############################################################################## +"""Install packages as eggs + +$Id: egg.py 115900 2010-08-23 20:26:07Z gary $ +""" + +import UserDict, logging, os, re, zipfile +import zc.buildout +import zc.buildout.easy_install + + +class Eggs(object): + + include_site_packages = allowed_eggs = None + + def __init__(self, buildout, name, options): + self.buildout = buildout + self.name = self.default_eggs = name + if getattr(options, 'query_bool', None) is None: + # Someone is not passing us a zc.buildout.buildout.Options + # object. Maybe we should have a deprecation warning. + # Whatever. + options = _BackwardsSupportOption(options) + self.options = options + b_options = buildout['buildout'] + links = options.get('find-links', b_options['find-links']) + if links: + links = links.split() + options['find-links'] = '\n'.join(links) + else: + links = () + self.links = links + + index = options.get('index', b_options.get('index')) + if index is not None: + options['index'] = index + self.index = index + + allow_hosts = b_options['allow-hosts'] + allow_hosts = tuple([host.strip() for host in allow_hosts.split('\n') + if host.strip()!='']) + self.allow_hosts = allow_hosts + + options['eggs-directory'] = b_options['eggs-directory'] + options['_e'] = options['eggs-directory'] # backward compat. + options['develop-eggs-directory'] = b_options['develop-eggs-directory'] + options['_d'] = options['develop-eggs-directory'] # backward compat. + + python = options.setdefault('python', b_options['python']) + options['executable'] = buildout[python]['executable'] + + def working_set(self, extra=()): + """Separate method to just get the working set + + This is intended for reuse by similar recipes. + """ + options = self.options + b_options = self.buildout['buildout'] + + distributions = [ + r.strip() + for r in options.get('eggs', self.default_eggs).split('\n') + if r.strip()] + orig_distributions = distributions[:] + distributions.extend(extra) + + if b_options.get('offline') == 'true': + ws = zc.buildout.easy_install.working_set( + distributions, options['executable'], + [options['develop-eggs-directory'], + options['eggs-directory']], + include_site_packages=self.include_site_packages, + allowed_eggs_from_site_packages=self.allowed_eggs, + ) + else: + kw = {} + if 'unzip' in options: + kw['always_unzip'] = options.query_bool('unzip', None) + ws = zc.buildout.easy_install.install( + distributions, options['eggs-directory'], + links=self.links, + index=self.index, + executable=options['executable'], + path=[options['develop-eggs-directory']], + newest=b_options.get('newest') == 'true', + include_site_packages=self.include_site_packages, + allowed_eggs_from_site_packages=self.allowed_eggs, + allow_hosts=self.allow_hosts, + **kw) + + return orig_distributions, ws + + def install(self): + reqs, ws = self.working_set() + return () + + update = install + + +class ScriptBase(Eggs): + + def __init__(self, buildout, name, options): + super(ScriptBase, self).__init__(buildout, name, options) + + b_options = buildout['buildout'] + + options['bin-directory'] = b_options['bin-directory'] + options['_b'] = options['bin-directory'] # backward compat. + + self.extra_paths = [ + os.path.join(b_options['directory'], p.strip()) + for p in options.get('extra-paths', '').split('\n') + if p.strip() + ] + if self.extra_paths: + options['extra-paths'] = '\n'.join(self.extra_paths) + + + relative_paths = options.get( + 'relative-paths', b_options.get('relative-paths', 'false')) + if relative_paths == 'true': + options['buildout-directory'] = b_options['directory'] + self._relative_paths = options['buildout-directory'] + else: + self._relative_paths = '' + assert relative_paths == 'false' + + parse_entry_point = re.compile( + '([^=]+)=(\w+(?:[.]\w+)*):(\w+(?:[.]\w+)*)$' + ).match + + def install(self): + reqs, ws = self.working_set() + options = self.options + + scripts = options.get('scripts') + if scripts or scripts is None or options.get('interpreter'): + if scripts is not None: + scripts = scripts.split() + scripts = dict([ + ('=' in s) and s.split('=', 1) or (s, s) + for s in scripts + ]) + + for s in options.get('entry-points', '').split(): + parsed = self.parse_entry_point(s) + if not parsed: + logging.getLogger(self.name).error( + "Cannot parse the entry point %s.", s) + raise zc.buildout.UserError("Invalid entry point") + reqs.append(parsed.groups()) + + if options.query_bool('dependent-scripts', 'false'): + # Generate scripts for all packages in the working set, + # except setuptools. + reqs = list(reqs) + for dist in ws: + name = dist.project_name + if name != 'setuptools' and name not in reqs: + reqs.append(name) + return self._install(reqs, ws, scripts) + return () + + update = install + + def _install(self, reqs, ws, scripts): + # Subclasses implement this. + raise NotImplementedError() + + +class Scripts(ScriptBase): + + def _install(self, reqs, ws, scripts): + options = self.options + return zc.buildout.easy_install.scripts( + reqs, ws, options['executable'], + options['bin-directory'], + scripts=scripts, + extra_paths=self.extra_paths, + interpreter=options.get('interpreter'), + initialization=options.get('initialization', ''), + arguments=options.get('arguments', ''), + relative_paths=self._relative_paths + ) + +Egg = Scripts + + +class _BackwardsSupportOption(UserDict.UserDict): + + def __init__(self, data): + self.data = data # We want to show mutations to the underlying dict. + + def query_bool(self, name, default=None): + """Given a name, return a boolean value for that name. + + ``default``, if given, should be 'true', 'false', or None. + """ + if default is not None: + value = self.setdefault(name, default) + else: + value = self.get(name) + if value is None: + return value + return _convert_bool(name, value) + + def get_bool(self, name): + """Given a name, return a boolean value for that name. + """ + return _convert_bool(name, self[name]) + + +def _convert_bool(name, value): + if value not in ('true', 'false'): + raise zc.buildout.UserError( + 'Invalid value for %s option: %s' % (name, value)) + else: + return value == 'true' diff --git a/eggs/zc.recipe.egg-1.3.2-py2.6.egg/zc/recipe/egg/egg.pyo b/eggs/zc.recipe.egg-1.3.2-py2.6.egg/zc/recipe/egg/egg.pyo Binary files differnew file mode 100644 index 0000000..a683750 --- /dev/null +++ b/eggs/zc.recipe.egg-1.3.2-py2.6.egg/zc/recipe/egg/egg.pyo diff --git a/eggs/zc.recipe.egg-1.3.2-py2.6.egg/zc/recipe/egg/selecting-python.txt b/eggs/zc.recipe.egg-1.3.2-py2.6.egg/zc/recipe/egg/selecting-python.txt new file mode 100644 index 0000000..dcf07e8 --- /dev/null +++ b/eggs/zc.recipe.egg-1.3.2-py2.6.egg/zc/recipe/egg/selecting-python.txt @@ -0,0 +1,140 @@ +Controlling which Python to use +------------------------------- + +The following assumes that you have Python 2.4 installed. + +We can specify the python to use by specifying the name of a section +to read the Python executable from. The default is the section +defined by the python buildout option. + +We have a link server: + + >>> print get(link_server), + <html><body> + <a href="bigdemo-0.1-py2.4.egg">bigdemo-0.1-py2.4.egg</a><br> + <a href="demo-0.1-py2.4.egg">demo-0.1-py2.4.egg</a><br> + <a href="demo-0.2-py2.4.egg">demo-0.2-py2.4.egg</a><br> + <a href="demo-0.3-py2.4.egg">demo-0.3-py2.4.egg</a><br> + <a href="demo-0.4c1-py2.4.egg">demo-0.4c1-py2.4.egg</a><br> + <a href="demoneeded-1.0.zip">demoneeded-1.0.zip</a><br> + <a href="demoneeded-1.1.zip">demoneeded-1.1.zip</a><br> + <a href="demoneeded-1.2c1.zip">demoneeded-1.2c1.zip</a><br> + <a href="extdemo-1.4.zip">extdemo-1.4.zip</a><br> + <a href="index/">index/</a><br> + <a href="other-1.0-py2.4.egg">other-1.0-py2.4.egg</a><br> + </body></html> + +We have a sample buildout. Let's update its configuration file to +install the demo package using Python 2.4. + + >>> write(sample_buildout, 'buildout.cfg', + ... """ + ... [buildout] + ... parts = demo + ... eggs-directory = eggs + ... index = http://www.python.org/pypi/ + ... + ... [python2.4] + ... executable = %(python24)s + ... + ... [demo] + ... recipe = zc.recipe.egg + ... eggs = demo <0.3 + ... find-links = %(server)s + ... python = python2.4 + ... interpreter = py-demo + ... """ % dict(server=link_server, python24=other_executable)) + +Now, if we run the buildout: + + >>> import os + >>> os.chdir(sample_buildout) + >>> buildout = os.path.join(sample_buildout, 'bin', 'buildout') + >>> print system(buildout), + Installing demo. + Getting distribution for 'demo<0.3'. + Got demo 0.2. + Getting distribution for 'demoneeded'. + Got demoneeded 1.2c1. + Generated script '/sample-buildout/bin/demo'. + Generated interpreter '/sample-buildout/bin/py-demo'. + +we'll get the Python 2.4 eggs for demo and demoneeded: + + >>> ls(sample_buildout, 'eggs') + - demo-0.2-py2.4.egg + - demoneeded-1.2c1-py2.4.egg + d setuptools-0.6-py2.5.egg + - zc.buildout-1.0-py2.5.egg + +And the generated scripts invoke Python 2.4: + + >>> import sys + >>> if sys.platform == 'win32': + ... script_name = 'demo-script.py' + ... else: + ... script_name = 'demo' + >>> f = open(os.path.join(sample_buildout, 'bin', script_name)) + >>> shebang = f.readline().strip() + >>> if shebang[:3] == '#!"' and shebang[-1] == '"': + ... shebang = '#!'+shebang[3:-1] + >>> shebang == '#!' + other_executable + True + >>> print f.read(), # doctest: +NORMALIZE_WHITESPACE + <BLANKLINE> + import sys + sys.path[0:0] = [ + '/sample-buildout/eggs/demo-0.2-py2.4.egg', + '/sample-buildout/eggs/demoneeded-1.2c1-py2.4.egg', + ] + <BLANKLINE> + import eggrecipedemo + <BLANKLINE> + if __name__ == '__main__': + eggrecipedemo.main() + + >>> if sys.platform == 'win32': + ... f = open(os.path.join(sample_buildout, 'bin', 'py-demo-script.py')) + ... else: + ... f = open(os.path.join(sample_buildout, 'bin', 'py-demo')) + + >>> shebang = f.readline().strip() + >>> if shebang[:3] == '#!"' and shebang[-1] == '"': + ... shebang = '#!'+shebang[3:-1] + >>> shebang == '#!' + other_executable + True + >>> print f.read(), # doctest: +NORMALIZE_WHITESPACE + <BLANKLINE> + import sys + <BLANKLINE> + sys.path[0:0] = [ + '/sample-buildout/eggs/demo-0.2-py2.4.egg', + '/sample-buildout/eggs/demoneeded-1.2c1-py2.4.egg', + ] + <BLANKLINE> + _interactive = True + if len(sys.argv) > 1: + _options, _args = __import__("getopt").getopt(sys.argv[1:], 'ic:m:') + _interactive = False + for (_opt, _val) in _options: + if _opt == '-i': + _interactive = True + elif _opt == '-c': + exec _val + elif _opt == '-m': + sys.argv[1:] = _args + _args = [] + __import__("runpy").run_module( + _val, {}, "__main__", alter_sys=True) + <BLANKLINE> + if _args: + sys.argv[:] = _args + __file__ = _args[0] + del _options, _args + execfile(__file__) + <BLANKLINE> + if _interactive: + del _interactive + __import__("code").interact(banner="", local=globals()) + + >>> f.close() diff --git a/eggs/zc.recipe.egg-1.3.2-py2.6.egg/zc/recipe/egg/tests.py b/eggs/zc.recipe.egg-1.3.2-py2.6.egg/zc/recipe/egg/tests.py new file mode 100644 index 0000000..3a65504 --- /dev/null +++ b/eggs/zc.recipe.egg-1.3.2-py2.6.egg/zc/recipe/egg/tests.py @@ -0,0 +1,169 @@ +############################################################################## +# +# Copyright (c) 2006 Zope Corporation and Contributors. +# All Rights Reserved. +# +# This software is subject to the provisions of the Zope Public License, +# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution. +# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED +# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS +# FOR A PARTICULAR PURPOSE. +# +############################################################################## + +import os, re, shutil, sys +import zc.buildout.tests +import zc.buildout.testselectingpython +import zc.buildout.testing + +import unittest, doctest +from zope.testing import renormalizing + +os_path_sep = os.path.sep +if os_path_sep == '\\': + os_path_sep *= 2 + +def dirname(d, level=1): + if level == 0: + return d + return dirname(os.path.dirname(d), level-1) + +def testUsingDictAsOptions(): + """ +Some recipes using zc.recipe.egg have been passing dictionaries rather than +zc.buildout.buildout.Options objects. That's unexpected, but to save +complaints, we'll support it. + +Note that this test intends to show that a dictionary can be used as an +options object. It also uses a dictionary for the buildout object, which is +not intended. + + >>> import zc.buildout.buildout + >>> import zc.recipe.egg + >>> faux_egg_options = {'find-links': 'example.com'} + >>> faux_buildout_options = zc.buildout.buildout._unannotate_section( + ... zc.buildout.buildout._buildout_default_options.copy()) + >>> faux_buildout_options['bin-directory'] = '/somewhere/over/rainbow' + >>> faux_buildout = { + ... 'faux': faux_egg_options, 'buildout': faux_buildout_options} + >>> scripts = zc.recipe.egg.Scripts( + ... faux_buildout, 'faux', faux_egg_options) + >>> scripts.links + ['example.com'] + >>> import zc.buildout.easy_install + >>> old_install = zc.buildout.easy_install.install + >>> old_scripts = zc.buildout.easy_install.scripts + >>> def whatever(*args, **kwargs): pass + >>> zc.buildout.easy_install.install = whatever + >>> zc.buildout.easy_install.scripts = whatever + >>> scripts.install() # This used to fail! + >>> zc.buildout.easy_install.install = old_install + >>> zc.buildout.easy_install.scripts = old_scripts +""" + +def setUp(test): + zc.buildout.tests.easy_install_SetUp(test) + zc.buildout.testing.install_develop('zc.recipe.egg', test) + +def setUpSelecting(test): + zc.buildout.testselectingpython.setup(test) + zc.buildout.testing.install_develop('zc.recipe.egg', test) + +def test_suite(): + suite = unittest.TestSuite(( + doctest.DocFileSuite( + 'README.txt', + setUp=setUp, tearDown=zc.buildout.testing.buildoutTearDown, + checker=renormalizing.RENormalizing([ + zc.buildout.testing.normalize_path, + zc.buildout.testing.normalize_endings, + zc.buildout.testing.normalize_script, + zc.buildout.testing.normalize_egg_py, + zc.buildout.tests.normalize_bang, + zc.buildout.tests.hide_distribute_additions, + (re.compile('zc.buildout(-\S+)?[.]egg(-link)?'), + 'zc.buildout.egg'), + (re.compile('[-d] (setuptools|distribute)-[^-]+-'), + 'setuptools-X-'), + (re.compile(r'eggs\\\\demo'), 'eggs/demo'), + (re.compile(r'[a-zA-Z]:\\\\foo\\\\bar'), '/foo/bar'), + # Distribute unzips eggs by default. + (re.compile('\- demoneeded'), 'd demoneeded'), + ]) + ), + doctest.DocFileSuite( + 'api.txt', + setUp=setUp, tearDown=zc.buildout.testing.buildoutTearDown, + checker=renormalizing.RENormalizing([ + zc.buildout.testing.normalize_path, + zc.buildout.testing.normalize_endings, + zc.buildout.tests.hide_distribute_additions, + (re.compile('__buildout_signature__ = ' + 'sample-\S+\s+' + 'zc.recipe.egg-\S+\s+' + '(setuptools|distribute)-\S+\s+' + 'zc.buildout-\S+\s*' + ), + '__buildout_signature__ = sample- zc.recipe.egg-\n'), + (re.compile('executable = [\S ]+python\S*', re.I), + 'executable = python'), + (re.compile('find-links = http://localhost:\d+/'), + 'find-links = http://localhost:8080/'), + (re.compile('index = http://localhost:\d+/index'), + 'index = http://localhost:8080/index'), + ]) + ), + doctest.DocFileSuite( + 'custom.txt', + setUp=setUp, tearDown=zc.buildout.testing.buildoutTearDown, + checker=renormalizing.RENormalizing([ + zc.buildout.testing.normalize_path, + zc.buildout.testing.normalize_endings, + zc.buildout.tests.hide_distribute_additions, + zc.buildout.tests.hide_zip_safe_message, + (re.compile("(d ((ext)?demo(needed)?|other)" + "-\d[.]\d-py)\d[.]\d(-\S+)?[.]egg"), + '\\1V.V.egg'), + (re.compile('extdemo.c\n.+\\extdemo.exp\n'), ''), + (re.compile('extdemo[.]pyd'), 'extdemo.so') + ]), + ), + doctest.DocTestSuite( + setUp=setUp, tearDown=zc.buildout.testing.buildoutTearDown, + ), + )) + + if sys.version_info[:2] != (2, 4): + # Only run selecting python tests if not 2.4, since + # 2.4 is the alternate python used in the tests. + suite.addTest( + doctest.DocFileSuite( + 'selecting-python.txt', + setUp=setUpSelecting, + tearDown=zc.buildout.testing.buildoutTearDown, + checker=renormalizing.RENormalizing([ + zc.buildout.testing.normalize_path, + zc.buildout.testing.normalize_endings, + zc.buildout.testing.normalize_script, + zc.buildout.tests.hide_distribute_additions, + (re.compile('Got (setuptools|distribute) \S+'), + 'Got setuptools V'), + (re.compile('([d-] )?(setuptools|distribute)-\S+-py'), + 'setuptools-V-py'), + (re.compile('-py2[.][0-35-9][.]'), 'py2.5.'), + (re.compile('zc.buildout-\S+[.]egg'), + 'zc.buildout.egg'), + (re.compile('zc.buildout[.]egg-link'), + 'zc.buildout.egg'), + # Distribute unzips eggs by default. + (re.compile('\- demoneeded'), 'd demoneeded'), + ]), + ), + ) + + return suite + +if __name__ == '__main__': + unittest.main(defaultTest='test_suite') + diff --git a/eggs/zc.recipe.egg-1.3.2-py2.6.egg/zc/recipe/egg/tests.pyo b/eggs/zc.recipe.egg-1.3.2-py2.6.egg/zc/recipe/egg/tests.pyo Binary files differnew file mode 100644 index 0000000..377e52e --- /dev/null +++ b/eggs/zc.recipe.egg-1.3.2-py2.6.egg/zc/recipe/egg/tests.pyo |