{ "info": { "author": "Graphenex Team", "author_email": "graphenex.project@protonmail.com", "bugtrack_url": null, "classifiers": [ "Intended Audience :: Developers", "Intended Audience :: End Users/Desktop", "Intended Audience :: System Administrators", "License :: OSI Approved :: GNU General Public License v3 (GPLv3)", "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.7", "Topic :: Security", "Topic :: Utilities" ], "description": "![grapheneX](https://user-images.githubusercontent.com/24392180/60434254-65ed3e00-9c0f-11e9-8b73-73f9a1b25f60.png)\n\n# grapheneX [![Release](https://img.shields.io/github/release/grapheneX/grapheneX.svg?style=flat-square)](https://github.com/grapheneX/grapheneX/releases)\n\n[![PyPI](https://img.shields.io/pypi/v/graphenex.svg?style=flat-square)](https://pypi.org/project/graphenex)\n[![AUR](https://img.shields.io/aur/version/graphenex.svg?style=flat-square)](https://aur.archlinux.org/packages/graphenex/)\n[![Docker Build](https://img.shields.io/docker/cloud/build/graphenex/graphenex.svg?style=flat-square)](https://hub.docker.com/r/graphenex/graphenex/builds)\n[![Issues](https://img.shields.io/github/issues/grapheneX/grapheneX.svg?style=flat-square)](https://github.com/grapheneX/grapheneX/issues)\n[![Pull Requests](https://img.shields.io/github/issues-pr/grapheneX/grapheneX.svg?style=flat-square)](https://github.com/grapheneX/grapheneX/pulls)\n[![Stars](https://img.shields.io/github/stars/grapheneX/grapheneX.svg?style=flat-square)](https://github.com/grapheneX/grapheneX/stargazers)\n[![Forks](https://img.shields.io/github/forks/grapheneX/grapheneX.svg?style=flat-square)](https://github.com/grapheneX/grapheneX/network)\n[![License](https://img.shields.io/github/license/grapheneX/grapheneX.svg?style=flat-square)](./LICENSE)\n\n> In computing, hardening is usually the process of securing a system by reducing its surface of vulnerability, which is larger when a system performs more functions; in principle a single-function system is more secure than a multipurpose one. Reducing available ways of attack typically includes changing default passwords, the removal of unnecessary software, unnecessary usernames or logins, and the disabling or removal of unnecessary services.\n\nAlthough the current technology tries to design systems as safe as possible, security flaws and situations that can lead to vulnerabilities caused by unconscious use and missing configurations still exist.\nThe user must be knowledgeable about the technical side of system architecture and should be aware of the importance of securing his/her system from vulnerabilities like this. \nUnfortunately, it's not possible to know all the details about hardening and necessary commands for every ordinary user and the hardening remains to be a technical issue due to the difficulty of understanding operating system internals. \nTherefore there are hardening checklists that contain various commands and rules of the specified operating system available such as [trimstray/linux-hardening-checklist](https://github.com/trimstray/linux-hardening-checklist) & [Windows Server Hardening Checklist](https://www.upguard.com/blog/the-windows-server-hardening-checklist) on the internet for providing a set of commands with their sections and of course simplifying the concept for the end user.\nBut still, the user must know the commands and apply the hardening manually depending on the system. That's where the `grapheneX` exactly comes in play.\n\n> The project name is derived from the 'graphene'. Graphene is a one-atom-thick layer of carbon atoms arranged in a hexagonal lattice. In proportion to its thickness, it is about 100 times stronger than the strongest steel.\n\n`grapheneX` project aims to provide a framework for securing the system with hardening commands automatically. \nIt's designed for the end user as well as the Linux and Windows developers due to the interface options. (interactive shell/web interface) \nIn addition to that, `grapheneX` can be used to secure a web server/application.\n\nHardening commands and the scopes of those commands are referred to `modules` and the `namespaces` in the project.\nThey exist at the `modules.json` file after installation. (`$PYPATH/site-packages/graphenex/modules.json`)\nAdditionally, it's possible to add, edit or remove modules and namespaces. \nAlso, the hardening operation can be automated with the presets that contain a list of modules.\n\nCurrently, grapheneX support the hardening sections below. Each of these namespaces contains more than one module.\n\n\u2022 Firewall \n\u2022 User \n\u2022 Network \n\u2022 Services \n\u2022 Kernel \n\u2022 Filesystem \n\u2022 Other\n\n## Installation\n\nYou can install `grapheneX` with `pip`. Usually this is the easiest way:\n\n```\npip install graphenex\n```\nOr if you get an error try:\n\n```\npython3 -m pip install graphenex\n```\n\nAlso it's possible to run the `setup.py` for installation as follows:\n\n```\npython setup.py install \n```\n\nThe commands below can be used for testing the project without installation:\n\n```\ncd grapheneX\npipenv install\npipenv run python -m graphenex\n```\n### Dependencies\n\n* [Flask-SocketIO](https://flask-socketio.readthedocs.io/en/latest/)\n * [Flask](http://flask.pocoo.org/)\n* [coloredlogs](https://pypi.org/project/coloredlogs/)\n* [colorama](https://pypi.org/project/colorama/)\n* [terminaltables](https://pypi.org/project/terminaltables/)\n* [PyInquirer](https://pypi.org/project/PyInquirer/)\n\n## Usage\n\n### Command Line Arguments\n\n```\nusage: grapheneX [-h] [-v] [-w] [--open] [host:port]\n```\n```\npositional arguments:\n host:port host and port to run the web interface\n\noptional arguments:\n -h, --help show this help message and exit\n -v, --version show version information\n -w, --web run the grapheneX web server\n --open open browser on web server start\n```\n\n### Interactive Shell\n\nExecute the `grapheneX` command in order to start the interactive shell.\n\n![GrapheneX Interactive Shell](https://user-images.githubusercontent.com/24392180/61892273-16e7af80-af14-11e9-91d8-8c7682439f06.gif)\n\n\u2022 Animated gifs and screenshots added for demonstration and include the test execution of the unversioned grapheneX. Use `grapheneX` or `python -m graphenex` command for the execution. \n\u2022 grapheneX currently supports [Python3.7](https://www.python.org/)\n\n### Web Interface\n\nExecute the `grapheneX` with the `-w` or `--web` argument in order to start the web server. \n\n![Starting the Web Server](https://user-images.githubusercontent.com/24392180/61898426-f292cf80-af21-11e9-9edc-21f0351bbf5b.gif)\n\n\u2022 Web interface has the authentication system that requires an `access token`. Once the user verifies her/his identity with the given token at the shell, grapheneX creates a session for further use.\n\n![GrapheneX Web Interface I](https://user-images.githubusercontent.com/24392180/61898886-fd019900-af22-11e9-9d1e-e2a58bee6651.gif)\n\n![GrapheneX Web Interface II](https://user-images.githubusercontent.com/24392180/60525198-9bb92200-9cf6-11e9-80c6-9b69b5d10c81.gif)\n\n\n\u2022 The default host and port value are `localhost:8080`. It can be changed via the `host:port` argument as shown below.\n\n```\npython grapheneX.py -w 192.168.1.36:8090\n```\n\n\u2022 Use `--open` argument to open the browser after the server start. \n\n```\npython grapheneX.py -w --open\n```\n\n## CLI Commands\n\n| Command \t| Description \t |\n|---------\t|------------------------------------------------------------------------------ |\n| back \t| Go back from namespace or module \t |\n| clear \t| Clear the terminal \t |\n| exit \t| Exit interactive shell \t |\n| harden \t| Execute the hardening command \t |\n| help \t| List available commands with \"help\" or show detailed help with \"help ``\" |\n| info \t| Show information about the module \t |\n| list \t| List available hardening modules \t |\n| manage \t| Add, edit or delete module \t |\n| preset \t| Show/execute the hardening module presets \t |\n| search \t| Search for modules \t |\n| switch \t| Switch between modules or namespaces \t |\n| use \t| Use a hardening module \t |\n| web \t| Start the grapheneX web server \t |\n\n### help\n\n`help` or `?` shows the commands list above. \n`help [CMD]` shows the detailed usage of given command.\n\n### list\n\nShow the available modules in a table.\nFor example:\n\n![List Command](https://user-images.githubusercontent.com/24392180/60528104-5e579300-9cfc-11e9-9a01-ac827fd365b1.gif)\n\n### switch\n\n`switch` command can be used to switch to a namespace or use a module. It's helpful if you want to see a list of modules in a namespace.\n\n```\nswitch [NAMESPACE]\n```\n\n![Switch Command](https://user-images.githubusercontent.com/24392180/60528986-46810e80-9cfe-11e9-9870-00333657fdee.gif)\n\n\u2022 Supports autocomplete for namespaces.\n\nAlso, using the `switch` command like this is possible:\n\n```\nswitch [NAMESPACE]/[MODULE]\n```\n\nIt's the equivalent of the `use` command in this situation.\n\n### use\n\nServes the purpose of selecting a hardening module.\n\n```\nuse [MODULE]\n```\n\n![Use Command](https://user-images.githubusercontent.com/24392180/60530449-69f98880-9d01-11e9-93a9-4f612e4ed7ad.gif)\n\n\u2022 Supports autocomplete for modules.\n\n### info\n\nShows information (namespace, description, OS command) about the selected module.\n\n![Info Command](https://user-images.githubusercontent.com/24392180/60531173-02dcd380-9d03-11e9-9410-a59e6ed3d5a4.gif)\n\n### harden\n\nExecutes the hardening command of the selected module.\n\n![Harden Command](https://user-images.githubusercontent.com/24392180/60531788-67e4f900-9d04-11e9-8960-2d2f2a7289f0.gif)\n\n### preset\n\ngrapheneX has presets that contain particular modules for automating the hardening operation. Presets can be customized with the `modules.json` file and they can contain any supported module. `preset` command shows the available module presets and `preset [PRESET]` runs the hardening commands in a preset.\n\n![Show Presets](https://user-images.githubusercontent.com/24392180/60548388-a097c900-9d2a-11e9-8927-bbbd90493430.gif)\n\nAn example `preset` command output is shown above. Below, a preset that contains 2 modules is selected and hardening modules executed.\n\n![Preset Command](https://user-images.githubusercontent.com/24392180/60548929-0cc6fc80-9d2c-11e9-9bff-01882feb6b9f.gif)\n\n`preset` command supports autocomplete for preset names. Also, it supports an option for asking permission between each hardening command execution so that the user knows what he/she is doing.\n\n\u2022 Adding module presets\n\nPresets are stored in the `presets` element inside the `modules.json` file. This JSON file can be edited for updating the presets.\n\n```\n\"presets\": [\n {\n \"name\": \"Preset_1\",\n \"modules\": [\n \"namespace1/Module_Name1\",\n \"namespace2/Module_Name2\",\n ],\n \"target_os\": \"linux/win\"\n },\n {\n \"name\": \"Preset_2\",\n \"modules\": [\n \"namespace/All\"\n ],\n \"target_os\": \"linux/win\"\n }\n ]\n```\n\n`namespace/All` means every hardening command in that `namespace` will be executed.\n\n### search\n\n```\nsearch [QUERY]\n```\n\n![Search Command](https://user-images.githubusercontent.com/24392180/60532081-26a11900-9d05-11e9-87da-ee7eefd3ab90.gif)\n\n### manage\n\n`manage` command allows to add, edit or remove modules.\n\n\u2022 Adding modules with `manage`\n\nFollow the instructions for adding a new module. Choose the 'new' option in the namespace prompt for creating a new namespace.\n\n![Adding Module](https://user-images.githubusercontent.com/24392180/60544556-b1900c80-9d21-11e9-8013-69be929fdf53.gif)\n\n\u2022 Adding modules manually\n\ngrapheneX stores the modules and namespaces in `modules.json` file. It will show up as a new module when a new element is created in this JSON file. An example element is given below.\n\n```\n\"namespace\": [\n {\n \"name\": \"Module_Name\",\n \"desc\": \"This is the module description.\",\n \"command\": \"echo 'hardening command'\",\n \"require_superuser\": \"True/False\",\n \"target_os\": \"linux/win\"\n }\n ]\n```\n\nIt's recommended to add modules from CLI or the Web interface other than editing the `modules.json` file.\n\n\u2022 Editing modules\n\nChoose the `edit` option after the `manage` command for the editing the module properties.\n\n![Editing Module](https://user-images.githubusercontent.com/24392180/60545208-30d21000-9d23-11e9-8b5d-e85a52521180.gif)\n\nOr edit the `modules.json` manually.\n\n\u2022 Removing modules\n\nChoosing the `remove` option in the `manage` menu will be enough for removing the specified module. It's also possible to remove the module from `modules.json` manually.\n\n![Removing Module](https://user-images.githubusercontent.com/24392180/60545589-18aec080-9d24-11e9-9e3f-2385f05ecf09.gif)\n\n### web\n\nStarts the grapheneX web server with the optional `host:port` argument.\n\n```\nweb [host:port]\n```\n\n![Web Command](https://user-images.githubusercontent.com/24392180/60546423-f027c600-9d25-11e9-8d45-e9cd9373d9bd.gif)\n\n\n### back\n\nGo back from selected namespace or module.\n\n### clear\n\nClear terminal\n\n### exit\n\nExit interactive shell\n\n## Web\n\nMost of the command line features are accessible with the Web interface.\n\n### Namespaces & Modules\n\nIt's easy to switch between namespaces and see details of modules.\n\n![Namespaces and Modules](https://user-images.githubusercontent.com/24392180/60549923-02f2c880-9d2f-11e9-9ee2-b3f58afeb5fd.gif)\n\n### Hardening\n\nJust click `run` under the module properties for executing the hardening command.\n\n![Hardening](https://user-images.githubusercontent.com/24392180/60551119-f2dce800-9d32-11e9-9e4b-126354778e9f.gif)\n\n### Adding Modules\n\nThere's a menu available in the web interface for adding new modules.\n\n![Adding Modules](https://user-images.githubusercontent.com/24392180/60551262-6c74d600-9d33-11e9-8c3e-f553fafdda74.gif)\n\n### System Monitor\n\nIt's possible to display various system information such as disk usage and network state at the Web interface.\n\n![System Monitor](https://user-images.githubusercontent.com/24392180/64130757-12dd6600-cdcd-11e9-9be8-39395e104974.gif)\n\n## Docker\n### Building the image\n```sh\ndocker build -t graphenex .\n```\n### Running the container\n```sh\ndocker run --rm --name graphenex -p 8080:8080 --privileged graphenex\n```\n\n## Screenshots\n\n![Screenshot I](https://user-images.githubusercontent.com/24392180/60615641-47866e80-9dd8-11e9-92fe-dfa8874db8fd.jpg)\n\n![Screenshot II](https://user-images.githubusercontent.com/24392180/60601258-7e4d8c00-9dba-11e9-93e1-96411b76b462.png)\n\n![Screenshot III](https://user-images.githubusercontent.com/24392180/60625283-9be51a80-9de7-11e9-99ea-46875d8b3ed8.JPG)\n\n![Screenshot IV](https://user-images.githubusercontent.com/24392180/60625314-bae3ac80-9de7-11e9-98ef-e5fa69c3be38.JPG)\n\n![Screenshot V](https://user-images.githubusercontent.com/24392180/60625373-eb2b4b00-9de7-11e9-9e9a-ab1869af9b1a.JPG)\n\n## TODO(s)\n\n* Add new modules for Linux and Windows.\n\n* Add `-w` support to Docker image\n\n## Contributing\n\nFor contributing to this project, see [CONTRIBUTING.md](./CONTRIBUTING.md)\n\n## Contributors \u2728\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n
\"orhun\"/
orhun

\ud83d\udcbb \ud83d\udcd6 \ud83d\udcc6 \ud83d\udcac \ud83e\udd14 \ud83d\udc40
\"Faruk\"/
Faruk

\ud83d\udcbb \ud83c\udfa8 \ud83d\udce6 \ud83e\udd14 \ud83d\udc40
\"EnesOkutan\"/
EnesOkutan

\ud83d\udcbb \ud83e\udd14 \ud83d\udc40
\"Efe
Efe Ayd\u0131n

\ud83d\udcbb \ud83e\udd14 \ud83d\udc40
\"ibanez75612\"/
ibanez75612

\ud83d\udcbb \ud83d\udce6 \ud83d\udc40
\"Emperor
Emperor Federico

\ud83d\udcbb
\"Taylan\"/
Taylan

\ud83d\ude87
\"zero77\"/
zero77

\ud83d\udcd6
\n\n\n\nThis project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!\n\n## Sponsors\n\nWe don't have any sponsors yet. Contact us with email if you want to help us improve the project.\n\n## License\n\nGNU General Public License v3.0 ([gpl](https://www.gnu.org/licenses/gpl.txt))\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/grapheneX/grapheneX", "keywords": "", "license": "GPLv3", "maintainer": "", "maintainer_email": "", "name": "graphenex", "package_url": "https://pypi.org/project/graphenex/", "platform": "", "project_url": "https://pypi.org/project/graphenex/", "project_urls": { "Homepage": "https://github.com/grapheneX/grapheneX" }, "release_url": "https://pypi.org/project/graphenex/1.2.2/", "requires_dist": [ "flask-socketio", "coloredlogs", "colorama", "terminaltables", "pyinquirer", "psutil" ], "requires_python": "", "summary": "Automated System Hardening Framework for Linux & Windows", "version": "1.2.2" }, "last_serial": 5989415, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "93bc465be6dec3797f650f712946d8d6", "sha256": "eba5ea3fc4c1f35d0ba6cdd9f4e9bd8cd6220900826537b30d48c2b74b178c5d" }, "downloads": -1, "filename": "graphenex-1.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "93bc465be6dec3797f650f712946d8d6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 1508522, "upload_time": "2019-07-03T13:57:41", "url": "https://files.pythonhosted.org/packages/70/bf/33abacfbbb4adb31f50648a7bed82b9bbb2790345a4f9dfcc399368afe8d/graphenex-1.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7ab8702e516f69369d036a87b682d2a7", "sha256": "daec64acf3658b71056395a856e8caa6269e493ac27c27407f99464d1a52b7c5" }, "downloads": -1, "filename": "graphenex-1.0.0.tar.gz", "has_sig": false, "md5_digest": "7ab8702e516f69369d036a87b682d2a7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1497640, "upload_time": "2019-07-03T13:58:02", "url": "https://files.pythonhosted.org/packages/9a/16/be0e710177751959f160d3f21c0d910cc9d0aa874d3550804d20ef96cedb/graphenex-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "be56cdab03ba5682eab11a340764fe36", "sha256": "99e31f58c06ec1ab1344ee27b27762f61361a5916c4a9d572b831600298d545b" }, "downloads": -1, "filename": "graphenex-1.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "be56cdab03ba5682eab11a340764fe36", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 1505445, "upload_time": "2019-07-22T15:19:43", "url": "https://files.pythonhosted.org/packages/25/e1/3df6e1bf7f7bb6152b1ef68bf420824f4dff59d9dd9797369ffa7f698c67/graphenex-1.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d65860fe07575dcccf908f10627f7884", "sha256": "18573dd0884f86c89d026b78040d88131d9179daa0807b97cf14020f05d2e875" }, "downloads": -1, "filename": "graphenex-1.0.1.tar.gz", "has_sig": false, "md5_digest": "d65860fe07575dcccf908f10627f7884", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1495121, "upload_time": "2019-07-22T15:19:52", "url": "https://files.pythonhosted.org/packages/71/e4/5ca7e415275c0c46c6506078e8eb4260a4378b65b86397667dc825b188bb/graphenex-1.0.1.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "ffce4ce9f47c66140691a8e5a780938f", "sha256": "105cb1c8bf7c8838d692173dd75a341edc72084f4ea144f1306ff96cb7e37966" }, "downloads": -1, "filename": "graphenex-1.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "ffce4ce9f47c66140691a8e5a780938f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 1521472, "upload_time": "2019-07-26T20:15:56", "url": "https://files.pythonhosted.org/packages/93/09/cf08dffbdf267fd0e5bb94e0cadf82a64f5bd5f277376e6e1504e50a28fa/graphenex-1.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8b46e125c4886ec332065cfa00c8feed", "sha256": "a745a541643f7675e0a6253e1e3fb61aee2296307823d70524df88249989ee9d" }, "downloads": -1, "filename": "graphenex-1.1.0.tar.gz", "has_sig": false, "md5_digest": "8b46e125c4886ec332065cfa00c8feed", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1512714, "upload_time": "2019-07-26T20:16:05", "url": "https://files.pythonhosted.org/packages/81/a2/23b43366c26e613458b67e6872d613ff36eaa51f51c26ea760036de6524c/graphenex-1.1.0.tar.gz" } ], "1.1.1": [ { "comment_text": "", "digests": { "md5": "f087cce56b4b5880e4239a448048c8be", "sha256": "a106841c76e483abd6d91d0be8dae3b2e2e90e78d79575f2076546466416f6f3" }, "downloads": -1, "filename": "graphenex-1.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "f087cce56b4b5880e4239a448048c8be", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 1521703, "upload_time": "2019-07-31T09:54:54", "url": "https://files.pythonhosted.org/packages/cc/02/7f0e818c1e6ef0b763e8908ad1f6533a313c225dc1debcff4357af109d1c/graphenex-1.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4578f3bffaa49edd8ca2be4830b20e77", "sha256": "a675ed6af6239ed4290b98e98bc120ba485b1e60c5055ff5753273c8c9a0f1a3" }, "downloads": -1, "filename": "graphenex-1.1.1.tar.gz", "has_sig": false, "md5_digest": "4578f3bffaa49edd8ca2be4830b20e77", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1513216, "upload_time": "2019-07-31T09:55:03", "url": "https://files.pythonhosted.org/packages/06/6f/9115c73ef7340b32812995523c7754b1dea063ef373f1ea9446cdc5ee5f1/graphenex-1.1.1.tar.gz" } ], "1.1.2": [ { "comment_text": "", "digests": { "md5": "92ed0577a8755d1c2e986b28b8e68273", "sha256": "b98509e4a7330825fa144553b8691ba90ffab9398f47e600eeb62b7ea914961c" }, "downloads": -1, "filename": "graphenex-1.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "92ed0577a8755d1c2e986b28b8e68273", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 1521716, "upload_time": "2019-08-20T13:42:30", "url": "https://files.pythonhosted.org/packages/2c/04/5eb3dd22e5ddd9d82cbe1eba57f06640501c2ff2b27a773a98c78e74a101/graphenex-1.1.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b5b6315b0ad5f661c2135af7fcf54cea", "sha256": "eb57c7e25822d87d94fee07d77ff3aa57d7590fa1bd8b48a9a8690c3da4bf88d" }, "downloads": -1, "filename": "graphenex-1.1.2.tar.gz", "has_sig": false, "md5_digest": "b5b6315b0ad5f661c2135af7fcf54cea", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1513188, "upload_time": "2019-08-20T13:42:39", "url": "https://files.pythonhosted.org/packages/0e/a1/3005705ed4fc6fd6f9c9f2719e45a0afa79b0d02095bf0dea1a05e4db13b/graphenex-1.1.2.tar.gz" } ], "1.1.3": [ { "comment_text": "", "digests": { "md5": "5f66431acd369b15bcac4248ce3b4997", "sha256": "5b610cc2f2df71e90589f42119471a1bec88bce94d4728eea93a38df5e820dad" }, "downloads": -1, "filename": "graphenex-1.1.3-py3-none-any.whl", "has_sig": false, "md5_digest": "5f66431acd369b15bcac4248ce3b4997", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 1521665, "upload_time": "2019-08-22T14:30:45", "url": "https://files.pythonhosted.org/packages/00/fb/0f8bbd4e562dfeed4a07d32cfc126c9cd775fe138b54a9a536397a572f89/graphenex-1.1.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "235bcacd3de7418406897540b45a6159", "sha256": "0bea485e9faeb4f0f92f56a6ba4583927598d7c1327b578e7adb7eafaaaf5d17" }, "downloads": -1, "filename": "graphenex-1.1.3.tar.gz", "has_sig": false, "md5_digest": "235bcacd3de7418406897540b45a6159", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1513163, "upload_time": "2019-08-22T14:30:54", "url": "https://files.pythonhosted.org/packages/04/b6/409c15b2cc3f8fc26fee240d4b6ffe940327fa880116eb4013bd5185b59f/graphenex-1.1.3.tar.gz" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "796556895e345e59aa62042907efcaff", "sha256": "f1eee2f28a13595908a196c047fae5f5a8fc253c3ca81cb74860ffdbad2190f0" }, "downloads": -1, "filename": "graphenex-1.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "796556895e345e59aa62042907efcaff", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 1524465, "upload_time": "2019-09-02T19:16:02", "url": "https://files.pythonhosted.org/packages/8c/69/c324c221311bef01a5ba297ac3e39712adee2fd3eedf5ccacd208e103c7e/graphenex-1.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "44bdbf8dcd024c9ecb8eb1cf5d800eef", "sha256": "9bf66717c4038e0f80a87b07058139a35fcc6637410d82fe3cc437de0b178498" }, "downloads": -1, "filename": "graphenex-1.2.0.tar.gz", "has_sig": false, "md5_digest": "44bdbf8dcd024c9ecb8eb1cf5d800eef", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1515392, "upload_time": "2019-09-02T19:16:10", "url": "https://files.pythonhosted.org/packages/d5/22/27812b316cceac297933f9cfb9d76e1c4481fd49138756eb8aaa6d51a21b/graphenex-1.2.0.tar.gz" } ], "1.2.1": [ { "comment_text": "", "digests": { "md5": "92f4b7c7fe9386893aa138ff28409da5", "sha256": "1a09b5f0ea5d051a1626bcc45e119750470ef6b57429548f69bcb32336fb5483" }, "downloads": -1, "filename": "graphenex-1.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "92f4b7c7fe9386893aa138ff28409da5", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 1524511, "upload_time": "2019-10-03T18:45:54", "url": "https://files.pythonhosted.org/packages/6e/4f/aab145fd6efe819854556869d010427702228ae64362e09b04b68a66ff65/graphenex-1.2.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3a22b94387a2c4bc17b9b85c5e8e326c", "sha256": "a3607553f8b8fdf87fc0c7f96e99e3cae8599c7ecee6526145690387249bae9a" }, "downloads": -1, "filename": "graphenex-1.2.1.tar.gz", "has_sig": false, "md5_digest": "3a22b94387a2c4bc17b9b85c5e8e326c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1515148, "upload_time": "2019-10-03T18:46:03", "url": "https://files.pythonhosted.org/packages/04/46/a10adbcbdbe68121b6c46ab87dbe00c847ee9b3c36859dd7d9a4c5cfb376/graphenex-1.2.1.tar.gz" } ], "1.2.2": [ { "comment_text": "", "digests": { "md5": "e172746f5d9dd4d255426b2f46103aa7", "sha256": "64c3e4cf421d4d4ffc538333e9ac17e62f5444191bc2e5442cab4df3bb5bb950" }, "downloads": -1, "filename": "graphenex-1.2.2-py3-none-any.whl", "has_sig": false, "md5_digest": "e172746f5d9dd4d255426b2f46103aa7", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 1524510, "upload_time": "2019-10-17T12:17:18", "url": "https://files.pythonhosted.org/packages/34/93/60a9c13660dc7c99ca1321bcdebe4e4a683d9430f5e4003137d0e6ac8bba/graphenex-1.2.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "558de7f722996af5c687bb048ca36f0e", "sha256": "38a25deb20e5be7f5ba6e1198b0532787d8557c9476e4068094eff5e590a2614" }, "downloads": -1, "filename": "graphenex-1.2.2.tar.gz", "has_sig": false, "md5_digest": "558de7f722996af5c687bb048ca36f0e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1515152, "upload_time": "2019-10-17T12:17:27", "url": "https://files.pythonhosted.org/packages/c5/07/0b8fef8343021cebd2e2ddb12b1aefc6897be9eb1492c218651efa23610a/graphenex-1.2.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "e172746f5d9dd4d255426b2f46103aa7", "sha256": "64c3e4cf421d4d4ffc538333e9ac17e62f5444191bc2e5442cab4df3bb5bb950" }, "downloads": -1, "filename": "graphenex-1.2.2-py3-none-any.whl", "has_sig": false, "md5_digest": "e172746f5d9dd4d255426b2f46103aa7", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 1524510, "upload_time": "2019-10-17T12:17:18", "url": "https://files.pythonhosted.org/packages/34/93/60a9c13660dc7c99ca1321bcdebe4e4a683d9430f5e4003137d0e6ac8bba/graphenex-1.2.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "558de7f722996af5c687bb048ca36f0e", "sha256": "38a25deb20e5be7f5ba6e1198b0532787d8557c9476e4068094eff5e590a2614" }, "downloads": -1, "filename": "graphenex-1.2.2.tar.gz", "has_sig": false, "md5_digest": "558de7f722996af5c687bb048ca36f0e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1515152, "upload_time": "2019-10-17T12:17:27", "url": "https://files.pythonhosted.org/packages/c5/07/0b8fef8343021cebd2e2ddb12b1aefc6897be9eb1492c218651efa23610a/graphenex-1.2.2.tar.gz" } ] }