{ "info": { "author": "Jan Seifert (Seznam.cz, a.s.)", "author_email": "jan.seifert@firma.seznam.cz", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: Utilities" ], "description": "objectvalidator\n===============\n\nModule `objectvalidator` provides functionality for validating and caching\nvalues returned from methods.\n\nInstalation\n-----------\n\n::\n\n cd objectvalidator/\n python setup.py install\n\nUsage\n-----\n\n`option` decorator validates and caches values returned from methods. Can\nbe used either with arguments or without. If arguments are ommited, value\nis not validated, only cached. Allowed arguments are **required** and\n**attrtype**. If **required** is `True`, value returned from method mustn't\nbe `None`. **attrtype** is a type which is allowed for value. Can be either\nsingle type or `tuple` containig types.\n\n::\n\n @option\n def foo(self):\n return ...\n\n @option(required=True, attrtype=int)\n def bar(self):\n return ...\n\n @option(required=True, attrtype=(int, float))\n def baz(self):\n return ...\n\n`option.get_option_names(inst)` returns `list` containig method's names\non *inst* instance which are decorated by `option` decorator.\n\n`option.load_all_options(inst)` tries reading values from all methods on\n*inst* instance which are decorated by `option` decorator. Reading will\ncause validation of theese values and cache them.\n\n`OptionsContainer` class is a container for options methods. During\ninitialization values from all methods decorated by `option` decorator\nare read . So if class is successfuly initialized, all options are\nvalid a cached.\n\n`OptionsContainer.initialize(*args, **kwargs)` initializes instance\nattributes. You can override this method in the subclasses.\n\nExample\n-------\n\n::\n\n\timport os\n\n from objectvalidator import option, OptionsContainer\n\n SETTINGS = {\n 'NAME': 'ExampleApp',\n 'DATABASE': {\n 'db': 'exampleapp_db',\n 'host': 'localhost',\n 'port': 3306,\n 'user': 'exampleapp-rw',\n 'password': 'a8RnU43A',\n },\n }\n\n\n class Config(OptionsContainer):\n\n def initialize(self, settings):\n self._settings = settings\n\n @option(required=True, attrtype=str)\n def name(self):\n return self._settings['NAME']\n\n @option\n def database(self):\n return DatabaseConfig(self._settings['DATABASE'])\n\n\n class DatabaseConfig(OptionsContainer):\n\n def initialize(self, database_settings):\n self._database_settings = database_settings\n\n @option(required=True, attrtype=str)\n def db(self):\n db = os.environ.get('DATABASE_DB')\n if db is not None:\n return db\n return self._database_settings['db']\n\n @option(required=True, attrtype=str)\n def host(self):\n host = os.environ.get('DATABASE_HOST')\n if host is not None:\n return host\n return self._database_settings['host']\n\n @option(required=True, attrtype=int)\n def port(self):\n port = os.environ.get('DATABASE_PORT')\n if port is not None:\n return int(port)\n return self._database_settings.get('port', 3306)\n\n @option(required=True, attrtype=str)\n def user(self):\n user = os.environ.get('DATABASE_USER')\n if user is not None:\n return user\n return self._database_settings['user']\n\n @option(required=True, attrtype=str)\n def password(self):\n password = os.environ.get('DATABASE_PASSWORD')\n if password is not None:\n return password\n return self._database_settings['password']\n\n\n >>> config = Config(SETTINGS)\n >>> config.name\n 'ExampleApp'\n >>> config.database\n \n >>> config.database.db\n 'exampleapp_db'\n >>> option.get_option_names(config)\n ['database', 'name']\n\nLicense\n-------\n\n3-clause BSD", "description_content_type": "text/x-rst", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://blog.seznam.cz/stitek/vyvojari/", "keywords": "", "license": "BSD", "maintainer": "", "maintainer_email": "", "name": "objectvalidator", "package_url": "https://pypi.org/project/objectvalidator/", "platform": "any", "project_url": "https://pypi.org/project/objectvalidator/", "project_urls": { "Homepage": "https://blog.seznam.cz/stitek/vyvojari/" }, "release_url": "https://pypi.org/project/objectvalidator/1.1.0/", "requires_dist": null, "requires_python": "", "summary": "Decorator for validating and caching values returning from methods.", "version": "1.1.0" }, "last_serial": 5331485, "releases": { "1.1.0": [ { "comment_text": "", "digests": { "md5": "693535d7512039cee806ea4f785ccda4", "sha256": "7a2ab927892a66773e2eb0b5c64084fe80e181e06e51f51bec3ecaf4cb4fcbbd" }, "downloads": -1, "filename": "objectvalidator-1.1.0.tar.gz", "has_sig": false, "md5_digest": "693535d7512039cee806ea4f785ccda4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5725, "upload_time": "2019-05-29T09:44:47", "url": "https://files.pythonhosted.org/packages/7a/2d/fdb9d19fa07b0034b4686f2cfbd2780d43191c536b89b00fec0aa08bd58f/objectvalidator-1.1.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "693535d7512039cee806ea4f785ccda4", "sha256": "7a2ab927892a66773e2eb0b5c64084fe80e181e06e51f51bec3ecaf4cb4fcbbd" }, "downloads": -1, "filename": "objectvalidator-1.1.0.tar.gz", "has_sig": false, "md5_digest": "693535d7512039cee806ea4f785ccda4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5725, "upload_time": "2019-05-29T09:44:47", "url": "https://files.pythonhosted.org/packages/7a/2d/fdb9d19fa07b0034b4686f2cfbd2780d43191c536b89b00fec0aa08bd58f/objectvalidator-1.1.0.tar.gz" } ] }