{ "info": { "author": "Nate Otto", "author_email": "notto@concentricsky.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Environment :: Console", "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Topic :: Education", "Topic :: Internet :: WWW/HTTP", "Topic :: Utilities" ], "description": "badgecheck\n==========\n\nBadgecheck (codename for Open Badges Validator Core) is a python package\ndesigned to verify the validity of Open Badges based on a variety of input\nsources and present a useful interface for accessing their properties and\nvalidation information. Python and command line APIs are provided.\n\n**Note - Badgecheck is in *early beta* stage. The results provided *cannot*\nbe used as a reliable indicator of the validity of an Open Badge, and *cannot*\nbe used as proof to claim implementation conformance.**\n\nIf you want to validate 1.0 or 1.1 badges in the meanwhile, please use\nhttps://badgecheck.io.\n\nBadgecheck was originated by Concentric Sky. https://concentricsky.com\nThis version of badgecheck is released by IMS Global Learning Consortium.\n\nInstallation\n------------\n\nYou may install badgecheck directly from pypi:\n`pip install badgecheck`\n\nTo contribute to development and run tests, there are a couple additional\nrequirements to install. Clone the git repository, activate a local virtualenv,\nand use the command:\n`pip install -r requirements.txt` from the project root directory.\n\nTo run tests, install tox into your system's global python environment and\nuse the command:\n`tox`\n\nFollow issues and contribute to the badgecheck roadmap:\nhttps://github.com/openbadges/badgecheck/issues\n\nHow to run the web server\n-------------------------\n\nA Flask webserver is an optional component of badgecheck. The necessary\ndependency is installed when you install from\n`pip install -r requirements.txt`.\nYou may install the server using pip with the optional server flag:\n`pip install badgecheck [server]`\n\nIn order to run the server, activate your environment and execute the following\ncommand:\n`python badgecheck/server/app.py`\n\nA local server will start up on the development port 5000 (by default), which\nyou can access from your browser.\n\nDesign Overview for Developers\n------------------------------\n\nThis Open Badges verification and validation tool is based on principles of\neasy testing of modular components and consistent patterns of interaction\nbetween those components. It relies on the `Redux `_\npattern from the ReactJS community. We use the Python port of some of the basic\nRedux tools called Pydux.\n\nApplications that implement Redux have several important characteristics that\ntogether make for predictable operation and division of responsibilities:\n\n* Single source of truth: There is one object tree that represents the entire\n state of the application. It is managed in a \"store\" and expressed in simple\n data types.\n* This state is read-only and can only be modified by submitting \"actions\",\n that are handled by the store one at a time, always producing a new copy\n of the state. Because python variables are pointers to memory space, this\n makes for efficient storage and comparison. Actions are simple dicts with\n a \"type\" property.\n* The mechanism for changing state occurs through \"reducers\", which inspect\n incoming actions and return a new copy of the portion of the state they\n oversee.\n\nIn order to verify the integrity of Open Badges, badgecheck must take input\nfrom the user, analyze that input, access the relevant Open Badges resources,\nensure that each of them are well formed and that they are linked together\nappropriately before packaging up the results and returning them to the user.\nThis entails the ability to handle a wide variety of different inputs and\nconfigurations of badge resources. Badgecheck takes advantage of Redux patterns\nto keep track of not only the badge data but also the processing tasks. All\napplication state for a request is in a state object dict managed by a store\ncreated upon user input.\n\nBadgecheck is made up of several important components:\n\n* Action creators: These take input parameters and return an action dict that\n may be interpreted by the reducers. Each action creator returns a dict with\n a certain 'type' value that will be handled by one or more parts of the\n reducer tree.\n* Reducers: These all have the function signature ``reducer(state, action)``\n and return a new copy of the state object or the current object if no change\n has been made. Reducers are \"combined\" to each only need to manage one part\n of the overall state tree. Reducers cannot dispatch new actions, make API\n calls or do anything else that introduces side effects beyond returning their\n portion of the application state.\n* Tasks: Within the state tree is a list of tasks, stored with their results.\n Tasks may do the things that the reducers are not allowed to do, like make\n HTTP requests and queue additional tasks (by calling the ``add_task`` action\n creator and returning the task to the task manager). Every task has the\n function signature ``task(state, task_meta)`` and returns a tuple in the\n format ``(result: bool, message: str, actions: list[dict])``, made easier\n with the helper ``task_result()``\n* Validation Tasks (specifically): Tasks are broken down to a micro level with\n a single responsibility each. Because of their functional structure that\n inspects state and returns results at this level, they are very testable.\n* User API and task manager: The application state is created fresh with each\n request. When a request comes in, the request manager initializes a store\n and queues up the first relevant tasks. Then, while tasks remain, the task\n manager runs each of them and dispatches the actions that they return, some\n of which queue up new tasks.\n* Tests: Unit tests and integration tests cover action creators, reducers,\n tasks, and API response. Mock state objects and actions are particularly\n easy to construct, and tests may implement their own task running system\n in order to precisely limit what components of the system are under test\n at any given time. Everything boils down to specifying which changes to\n state should occur and verifying that they do occur.\n\nWhen the tasks run out, the user API returns the state to the user. The final\n1.0 API contract has not been finalized.\n\n\n", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/openbadges/badgecheck", "keywords": "", "license": "Apache 2", "maintainer": "", "maintainer_email": "", "name": "badgecheck", "package_url": "https://pypi.org/project/badgecheck/", "platform": "", "project_url": "https://pypi.org/project/badgecheck/", "project_urls": { "Homepage": "https://github.com/openbadges/badgecheck" }, "release_url": "https://pypi.org/project/badgecheck/1.0.0b1/", "requires_dist": [ "aniso8601 (>=1.2.0)", "jsonschema (==2.6.0)", "jws (==0.1.3)", "openbadges-bakery (>=1.0.0b1)", "pycrypto (==2.6.1)", "pydux (==0.2.1)", "PyLD (==0.7.1)", "pytz (==2017.2)", "requests (>=2.13)", "requests-cache (==0.4.13)", "rfc3986 (==0.4.1)", "validators (==0.11.2)", "Flask (==0.12.1); extra == 'server'", "gunicorn (==19.7.1); extra == 'server'" ], "requires_python": "", "summary": "A python module that performs verification for Open Badges.", "version": "1.0.0b1" }, "last_serial": 3040422, "releases": { "1.0.0b1": [ { "comment_text": "", "digests": { "md5": "c022493f2989d3cc25965ac63f58bbd6", "sha256": "b37bde7db2498266dad1c3835f27a806221c769f92d3309c4127688f900ff2d3" }, "downloads": -1, "filename": "badgecheck-1.0.0b1-py2-none-any.whl", "has_sig": false, "md5_digest": "c022493f2989d3cc25965ac63f58bbd6", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 44685, "upload_time": "2017-07-21T22:06:20", "url": "https://files.pythonhosted.org/packages/f1/d1/bff1f86ac52599dd58b65ad07af3c8d72bd21b2b834c2049583c1b6e7103/badgecheck-1.0.0b1-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "db08847cb4dfac5b68207d89564417f1", "sha256": "ce2abd8b4316f156fa7a0e0967de088887cbbb87710fc54b05f734841f9133ef" }, "downloads": -1, "filename": "badgecheck-1.0.0b1.tar.gz", "has_sig": false, "md5_digest": "db08847cb4dfac5b68207d89564417f1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 147318, "upload_time": "2017-07-21T22:06:22", "url": "https://files.pythonhosted.org/packages/f1/53/c7a759d3da91ae0f71d2f4c5770b59244bf55a3d2d9fbde9887cab37a13f/badgecheck-1.0.0b1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "c022493f2989d3cc25965ac63f58bbd6", "sha256": "b37bde7db2498266dad1c3835f27a806221c769f92d3309c4127688f900ff2d3" }, "downloads": -1, "filename": "badgecheck-1.0.0b1-py2-none-any.whl", "has_sig": false, "md5_digest": "c022493f2989d3cc25965ac63f58bbd6", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 44685, "upload_time": "2017-07-21T22:06:20", "url": "https://files.pythonhosted.org/packages/f1/d1/bff1f86ac52599dd58b65ad07af3c8d72bd21b2b834c2049583c1b6e7103/badgecheck-1.0.0b1-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "db08847cb4dfac5b68207d89564417f1", "sha256": "ce2abd8b4316f156fa7a0e0967de088887cbbb87710fc54b05f734841f9133ef" }, "downloads": -1, "filename": "badgecheck-1.0.0b1.tar.gz", "has_sig": false, "md5_digest": "db08847cb4dfac5b68207d89564417f1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 147318, "upload_time": "2017-07-21T22:06:22", "url": "https://files.pythonhosted.org/packages/f1/53/c7a759d3da91ae0f71d2f4c5770b59244bf55a3d2d9fbde9887cab37a13f/badgecheck-1.0.0b1.tar.gz" } ] }