{ "info": { "author": "Andrew Davison", "author_email": "andrew.davison@unic.cnrs-gif.fr", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Framework :: Django", "Intended Audience :: Science/Research", "License :: Other/Proprietary License", "Operating System :: OS Independent", "Programming Language :: Python", "Topic :: Internet :: WWW/HTTP", "Topic :: Scientific/Engineering" ], "description": "=========================\nWelcome to Sumatra Server\n=========================\n\nSumatra Server is a Django_ app that implements an HTTP-based store for\nrecords of computational experiments (e.g. simulations, scripted analyses), with\nthe goal of supporting `reproducible research`_.\n\nIn particular, it implements the server-side counterpart to the\n``HttpRecordStore`` client in Sumatra_.\n\nIt is based on the Piston_ framework.\n\n\nGetting started\n---------------\n\nThe following assumes that you already have a Django project to which you wish\nto add a record store for computational experiments. If you don't, you can\ndownload an `example project here`_.\n\nYou will need to have installed Sumatra Server, Sumatra, Piston and\ndjango-tagging_. Add the following lines to the ``INSTALLED_APPS`` tuple in your\nsettings.py::\n\n 'sumatra_server',\n 'sumatra.web',\n 'sumatra.recordstore.django_store',\n 'tagging',\n \nYour ``INSTALLED_APPS`` should also contain ``'django.contrib.auth'`` and\n``'django.contrib.contenttypes'``.\n\nNow decide where in your URL structure the record store will live and edit your\nurls.py accordingly, e.g.::\n\n urlpatterns = patterns('',\n # other url mappings\n (r'^records/', include('sumatra_server.urls')),\n )\n\nNow update your database by running syncdb::\n\n $ python manage.py syncdb\n Creating tables ...\n Creating table sumatra_server_projectpermission\n Creating table django_store_project\n Creating table django_store_executable\n Creating table django_store_dependency\n Creating table django_store_repository\n Creating table django_store_parameterset\n Creating table django_store_launchmode\n Creating table django_store_datastore\n Creating table django_store_platforminformation\n Creating table django_store_record_platforms\n Creating table django_store_record_dependencies\n Creating table django_store_record\n Creating table tagging_tag\n Creating table tagging_taggeditem\n\nIf you would like to load some test data to try it out, run::\n\n $ python manage.py loaddata haggling permissions\n \nThis will populate the record store with some simulation records, owned by a\nuser \"testuser\" with password \"abc123\".\n\n\nAPI\n---\n\nSumatra server implements a RESTful_ API, which returns either HTML or JSON,\ndepending on the Accept header in the HTTP request. Normally, if you access the\npage through a web browser you should get the HTML version, while Sumatra or\ncompatible tools will receive the JSON version. You can also override the Accept\nheader by explicitly adding ``?format=html`` or ``?format=json`` to the end of\nthe URL.\n\n.. list-table:: *Table showing the operations that can be performed on the record store*.\n :header-rows: 1\n \n * - URL\n - GET\n - POST\n - PUT\n - DELETE\n * - /\n - Return a list of projects\n - .\n - .\n - .\n * - //\n - Return a list of records for the given project. May add a querystring ``?tags=tag1,tag2`` to show only records that have one of the supplied tags\n - .\n - Create a new project and give the current user permission to access the project\n - .\n * - //permissions/\n - Return a list of users who can access this project\n - Give a user permission to access this project\n - .\n - .\n * - ///\n - Return the record with the given label\n - .\n - Create or update a record with the given label\n - Delete the record with the given label\n * - //tagged//\n - Return a list of records with the given tag (*not yet implemented*)\n - .\n - .\n - Delete all records having the given tag (*not yet implemented*)\n\nJSON format\n-----------\n\nHere is an example of a simulation record encoded using JSON. This is the\nformat that must be used to PUT a new record into the store::\n\n {\n \"user\": \"testuser\",\n \"project_id\": \"TestProject\",\n \"label\": \"20100709-154255\", \n \"reason\": \"Simulation to test the HttpRecordStore with Sumatra Server\",\n \"outcome\": \"Eureka! Nobel prize here we come.\", \n \"executable\": {\n \"path\": \"/usr/local/bin/python\", \n \"version\": \"2.5.2\", \n \"name\": \"Python\", \n \"options\": \"\"\n }, \n \"repository\": {\n \"url\": \"/Users/andrew/tmp/SumatraTest\", \n \"type\": \"MercurialRepository\"\n },\n \"version\": \"396c2020ca50\",\n \"diff\": \"\", \n \"main_file\": \"main.py\", \n \"parameters\": {\n \"content\": \"seed = 65785 # seed for random number generator\\ndistr = \\\"uniform\\\" # statistical distribution to draw values from \\nn = 100 # number of values to draw\", \n \"type\": \"SimpleParameterSet\"\n }, \n \"launch_mode\": {\n \"type\": \"SerialLaunchMode\", \n \"parameters\": \"{}\"\n }, \n \"timestamp\": \"2010-07-09 15:42:55\", \n \"duration\": 0.58756184577941895, \n \"datastore\": {\n \"type\": \"FileSystemDataStore\", \n \"parameters\": \"{'root': '/Users/andrew/tmp/SumatraTest/Data'}\"\n }, \n \"output_data\": [\n {\n \"path\": \"output.dat\",\n \"digest\": 'a39100d5130f613b96c9fcf605b68d53d60f6fdb',\n \"metadata\": \"\",\n } for key in record.output_data],\n \"input_datastore\": {\n \"type\": \"FileSystemDataStore\", ,\n \"parameters\": \"{'root': '/'}\",\n },\n \"input_data\": [],\n \"dependencies\": [\n {\n \"path\": \"/Library/Frameworks/Python.framework/Versions/4.0.30002/lib/python2.5/site-packages/matplotlib-0.98.3.0001-py2.5-macosx-10.3-fat.egg/matplotlib\", \n \"version\": \"0.98.3\", \n \"name\": \"matplotlib\", \n \"module\": \"python\", \n \"diff\": \"\"\n }, \n {\n \"path\": \"/Library/Frameworks/Python.framework/Versions/4.0.30002/lib/python2.5/site-packages/numpy-1.1.1.0001-py2.5-macosx-10.3-fat.egg/numpy\", \n \"version\": \"1.1.1\", \n \"name\": \"numpy\", \n \"module\": \"python\", \n \"diff\": \"\"\n }, \n ],\n \"platforms\": [\n {\n \"system_name\": \"Darwin\", \n \"ip_addr\": \"127.0.0.1\", \n \"architecture_bits\": \"32bit\", \n \"machine\": \"i386\", \n \"architecture_linkage\": \"\", \n \"version\": \"Darwin Kernel Version 9.8.0: Wed Jul 15 16:55:01 PDT 2009; root:xnu-1228.15.4~1/RELEASE_I386\", \n \"release\": \"9.8.0\", \n \"network_name\": \"localhost\", \n \"processor\": \"i386\"\n }\n ],\n \"tags\": \"\"\n }\n\nMost of these fields are write-once, i.e. if you PUT another record to the same\nURL, only changes in \"reason\", \"outcome\" and \"tags\" will be taken into account.\n\n\nAuthentication\n--------------\n\nSumatra Server uses HTTP Basic authentication, and validates against the user\ndatabase of your Django project.\n\n\n.. _Django: http://www.djangoproject.com\n.. _Sumatra: http://neuralensemble.org/sumatra\n.. _`reproducible research`: http://reproducibleresearch.net/\n.. _Piston: https://bitbucket.org/jespern/django-piston/\n.. _`example project here`: https://bitbucket.org/apdavison/sumatra_server_example\n.. _`django-tagging`: http://code.google.com/p/django-tagging/\n.. _`RESTful`: http://en.wikipedia.org/wiki/Representational_State_Transfer", "description_content_type": null, "docs_url": null, "download_url": "https://bitbucket.org/apdavison/sumatra_server/downloads", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://bitbucket.org/apdavison/sumatra_server/", "keywords": null, "license": "CeCILL v2 http://www.cecill.info", "maintainer": null, "maintainer_email": null, "name": "sumatra-server", "package_url": "https://pypi.org/project/sumatra-server/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/sumatra-server/", "project_urls": { "Download": "https://bitbucket.org/apdavison/sumatra_server/downloads", "Homepage": "http://bitbucket.org/apdavison/sumatra_server/" }, "release_url": "https://pypi.org/project/sumatra-server/0.2.0/", "requires_dist": null, "requires_python": null, "summary": "Sumatra Server is a Django app that implements an HTTP-based store for records of computational experiments.", "version": "0.2.0" }, "last_serial": 1056232, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "308a0c5bedadd61eb89a8718d0a6ae17", "sha256": "7f5b3a17d755fbec5e4621c65e3ae03b9238b85f7664c31bb580bb06be398dfa" }, "downloads": -1, "filename": "sumatra-server-0.1.0.tar.gz", "has_sig": false, "md5_digest": "308a0c5bedadd61eb89a8718d0a6ae17", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19657, "upload_time": "2011-06-29T11:19:47", "url": "https://files.pythonhosted.org/packages/9e/cb/a2d259e5c96e3c9f3f9da0fb84287c9cf7d1776faf2fb048ef3cc0337855/sumatra-server-0.1.0.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "efabe82d57d6db1a248cb81345e68839", "sha256": "2110da9aabd782bd96b4aed3dbfd877db9cf86cdc6e1ca3743448d25003f19bb" }, "downloads": -1, "filename": "sumatra-server-0.2.0.tar.gz", "has_sig": false, "md5_digest": "efabe82d57d6db1a248cb81345e68839", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22930, "upload_time": "2014-04-09T20:12:14", "url": "https://files.pythonhosted.org/packages/97/b6/31fd0e7f5955094b6a678479ea6f411bc67db366ea7644d59eaba74b9928/sumatra-server-0.2.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "efabe82d57d6db1a248cb81345e68839", "sha256": "2110da9aabd782bd96b4aed3dbfd877db9cf86cdc6e1ca3743448d25003f19bb" }, "downloads": -1, "filename": "sumatra-server-0.2.0.tar.gz", "has_sig": false, "md5_digest": "efabe82d57d6db1a248cb81345e68839", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22930, "upload_time": "2014-04-09T20:12:14", "url": "https://files.pythonhosted.org/packages/97/b6/31fd0e7f5955094b6a678479ea6f411bc67db366ea7644d59eaba74b9928/sumatra-server-0.2.0.tar.gz" } ] }