{ "info": { "author": "Martin Brochhaus", "author_email": "mbrochh@gmail.com", "bugtrack_url": null, "classifiers": [], "description": "Django Rapid Prototyping\n========================\n\nA reusable Django app that helps to create prototypes and cost estimations.\n\nInstallation\n------------\n\nTo get the latest stable release from PyPi::\n\n $ pip install django-rapid-prototyping\n\nTo get the latest commit from GitHub::\n\n $ pip install -e git+git://github.com/bitmazk/django-rapid-prototyping.git#egg=rapid_prototyping\n\nAdd ``django_libs`` and ``rapid_prototyping`` to your ``INSTALLED_APPS``::\n\n INSTALLED_APPS = (\n ...,\n 'django_libs'\n 'rapid_prototyping',\n )\n\nAdd the ``RapidPrototypingView`` from ``django-libs`` and include the\n``urls.py`` of this app in your main ``urls.py``::\n\n from django_libs.views import RapidPrototypingView\n\n urlpatterns = [\n url(r'^p/', include('rapid_prototyping.urls')),\n url(r'^p/(?P.*)$',\n RapidPrototypingView.as_view(),\n name='prototype'),\n ]\n\nAdd the mandatory settings to your ``settings.py``. See heading ``Settings``\nbelow.\n\nSettings\n--------\n\nRAPID_PROTOTYPING_SPRINTS_MODULE\n++++++++++++++++++++++++++++++++\n\nMandatory setting. Should be a fully qualified name to the ``sprints``\narray in your ``sprints`` module somewhere in your project. This would usually\nbe something like ``myproject.context.sprints.sprints``.\n\nOf course you have to create that file and add the ``sprints`` array. See\nheading ``Sprints`` below.\n\n\nRAPID_PROTOTYPING_HOURLY_RATE\n+++++++++++++++++++++++++++++\n\nMandatory setting. Set this to an integer representing your hourly rate.\n\n\nUsage\n-----\n\nIn your ``proto/p_base.html`` add the following block to the bottom of your site::\n\n {% block costs_footer_container %}\n
\n
\n
\n
\n {% block costs_footer %}{% endblock %}\n
\n
\n
\n
\n {% endblock %}\n\n {% comment %}Include this sctipt after your jQuery include.{% endcomment %}\n \n\nNow create a ``p_index.html`` like so::\n\n {% extends \"proto/p_base.html\" %}\n {% load libs_tags rapid_prototyping_tags %}\n\n {% block main %}\n

Project Prototype

\n \n {% endblock %}\n\n {% block costs_footer %}\n \n {% include \"rapid_prototyping/costs_table_head.html\" %}\n \n {% load_context \"yourproject.context.home_costs\" %}\n {% include \"rapid_prototyping/costs_table_body.html\" %}\n {% comment %}\n Load context and include table body for all pages that are part of your prototype here\n {% load_context \"yourproject.context.search_results_costs\" %}\n {% include \"rapid_prototyping/costs_table_body.html\" %}\n {% endcomment %}\n {% include \"rapid_prototyping/costs_total.html\" %}\n \n
\n {% endblock %}\n\nFor each page that you create, you need to create a context file which defines\nthe estimated costs for all subtasks that need to be done in order to get that\npage up and running. Such a file could look like this::\n\n # in yourproject/context/home_costs.py\n from rapid_prototyping.context.utils import append_overhead_costs, get_counter\n\n MAIN_ID = 100\n counter = [-1]\n costs = [\n {\n 'id': MAIN_ID + get_counter(counter)[0],\n 'task': 'Create logo',\n 'time': 240,\n },\n {\n 'id': MAIN_ID + get_counter(counter)[0],\n 'task': 'Create color scheme',\n 'time': 120,\n },\n {\n 'id': MAIN_ID + get_counter(counter)[0],\n 'task': 'Create email form',\n 'time': 30,\n }\n ]\n costs = append_overhead_costs(costs, MAIN_ID + get_counter(counter)[0])\n\nWhen you have done all this you should be able to visit\n``/p/proto/p_home.html`` and see your template with a table of costs below. You\nshould also be able to see ``/p/p_index.html`` with a list of all pages and a\ntable of total project costs.\n\nSprints\n-------\n\nIf you have done all the above, you will have some prototype pages with tables\nat the bottom that show planned tasks for each page. You will also have an\nindex page which shows all tasks for the whole project.\n\nNow you migiht want to group tasks into sprints and track the actual time that\nhas been taken to implement a certain task.\n\nFirst of all, create a ``yourproject/context/sprints.py`` like so::\n\n sprints = [\n {\n 'id': 1,\n 'title': 'Week 32',\n },\n {\n 'id': 2,\n 'title': 'Week 33',\n },\n ]\n\nThat's all. It's just an array of dicts, each dict describes a sprint. The\ntitle can be useful when rendering the list of sprints, the important part\nis the ``id``.\n\nIn order to assign tasks to a sprint, open the corresponding ``*_costs.py``\nfile and add some more information to the task's dict::\n\n costs = [\n {\n 'id': MAIN_ID + get_counter(counter)[0],\n 'task': 'Create logo',\n 'time': 240,\n 'developer_time': 300,\n 'actual_time': 450,\n 'link': 'http://www.trello.com/',\n 'sprint': 1,\n },\n ...\n\nThe additional columns are the following:\n\n**developer_time**: While ``time`` is the time the project manager estimated\nat the very beginning when communicating with the customer, ``developer_time``\nis the time that the person who actually implementes this estimates at the\nbeginning of a sprint. This can be different from ``time`` because as the\nproject progresses and patterns / frameworks emerge, some tasks can become\nmuch easier or much more difficult than initally planned.\n\n**actual_time**: This is the time that the developer actually took in order\nto complete the task.\n\n**link**: If you are using some other software, like www.trello.com to manage\nyour project, you can add a link to the corresponding ticket for this task\nin your other software here.\n\n**sprint**: This must be one of the IDs that you have defined in your\n``sprints.py``.\n\nIf you have done all the above, you should be able to visit ``/p/sprints/``.\n\nYou will now see your sprints with their assigned tasks. Before you start a\nsprint, you might want to note down the total edeveloper estimated time at\nthe beginning of the sprint. This is useful because if you can't finish\nsome of the tasks and move them into the next sprint, the total will change\nand you will not know, how much time you initially estimated.\n\nAdd the total developer estimated time like so::\n\n sprints = [\n {\n 'id': 1,\n 'title': 'Week 32',\n 'estimated_time': 1350,\n },\n {\n 'id': 2,\n 'title': 'Week 33',\n },\n ]\n\nAfter your sprint, you might want to note down which tasks could not be\ncompleted and how much time had been estimated for these tasks::\n\n sprints = [\n {\n 'id': 1,\n 'title': 'Week 32',\n 'estimated_time': 1350,\n 'unfinished_tasks': [300, 403, 407, 502, 503, 510],\n 'unfinished_time': 360,\n },\n {\n 'id': 2,\n 'title': 'Week 33',\n },\n ]\n\nAt this point you must be careful to never add a new task in front of another\ntask because then all IDs would be incremented and the IDs you noted down here\nwould no longer be correct.\n\n\nContribute\n----------\n\nIf you want to contribute to this project, please perform the following steps::\n\n # Fork this repository\n # Clone your fork\n $ mkvirtualenv -p python2.7 django-rapid-prototyping\n $ python setup.py install\n $ pip install -r dev_requirements.txt\n\n $ git co -b feature_branch master\n # Implement your feature and tests\n $ git add . && git commit\n $ git push -u origin feature_branch\n # Send us a pull request for your feature branch", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/bitmazk/django-rapid-prototyping", "keywords": "django,app,reusable,prototype,rapid prototyping", "license": "The MIT License", "maintainer": null, "maintainer_email": null, "name": "django-rapid-prototyping", "package_url": "https://pypi.org/project/django-rapid-prototyping/", "platform": "OS Independent", "project_url": "https://pypi.org/project/django-rapid-prototyping/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://github.com/bitmazk/django-rapid-prototyping" }, "release_url": "https://pypi.org/project/django-rapid-prototyping/1.0/", "requires_dist": null, "requires_python": null, "summary": "A reusable Django app that helps to create prototypes and cost estimations.", "version": "1.0" }, "last_serial": 2174072, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "82a0214fa68bbea08ffb87adda658203", "sha256": "d79085f42b6c3c4f8e2a0f3afc54bd6d39206568060913703942336fd13ffa56" }, "downloads": -1, "filename": "django-rapid-prototyping-0.1.tar.gz", "has_sig": false, "md5_digest": "82a0214fa68bbea08ffb87adda658203", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7614, "upload_time": "2013-06-22T09:41:19", "url": "https://files.pythonhosted.org/packages/ef/2e/2792a2d15998dbb457e66ebc4a94d949a632ff50f2f24eb0477aa6e9bba7/django-rapid-prototyping-0.1.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "0449314fe28ca55ae5f82e138c280d7a", "sha256": "e5b84e1b73cbed90a639062479364eea23e745b9a0f64b849dbf95d338415381" }, "downloads": -1, "filename": "django-rapid-prototyping-0.1.1.tar.gz", "has_sig": false, "md5_digest": "0449314fe28ca55ae5f82e138c280d7a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7969, "upload_time": "2013-06-23T05:44:58", "url": "https://files.pythonhosted.org/packages/4d/34/08f0993a009692ef86de61568f66191673005e3778e06dc56d3f9bca8e05/django-rapid-prototyping-0.1.1.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "163f9be63e17db8b043dc9382fcc7069", "sha256": "a4f402925a86bf4c1d19253092465826097bd87893a73023016c7209db8564f0" }, "downloads": -1, "filename": "django-rapid-prototyping-0.2.tar.gz", "has_sig": false, "md5_digest": "163f9be63e17db8b043dc9382fcc7069", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7988, "upload_time": "2013-06-23T05:55:13", "url": "https://files.pythonhosted.org/packages/fd/c0/fc791e9bbe38f14b7d5c399c092661655f9ac7722e7d91afddf303b0a5fe/django-rapid-prototyping-0.2.tar.gz" } ], "0.3": [ { "comment_text": "", "digests": { "md5": "e836df92e60ea1aea4b4ce3a3e962193", "sha256": "bf65894f211cae629716473be8e30abd7c8d01da82cb3035fbf19f71be82642a" }, "downloads": -1, "filename": "django-rapid-prototyping-0.3.tar.gz", "has_sig": false, "md5_digest": "e836df92e60ea1aea4b4ce3a3e962193", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8854, "upload_time": "2013-06-23T08:45:03", "url": "https://files.pythonhosted.org/packages/c8/15/e24e4b104af92eba936cf83497da3bbeaad18eae4ff4abad2e055f830b66/django-rapid-prototyping-0.3.tar.gz" } ], "0.4": [ { "comment_text": "", "digests": { "md5": "117435ec9f3f0af47bda72a641c5fdaa", "sha256": "30d477bc7c0933097b8f64b5e7e8bbe98dc2541bf75c313ab4c09ebeaeb5cca6" }, "downloads": -1, "filename": "django-rapid-prototyping-0.4.tar.gz", "has_sig": false, "md5_digest": "117435ec9f3f0af47bda72a641c5fdaa", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11968, "upload_time": "2013-08-07T10:04:16", "url": "https://files.pythonhosted.org/packages/7e/91/23c27c0a044838fc9cc6d12e7f0d3b9263e0636d00e98eef44c63ceab4dd/django-rapid-prototyping-0.4.tar.gz" } ], "0.5": [ { "comment_text": "", "digests": { "md5": "f02c8c17bc2676b03ee44d4a8a286736", "sha256": "d9495ed3058cdb3128863573f5c4089231c3cfbdeb11c59e5cb385a45f8a8484" }, "downloads": -1, "filename": "django-rapid-prototyping-0.5.tar.gz", "has_sig": false, "md5_digest": "f02c8c17bc2676b03ee44d4a8a286736", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15349, "upload_time": "2013-08-27T15:29:00", "url": "https://files.pythonhosted.org/packages/a9/74/cd09ad6b57dc44906a05477ed42fdc09ff188ce9c4319feb3bce7e9fbad6/django-rapid-prototyping-0.5.tar.gz" } ], "0.6": [ { "comment_text": "", "digests": { "md5": "bda50b67d3b10c8a4cdee3f6a7d06f7a", "sha256": "223caba9ac3b23f78a81ab788a57d3bed68ef67594004c67eb8f9585438ddc50" }, "downloads": -1, "filename": "django-rapid-prototyping-0.6.tar.gz", "has_sig": false, "md5_digest": "bda50b67d3b10c8a4cdee3f6a7d06f7a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15566, "upload_time": "2013-09-03T07:35:54", "url": "https://files.pythonhosted.org/packages/10/8a/281fe6c4234aca4bfceae2bcb77a80a38867a3ef07a461aa6b4d66754a98/django-rapid-prototyping-0.6.tar.gz" } ], "0.7": [ { "comment_text": "", "digests": { "md5": "e834927b71ff1b8b1c3845abc8e30fff", "sha256": "91be27353299562dfab07e85622f3d18d81d9528c95732ba69e0b3680b601050" }, "downloads": -1, "filename": "django-rapid-prototyping-0.7.tar.gz", "has_sig": false, "md5_digest": "e834927b71ff1b8b1c3845abc8e30fff", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15634, "upload_time": "2013-10-01T18:57:17", "url": "https://files.pythonhosted.org/packages/3e/11/0352f01133e490cd215810c1ade0fad44cde3d5881c42fdafe4e5757bc2c/django-rapid-prototyping-0.7.tar.gz" } ], "0.8": [ { "comment_text": "", "digests": { "md5": "031084c188d7fbbccc23db5cea3b8033", "sha256": "7f062496855c15097f27fa5004bdfe14072eaffd54a391f0d7ffe56244a806fc" }, "downloads": -1, "filename": "django-rapid-prototyping-0.8.tar.gz", "has_sig": false, "md5_digest": "031084c188d7fbbccc23db5cea3b8033", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15762, "upload_time": "2013-10-10T01:39:14", "url": "https://files.pythonhosted.org/packages/06/36/3535cf33552502ea2a84dd43dbeb9199b493db31f2a253e54088899f39d7/django-rapid-prototyping-0.8.tar.gz" } ], "0.9": [ { "comment_text": "", "digests": { "md5": "76ebc79a0ab312eff878683e6f573e8e", "sha256": "1a0f0e9ef1be862a14c864f26ca1843cdc5f3917cafbd9b3c31c17219a0dc204" }, "downloads": -1, "filename": "django-rapid-prototyping-0.9.tar.gz", "has_sig": false, "md5_digest": "76ebc79a0ab312eff878683e6f573e8e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15803, "upload_time": "2014-01-14T08:09:18", "url": "https://files.pythonhosted.org/packages/b4/f4/dd8745687d75f838d9c49cb429a4b72da3d2e938358f0d83fcad04e685fa/django-rapid-prototyping-0.9.tar.gz" } ], "1.0": [ { "comment_text": "", "digests": { "md5": "8f66ed3d22f38cb94709d225aeec054e", "sha256": "ecc3c799e85169e8085d57da2cf5682caec854c45dccabc528218ea0949fdb57" }, "downloads": -1, "filename": "django-rapid-prototyping-1.0.tar.gz", "has_sig": false, "md5_digest": "8f66ed3d22f38cb94709d225aeec054e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15131, "upload_time": "2016-06-17T21:41:24", "url": "https://files.pythonhosted.org/packages/ca/36/acbd52dc903cd62f05ebd806fe12494ee39c5e5cf64fba2eb79e58dbac67/django-rapid-prototyping-1.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "8f66ed3d22f38cb94709d225aeec054e", "sha256": "ecc3c799e85169e8085d57da2cf5682caec854c45dccabc528218ea0949fdb57" }, "downloads": -1, "filename": "django-rapid-prototyping-1.0.tar.gz", "has_sig": false, "md5_digest": "8f66ed3d22f38cb94709d225aeec054e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15131, "upload_time": "2016-06-17T21:41:24", "url": "https://files.pythonhosted.org/packages/ca/36/acbd52dc903cd62f05ebd806fe12494ee39c5e5cf64fba2eb79e58dbac67/django-rapid-prototyping-1.0.tar.gz" } ] }