{ "info": { "author": "Stephan Richter and the Zope Community", "author_email": "zope-dev@zope.org", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Web Environment", "Framework :: Zope3", "Intended Audience :: Developers", "License :: OSI Approved :: Zope Public License", "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: Implementation :: CPython", "Topic :: Internet :: WWW/HTTP" ], "description": "This package tries to do the best to support the development of sample\ndata generators.\nA sample data generator is a pluggable tool to create data needed for tests.\n\n\nDetailed Documentation\n**********************\n\n===============================\nPluggable sample data framework\n===============================\n\nCreating a good testing environment is the most important way to create\nhigh quality software.\n\nBut most of the time it is a pain !\n\nThis package tries to do the best to support the development of sample\ndata generators.\nA sample data generator is a pluggable tool to create data needed for tests.\n\n\nThere are several goals to this framework:\n\n- provide the developers with an automatic setup that is close to\n real-world use.\n\n- provide the users with an easy setup for evaluation with plausible data\n\n- provide the user a management interface for different sample generators\n\nThe framework is pluggable and allows the creators of generator\nextensions to provide their own plugins that generate sample data for\nthose extensions.\n\n\nGenerators\n----------\n\nA generator generates sample data.\n\n >>> from zope import interface\n >>> from zope import component\n >>> from z3c.sampledata.interfaces import ISampleDataPlugin\n\n >>> @interface.implementer(ISampleDataPlugin)\n ... class GeneratePrincipals(object):\n ... dependencies = []\n ... schema = None\n ... def generate(self, context, param={}, dataSource=None, seed=None):\n ... print(self.__class__.__name__)\n ... if dataSource is not None:\n ... for data in dataSource:\n ... print('- %s'%data['login'])\n >>> principalPlugin = GeneratePrincipals()\n\nFor our tests we provide another generator :\n\n >>> @interface.implementer(ISampleDataPlugin)\n ... class GenerateSite(object):\n ... dependencies = []\n ... schema = None\n ... def generate(self, context, param={}, dataSource=None, seed=None):\n ... if 'sitename' in param:\n ... print('This is site %r'%param['sitename'])\n ... else:\n ... print(self.__class__.__name__)\n ... return 'I am from the site'\n >>> sitePlugin = GenerateSite()\n\n\nGenerator Manager\n-----------------\n\nA generator manager groups a collection of generators.\nThe manager allows to :\n\n - define dependencies between generators\n\n - define data connections between dependent generators\n\n - provide default configuration data\n\n >>> from z3c.sampledata import Manager\n >>> manager = Manager('manager', '')\n\n\nGenerator Plugin\n~~~~~~~~~~~~~~~~\n\nFor the manager our sample generators must be registered as named utilities.\n\n >>> component.provideUtility(sitePlugin,\n ... ISampleDataPlugin,'z3c.sampledata.site')\n >>> component.provideUtility(principalPlugin,\n ... ISampleDataPlugin,'z3c.sampledata.principals')\n\n\nGenerating Sample Data\n~~~~~~~~~~~~~~~~~~~~~~\n\nNow we can add generators to the manager.\n\n >>> manager.add('z3c.sampledata.principals',\n ... dependsOn=['z3c.sampledata.site',],\n ... contextFrom='z3c.sampledata.site')\n\nIn addition to the \"hardwired\" dependencies defined by the dependencies\nproperty in each generator it is possible to add dependencies in the generator\nmanager.\n\nA manager provides it's generators.\n\n >>> list(manager.generators.keys())\n ['z3c.sampledata.principals']\n\nWe can tell the manager to generate all samples.\nThere is no need to add the sample generator 'z3c.sampledata.site', it is added\nautomatically because of the dependency of 'z3c.sampledata.principals'.\n\n >>> infos = manager.generate(context=None, param={}, seed='something')\n GenerateSite\n GeneratePrincipals\n\n >>> [info.name for info in infos]\n ['z3c.sampledata.site', 'z3c.sampledata.principals']\n\n\nParameters for the sample generators\n------------------------------------\n\nTo have more control over the sample generation process it is possible to\nsetup parameters for the generators.\n\n >>> manager = Manager('manager', '')\n\n >>> manager.add('z3c.sampledata.site',\n ... param={'sitename':'samplesite'})\n\n >>> manager.add('z3c.sampledata.principals',\n ... dependsOn=['z3c.sampledata.site',],\n ... contextFrom='z3c.sampledata.site')\n\n >>> infos = manager.generate(context=None, param={}, seed='something')\n This is site 'samplesite'\n GeneratePrincipals\n\nIt is also possible to overwrite the parameters from the configuration.\n\n >>> infos = manager.generate(context=None,\n ... param={'z3c.sampledata.site':\n ... {'sitename':'managers site'}},\n ... seed='something')\n This is site 'managers site'\n GeneratePrincipals\n\n\nCycles in the generator definition\n----------------------------------\n\n >>> manager = Manager('manager', '')\n >>> manager.add('z3c.sampledata.principals',\n ... dependsOn=['z3c.sampledata.site',],\n ... contextFrom='z3c.sampledata.site')\n >>> manager.add('z3c.sampledata.site',\n ... dependsOn=['z3c.sampledata.principals',])\n\n >>> infos = manager.generate(context=None, param={}, seed='something')\n Traceback (most recent call last):\n ...\n CyclicDependencyError: cyclic dependency at 'z3c.sampledata.principals'\n\n\nA test for a complex dependency.\n\n >>> @interface.implementer(ISampleDataPlugin)\n ... class Generator(object):\n ... name = 'generator'\n ... dependencies = []\n ... schema = None\n ... def generate(self, context, param={}, dataSource=None, seed=None):\n ... return 'I am a generator'\n >>> component.provideUtility(Generator(), ISampleDataPlugin,'g.1')\n >>> component.provideUtility(Generator(), ISampleDataPlugin,'g.2')\n >>> component.provideUtility(Generator(), ISampleDataPlugin,'g.3')\n >>> manager = Manager('manager', '')\n >>> manager.add('g.1')\n >>> manager.add('g.2', contextFrom='g.1')\n >>> manager.add('g.3', dependsOn=['g.2', 'g.1'], contextFrom='g.1')\n >>> infos = manager.generate(context=None, param={}, seed=None)\n >>> [info.name for info in infos]\n ['g.1', 'g.2', 'g.3']\n\n\nSample Data Source\n------------------\n\nA sample data generator usually gets its sample data from a data source.\nMostly it is necessary to have different data sources for different uses.\n\nAs an example, it is always a pain if the sample data for the tests use the\nsame data as the UI uses later to provide data for the customer to click\naround.\n\n >>> manager = Manager('manager', '')\n\n >>> manager.addSource('z3c.datasource.principals',\n ... data=[{'login':'jukart', 'password':'trakuj'},\n ... {'login':'srichter', 'password':'rethcirs'}])\n\n >>> manager.add('z3c.sampledata.principals',\n ... dataSource='z3c.datasource.principals',\n ... dependsOn=['z3c.sampledata.site',],\n ... contextFrom='z3c.sampledata.site')\n\n >>> infos = manager.generate(context=None, param={}, seed='something')\n GenerateSite\n GeneratePrincipals\n - jukart\n - srichter\n\n\nIt is also possible to use adapters to act as a data source.\n\n >>> manager = Manager('manager', '')\n\n >>> class IPrincipalDataSource(interface.Interface):\n ... pass\n\n >>> def principalDataFactory(object):\n ... return [{'login':'jukart', 'password':'trakuj'},\n ... {'login':'srichter', 'password':'rethcirs'}]\n\n >>> component.provideAdapter(\n ... factory=principalDataFactory,\n ... adapts=(ISampleDataPlugin,),\n ... provides=IPrincipalDataSource,\n ... name='testprincipals')\n\n >>> manager.addSource('z3c.datasource.principals',\n ... adapterName='testprincipals',\n ... adaptTo=IPrincipalDataSource)\n\n >>> manager.add('z3c.sampledata.principals',\n ... dataSource='z3c.datasource.principals',\n ... dependsOn=['z3c.sampledata.site',],\n ... contextFrom='z3c.sampledata.site')\n\n >>> infos = manager.generate(context=None, param={}, seed='something')\n GenerateSite\n GeneratePrincipals\n - jukart\n - srichter\n\n\nHow to setup configuration for the generator manager\n----------------------------------------------------\n\nConfiguration can be done using ZCML::\n\n \n\n \n\n \n\n \n\n \n \n \n \n\n \n\n \n\n\nData Sources\n------------\n\nThis package implements the base functionality for data generators.\nA data generator is used to provide the raw data for a sample generator.\nRaw data can be read from text files in different ways.\n\n >>> from z3c.sampledata.data import DataGenerator\n >>> generator = DataGenerator(55)\n\nThe generator can read data lines from files.\n\n >>> generator.readLines('testlines.txt')\n [u'Line 1', u'Another line']\n\nThe generator can read data from CSV files.\n\n >>> generator.readCSV('testlines.csv')\n [['Line 1', 'Col 2'], ['Another line', 'Another Col']]\n\nThe generator can read a list of files from a path :\n\n >>> import os\n >>> generator.files(os.path.dirname(__file__))\n ['...README.txt', ...]\n\n\n\n=======\nCHANGES\n=======\n\n2.0.0 (2015-11-09)\n------------------\n\n- Standardize namespace __init__\n\n\n2.0.0a1 (2013-03-04)\n--------------------\n\n- Added support for Python 3.3.\n\n- Dropped browser support completely, since it relied on really old o-wrap\n techniques. Also, it contained Lovely-specif project language from about 7\n years ago. ;-)\n\n- Replaced deprecated ``zope.interface.implements`` usage with equivalent\n ``zope.interface.implementer`` decorator.\n\n- Dropped support for Python 2.4 and 2.5.\n\n\n1.0.0 (2013-02-26)\n------------------\n\n- Moved depndencies for the special SampleDataLayer setup to the \"testing\"\n extra.\n\n- Added ``MANIFEST.in`` and ``tox.ini``.\n\n- Fixed file headers.\n\n- Browser views are only available using the \"browser\" extra.\n\n- Change ``zope.app.pagetemplate`` dependency to ``zope.browserpage``.\n\n\n0.4.0 (2010-08-30)\n------------------\n\n- Use current packages.\n\n\n0.3.1 (2010-08-30)\n------------------\n\n- Update dependency meta, clean imports.\n\n\n0.3.0 (2010-06-28)\n------------------\n\n- Configured test runner to run functional tests.\n\n- Removed ZPKG and ZCML slugs.\n\n- Now requires `zope.app.pagetemplate` >= 3.6.0 as\n `zope.formlib.namedtemplate` has been moved there an there is no\n longer a BBB import `zope.formlib` >= 4.0\n\n- Fixed tests to run with `zope.app.authentication` >= 3.7.0.\n\n- Fixed tests to run with `zope.publisher` >= 3.12.0.\n\n- Using python's `doctest` module instead of deprecated\n `zope.testing.doctestunit`.\n\n\n0.2.0 (2010-06-25)\n------------------\n\n- adjust zope.app.session to zope.session in ftesting.zcml\n\n- Adjusted `zope.app.securitypolicy` to `zope.securitpolicy` in ftesting.zcml.\n\n- Fixed tests after zope packages refactoring. Updated imports and\n dependencies.\n\n\n0.1.0 (2008-02-14)\n------------------\n\n- Initial release.", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://pypi.python.org/pypi/z3c.sampledata", "keywords": "zope3 z3c sampledata", "license": "ZPL 2.1", "maintainer": null, "maintainer_email": null, "name": "z3c.sampledata", "package_url": "https://pypi.org/project/z3c.sampledata/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/z3c.sampledata/", "project_urls": { "Download": "UNKNOWN", "Homepage": "http://pypi.python.org/pypi/z3c.sampledata" }, "release_url": "https://pypi.org/project/z3c.sampledata/2.0.0/", "requires_dist": null, "requires_python": null, "summary": "Sampledata Generator", "version": "2.0.0" }, "last_serial": 1807893, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "da42827dbf8401f548a1dd9f80f28669", "sha256": "98e15c73f002647b0548012a8bc36b2f5a12703758314b5c20a03b391a226772" }, "downloads": -1, "filename": "z3c.sampledata-0.1.0.tar.gz", "has_sig": false, "md5_digest": "da42827dbf8401f548a1dd9f80f28669", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19060, "upload_time": "2008-02-14T07:25:34", "url": "https://files.pythonhosted.org/packages/c6/7b/008ef9f4d94a95b9c8909a8758c8f585d23e93d292e37535379ae04d28b3/z3c.sampledata-0.1.0.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "83c9672a9e6e06c1645cf9ba5aa76d02", "sha256": "71f5c6294e47f37744220727e4e634ba24fb244d54e5d40e73b915aec00436d8" }, "downloads": -1, "filename": "z3c.sampledata-0.2.0.tar.gz", "has_sig": false, "md5_digest": "83c9672a9e6e06c1645cf9ba5aa76d02", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17767, "upload_time": "2010-06-25T08:53:00", "url": "https://files.pythonhosted.org/packages/07/f9/903440a29ec1dcba3d46421082cd1395a2213658f3372f8f67f6454ee83d/z3c.sampledata-0.2.0.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "5a95401acf3f680c2bf98d45ad9986c6", "sha256": "91f0383ee370184826d6fd91f5ae3b207b6f103d47abb70c2a31916a63af7a55" }, "downloads": -1, "filename": "z3c.sampledata-0.3.0.tar.gz", "has_sig": false, "md5_digest": "5a95401acf3f680c2bf98d45ad9986c6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17937, "upload_time": "2010-06-28T08:28:53", "url": "https://files.pythonhosted.org/packages/32/c2/9d60e6189123e6609ab96b8850c763e4beee9a4e81d42f70c51813d766bd/z3c.sampledata-0.3.0.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "b7c5f956c90d7ab32cb7a0b453e4cf86", "sha256": "72857341ea51f182aecc422e90b5d642fc2269e0e82615d372043073d4a7cfdd" }, "downloads": -1, "filename": "z3c.sampledata-0.3.1.tar.gz", "has_sig": false, "md5_digest": "b7c5f956c90d7ab32cb7a0b453e4cf86", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22374, "upload_time": "2010-08-30T13:53:56", "url": "https://files.pythonhosted.org/packages/a9/c5/25a2a506aea0dc2ed704fac9f0ebdf82c7331661ccbca21e0e75d890e475/z3c.sampledata-0.3.1.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "5e83e2124e9fa08e6eb9dfae394ebda2", "sha256": "5fc7c15dbfefd551863c4f387e56450101a9e1f40ab23d3f958684b97fc8f4f7" }, "downloads": -1, "filename": "z3c.sampledata-0.4.0.tar.gz", "has_sig": false, "md5_digest": "5e83e2124e9fa08e6eb9dfae394ebda2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22412, "upload_time": "2010-08-30T14:10:16", "url": "https://files.pythonhosted.org/packages/01/39/e2b4c224fbbe24c6b2357ae7ac0c64ece74de476b8a889ce68724ddc9da4/z3c.sampledata-0.4.0.tar.gz" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "acaff194cccbd1942f848ea612530438", "sha256": "a2c78be74849cb0a5667bc7e37b43fd857158a3c7dc9bfe7e2328e82d0081cf6" }, "downloads": -1, "filename": "z3c.sampledata-1.0.0.tar.gz", "has_sig": false, "md5_digest": "acaff194cccbd1942f848ea612530438", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23121, "upload_time": "2013-02-27T01:25:01", "url": "https://files.pythonhosted.org/packages/97/de/7ec0fec979096de85be15695c106d6763f005c1c99e849ad57f56cceef14/z3c.sampledata-1.0.0.tar.gz" }, { "comment_text": "", "digests": { "md5": "51c68464ea1cac93f93705359b8e47fa", "sha256": "e94130ffeafd1462521f6736ced39e0777d4c36bb6c48520a3a97fd10fd66252" }, "downloads": -1, "filename": "z3c.sampledata-1.0.0.zip", "has_sig": false, "md5_digest": "51c68464ea1cac93f93705359b8e47fa", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 43500, "upload_time": "2013-02-27T01:23:21", "url": "https://files.pythonhosted.org/packages/c7/eb/6049ee69caf9826c6dfc39221d79d1809719b4f1f7d3198e20fbb6a8c3e7/z3c.sampledata-1.0.0.zip" } ], "2.0.0": [ { "comment_text": "", "digests": { "md5": "c9cdfb0e89ecc5063d40a4f3aaf31463", "sha256": "a864bf990de701b1e5281d049d6b7a7cca4ca12f0b446bdd724423712c403e18" }, "downloads": -1, "filename": "z3c.sampledata-2.0.0.tar.gz", "has_sig": false, "md5_digest": "c9cdfb0e89ecc5063d40a4f3aaf31463", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21631, "upload_time": "2015-11-09T14:19:52", "url": "https://files.pythonhosted.org/packages/5c/17/5d6aa1efbbb35a2ecbdde91223b9d8e8ff4fb65aa1eb42a735ef4ba98033/z3c.sampledata-2.0.0.tar.gz" } ], "2.0.0a1": [ { "comment_text": "", "digests": { "md5": "180636b948a70126f9a3c0b3f6f7f469", "sha256": "ea5a5ec12f9cbe64a1af7b5fe02663007603c5de951b4bcedd3bce255c301440" }, "downloads": -1, "filename": "z3c.sampledata-2.0.0a1.zip", "has_sig": false, "md5_digest": "180636b948a70126f9a3c0b3f6f7f469", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 39058, "upload_time": "2013-03-04T12:00:22", "url": "https://files.pythonhosted.org/packages/6a/04/70e9dc023ec386a629d8e0f65b7936cb7e2b38d122dea1c0693eab782cde/z3c.sampledata-2.0.0a1.zip" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "c9cdfb0e89ecc5063d40a4f3aaf31463", "sha256": "a864bf990de701b1e5281d049d6b7a7cca4ca12f0b446bdd724423712c403e18" }, "downloads": -1, "filename": "z3c.sampledata-2.0.0.tar.gz", "has_sig": false, "md5_digest": "c9cdfb0e89ecc5063d40a4f3aaf31463", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21631, "upload_time": "2015-11-09T14:19:52", "url": "https://files.pythonhosted.org/packages/5c/17/5d6aa1efbbb35a2ecbdde91223b9d8e8ff4fb65aa1eb42a735ef4ba98033/z3c.sampledata-2.0.0.tar.gz" } ] }