{ "info": { "author": "Miljan Karadzic", "author_email": "miljank@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Web Environment", "Framework :: Django", "Framework :: Django :: 1.10", "Framework :: Django :: 1.11", "Framework :: Django :: 1.8", "Framework :: Django :: 1.9", "Intended Audience :: Developers", "Intended Audience :: System Administrators", "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Topic :: Internet :: WWW/HTTP" ], "description": "Django Portmaster\n=================\n\nDjango Portmaster is a network port allocation and management\nmicroservice. With Portmaster, you can assign port ranges to different\nservices and register ports to different instances of those service.\nThis way you can prevent assigning the same port twice, thus preventing\nassignement collision.\n\nInstallation\n------------\n\n1. Install using PIP.\n\n::\n\n pip install django-portmaster\n\n2. Add app to your Django project's settings file and include offer\n cleanup middleware.\n\n.. code:: python\n\n INSTALLED_APPS = [\n [..]\n 'django_portmaster'\n ]\n\n MIDDLEWARE = [\n [..]\n 'django_portmaster.middleware.CleanOldOffersMiddleware'\n ]\n\n3. Include Portmaster's URLs into your Django project's urls file.\n\n.. code:: python\n\n from django_portmaster.urls import portmaster_urlpatterns\n urlpatterns += portmaster_urlpatterns\n\n4. Optionally, you can override the time offers are kept before they are\n deleted. Add the following code to you settings.py file.\n\n.. code:: python\n\n # Default value is 30 minutes\n PM_DELETE_OFFERS_AFTER_MINUTES = 10\n\nAPI\n---\n\n- Define port range by creating a service.\n\n.. code:: javascript\n\n POST /v1/services\n\n {\n \"name\": \"django\",\n \"description\": \"Django service\",\n \"start\": 5000,\n \"end\": 10000\n }\n\n- Request a port from the range by providing a service instance name.\n\n.. code:: javascript\n\n POST /v1/services/django/offers\n\n {\n \"name\": \"web-01\"\n }\n\nResponse\n\n.. code:: javascript\n\n {\n \"service\": \"django\",\n \"name\": \"web-01\",\n \"port\": 5000,\n \"secret\": \"6f8ffc86-d98a-49ba-848a-a7cbaaea9360\",\n \"created\": \"2017-09-08T14:16:39.277408Z\"\n }\n\n- Port will not be allocated immediately. Instead it will be reserved\n until the client accepts the port by posting to the dedicated URL\n using the provided secret code:\n\n.. code:: javascript\n\n POST /v1/services/django/offers/6f8ffc86-d98a-49ba-848a-a7cbaaea9360/accept\n\nResponse\n\n.. code:: javascript\n\n {\n \"service\": \"django\",\n \"name\": \"web-01\",\n \"port\": 5000,\n \"created\": \"2017-09-08T14:18:04.094357Z\"\n }\n\n- Alternatively, you can reject the offer. Offers that are not accepted\n are automatically deleted by Portmaster middleware after they reach\n threshold set by ``PM_DELETE_OFFERS_AFTER_MINUTES`` setting (default\n value is 30 minutes).\n\n.. code:: javascript\n\n POST /v1/services/django/offers/6f8ffc86-d98a-49ba-848a-a7cbaaea9360/reject\n\n- You can list all port alocations for a particular service.\n\n.. code:: javascript\n\n GET /v1/services/django/ports\n\n- Find one by port number\n\n.. code:: javascript\n\n GET /v1/services/django/ports/5000\n\n- Or find one by service instance name\n\n.. code:: javascript\n\n GET /v1/services/django/ports/web-01\n\nSafe guards\n-----------\n\nPortmaster includes multiple error checks and corner case handlers, so:\n\n- Service name needs to be unique\n- Port ranges can not overlap\n- Port range can not overlap with privileged ports (<1024) or IANA\n defined ephemeral port range (>49152)\n- Port can be assigned only once at any given time\n- Service instance name needs to be unique\n\n\n", "description_content_type": null, "docs_url": null, "download_url": "https://github.com/miljank/django-portmaster/archive/0.0.1.tar.gz", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/miljank/django-portmaster", "keywords": "", "license": "BSD", "maintainer": "", "maintainer_email": "", "name": "django-portmaster", "package_url": "https://pypi.org/project/django-portmaster/", "platform": "", "project_url": "https://pypi.org/project/django-portmaster/", "project_urls": { "Download": "https://github.com/miljank/django-portmaster/archive/0.0.1.tar.gz", "Homepage": "https://github.com/miljank/django-portmaster" }, "release_url": "https://pypi.org/project/django-portmaster/0.0.1/", "requires_dist": [ "Django (>=1.11)", "djangorestframework (>=3.6)", "drf-nested-routers (>=0.90)" ], "requires_python": "", "summary": "A Django microservice for network port allocation", "version": "0.0.1" }, "last_serial": 3159499, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "037d6ffb264cf040c8b69fbbee21216d", "sha256": "840fb9471e08c6466bfd41863f0f8872e60b5e48252c6a867b4998cf8ba24991" }, "downloads": -1, "filename": "django_portmaster-0.0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "037d6ffb264cf040c8b69fbbee21216d", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 16016, "upload_time": "2017-09-08T15:21:41", "url": "https://files.pythonhosted.org/packages/20/fc/0ddd264f241ce83cb3b671854a299e3a45394eeb8c3e3feb46496be3553d/django_portmaster-0.0.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "507fc08b5aba4822c97e2370285fb629", "sha256": "262645afb6ad75a4044e0392fe66a2007aaa3225d601d7080c7eebd37568da72" }, "downloads": -1, "filename": "django-portmaster-0.0.1.tar.gz", "has_sig": false, "md5_digest": "507fc08b5aba4822c97e2370285fb629", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9320, "upload_time": "2017-09-08T15:21:42", "url": "https://files.pythonhosted.org/packages/49/32/d140aea7df08b94fea634d94c41683b07ce96f2c4843c4397073e3a381d8/django-portmaster-0.0.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "037d6ffb264cf040c8b69fbbee21216d", "sha256": "840fb9471e08c6466bfd41863f0f8872e60b5e48252c6a867b4998cf8ba24991" }, "downloads": -1, "filename": "django_portmaster-0.0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "037d6ffb264cf040c8b69fbbee21216d", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 16016, "upload_time": "2017-09-08T15:21:41", "url": "https://files.pythonhosted.org/packages/20/fc/0ddd264f241ce83cb3b671854a299e3a45394eeb8c3e3feb46496be3553d/django_portmaster-0.0.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "507fc08b5aba4822c97e2370285fb629", "sha256": "262645afb6ad75a4044e0392fe66a2007aaa3225d601d7080c7eebd37568da72" }, "downloads": -1, "filename": "django-portmaster-0.0.1.tar.gz", "has_sig": false, "md5_digest": "507fc08b5aba4822c97e2370285fb629", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9320, "upload_time": "2017-09-08T15:21:42", "url": "https://files.pythonhosted.org/packages/49/32/d140aea7df08b94fea634d94c41683b07ce96f2c4843c4397073e3a381d8/django-portmaster-0.0.1.tar.gz" } ] }