{ "info": { "author": "Carlos Gil Gonzalez", "author_email": "carlosgilglez@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Environment :: Console", "Intended Audience :: Developers", "Intended Audience :: Education", "Intended Audience :: Science/Research", "License :: OSI Approved :: MIT License", "Operating System :: MacOS :: MacOS X", "Operating System :: POSIX :: Linux", "Programming Language :: Python :: 3.6", "Topic :: Scientific/Engineering", "Topic :: Software Development :: Embedded Systems", "Topic :: System :: Monitoring", "Topic :: Terminals" ], "description": "\n\n# uPydev\n\n### Command line tool for wireless Micropython devices\n\n**uPydev** is an acronym of '**Micropy**thon **dev**ice', and it is intended to be a command line tool to make easier the development, prototyping and testing process of devices based on boards running Micropython.\n\n It is a command line tool for 'wireless Micropython devices' since it make use of the [WebREPL protocol](https://github.com/micropython/webrepl) to provide communication with and control of the device.\n\n*uPydev is built on top of other tools/scripts which are:\n\nThe core is 'webrepl_client.py ' : a [Terminal WebREPL protocol](https://github.com/Hermann-SW/webrepl) as seen in this [WebREPL pull request](https://github.com/micropython/webrepl/pull/37) by [@Hermann-SW](https://github.com/Hermann-SW)\n\nOther tools are:\n\n'webrepl_cli.py' for the file transfer protocol (from the WebREPL repo of micropython) (modified and named 'upytool')\n\n'esptool.py' to flash the firmware into esp boards\n\n'mpy-cross' to compile .py scripts into .mpy files.\n\n***Keep in mind that this project is in ALPHA state, sometimes, some commands may not work/return anything***\n\n### Features:\n\n* Command line wireless communication/control of micropython devices.\n* Terminal WebREPL protocol\n* Custom commands to automate communication/control\n* Command line autocompletion\n\n### Getting Started\n\nFirst be sure that the WebREPL daemon is enabled and running see [webrepl-a-prompt-over-wifi](http://docs.micropython.org/en/latest/esp8266/tutorial/repl.html#webrepl-a-prompt-over-wifi) and\n\n[webrepl-web-browser-interactive-prompt](http://docs.micropython.org/en/latest/esp32/quickref.html#webrepl-web-browser-interactive-prompt)\n\n#### Requirements:\n\nWebREPL enabled\n\nPython modules (automatically installed using pip):\n\n[argcomplete](https://github.com/kislyuk/argcomplete) (for command line autocompletion)\n\n[prompt_toolkit](https://github.com/prompt-toolkit/python-prompt-toolkit) (for new WebREPL Terminal implementation)\n\n[mpy-cross](https://gitlab.com/alelec/micropython/tree/gitlab_build/mpy-cross)\n\n[esptool](https://github.com/espressif/esptool)\n\n[python-nmap](http://xael.org/pages/python-nmap-en.html)\n\n[netifaces](https://github.com/al45tair/netifaces)\n\n#### Tested on:\n\nMacOS X (Mojave 10.14.5)\n\nRaspbian GNU/Linux 9 (stretch) *(through ssh session)*\n\n*For Raspbian `pip install mpy-cross` seems to fail, so to install upydev without mpy-cross do:*\n\n```\n$ git clone https://github.com/Carglglz/upydev.git\n[...]\n$ cd upydev\n$ sudo pip3 install . --no-deps -r rpy_rqmnts.txt\n```\n\nupy Boards:\n\nEsp32 Huzzah feather\n\nEsp8266 Huzzah feather\n\n#### Installing using pip:\n\n`$ pip install upydev`\n\n#### Quick Reference:\n\n##### Help:\n\nIn CLI do :\n\n`$ upydev -h`\n\n##### Configurate uPy Device:\n\n1st step: Configurate upy device target and password:\n\n- To save configuration in working directory:\n\n `$ upydev config -t [UPYDEVICE IP] -p [PASSWORD]`\n\n example:\n\n `$ upydev config -t 192.168.1.58 -p mypass`\n\n* To save configuration globally use -g option:\n\n `$ upydev config -t [UPYDEVICE IP] -p [PASSWORD] -g t`\n\n example:\n\n `$ upydev config -t 192.168.1.58 -p mypass -g t`\n\n *upydev will use local working directory configuration unless it does not find any or manually indicated with -g option.*\n\n------\n\n#### uPydev Usage:\n\nUsage:\n\n`$ upydev [Mode] [options] or upydev [upy command] [options]`\n\nThis means that if the first argument is not a Mode keyword or a\nupy command keyword it assumes it is a 'raw' upy command to send to the upy device\n\nExample: Mode\n\n`$ upydev put -f dummy.py`\n\nExample: uPy command\n\n`$ upydev info`\n\nExample: Raw commands\n\n`$ upydev \"my_func()\"`\n\n`$ upydev 2+1`\n\n`$ upydev \"import my_lib;foo();my_var=2*3\"`\n\n------\n\n#### uPydev Mode/Tools:\n\n- **config** : to save upy device settings (*see -p, -t, -g)*,\n so the target and password arguments wont be required any more\n\n- **put** : to upload a file to upy device (*see -f, -s , -dir, -rst; for multiple files see -fre option)*\n\n- **get** : to download a file from upy device (*see -f , -dir, -s; for multiple files see -fre option*)\n\n- **sync** : for a faster transfer of large files\n (this needs sync_tool.py in upy device) (*see -f, -s and -lh*; for multiple files see -fre option)\n\n *> sync_tool.py is under [upyutils](https://github.com/Carglglz/upydev/tree/master/upyutils) directory*\n\n- **cmd** : for debugging purpose, to send command to upy device ; (*see -c, -r, -rl*);\n\n - Examples:\n\n `$ upydev cmd -c \"led.on()\"`\n\n `$ upydev cmd -r \"print('Hello uPy')\"`\n\n ` $ upydev cmd -rl \"function_that_print_multiple_lines()\"`\n\n * *tip: simple commands can be used without quotes;*\n *but for commands with parenthesis or special characters use quotes,*\n *for example: 'dummy_func()' ; use double quotes \"\" when the command*\n *includes a string like this example: \"uos.listdir('/sd')\"*\n\n- **wrepl** :to enter the terminal WebREPL; CTRL-x to exit, CTRL-d to do soft reset\n To see more keybinding info do CTRL-k\n (Added custom keybindings and autocompletion on tab to the previous work\n see: [Terminal WebREPL](https://github.com/Hermann-SW/webrepl) for the original work)\n\n- **srepl** : to enter the terminal serial repl using picocom, indicate port by -port option\n (to exit do CTRL-a, CTRL-x) (see: [Picocom](https://github.com/npat-efault/picocom) for more information)\n\n- **ping** : pings the target to see if it is reachable, *CTRL-C* to stop\n\n- **run** : just calls import 'script', where 'script' is indicated by -f option\n (script must be in upy device or in sd card indicated by -s option\n and the sd card must be already mounted as 'sd');\n\n \u200b\tSupports *CTRL-C* to stop the execution and exit nicely.\n\n- **install** : install libs to '/lib' path with upip; indicate lib with -f option\n\n- **mpyx** : to froze a module/script indicated with -f option, and save some RAM,\n it uses mpy-cross tool (see [mpy-cross](https://gitlab.com/alelec/micropython/tree/gitlab_build/mpy-cross) for more information)\n\n- **timeit**: to measure execution time of a module/script indicated with -f option.\n\n This is an adapted version of [timed_function](https://github.com/peterhinch/micropython-samples/tree/master/timed_function)\n\n\n* **fw**: to list or get available firmware versions, use -md option to indicate operation:\n - to list do: \"upydev fw -md list -b [BOARD]\" board should be 'esp32' or 'esp8266' (web scraping from [micropython downloads page](https://www.micropython.org/downloads) )\n - to get do: \"upydev fw -md get [firmware file]\" (uses curl)\n - to see available serial ports do: \"upydev fw -md list serial_ports\"\n\n* **flash**: to flash a firmware file to the upydevice, a serial port must be indicated\n to flash do: \"upydev flash -port [serial port] -f [firmware file]\"\n\n* **see**: to get specific command help info indicated with -c option\n\n* **find**: to get a list of possible upy devices. Scans the local network to find devices with port 8266 (WebREPL) open. Use -n option to perform n scans (A single scan may not find all the devices)\n\n* **make_group:** to make a group of boards to send commands to. Use -f for the name of the group \n\n \u200b\tand -devs option to indicate a name, ip and the password of each board. (To store the group settings globally use -g option)\n\n* **mg_group**: to manage a group of boards to send commands to. Use -G for the name of the group and -add option to add devices (indicate a name, ip and the password of each board) or -rm to remove devices (indicated by name)\n\n**GROUP COMMAND MODE (-G option)**: \n\nTo send a command to multiple devices in a group (made with make_group command) use -G option\n\n Usage: `upydev [command] -G [GROUP NAME]`\n\nTo target specific devices within a group add -devs option as `-devs [DEV_1 NAME] [DEV_2 NAME]`\n\n*upydev will use local working directory configuration unless it does not find any or manually indicated with -g option*\n\n**GROUP COMMAND PARALLEL MODE (-GP option)**: \n\nTo send a command **at the same time** to multiple devices in a group (made with make_group command) use -GP option. \n\n***Be aware that not all the commands are suitable for parallel execution (wrepl for example)*\n\n Usage: `upydev [command] -GP [GROUP NAME]`\n\nTo target specific devices within a group add -devs option as `-devs [DEV_1 NAME] [DEV_2 NAME]`\n\n*upydev will use local working directory configuration unless it does not find any or manually indicated with -g option*\n\n------\n\n#### uPydev Commands:\n\nuPy commands are organized in:\n\n* **General**: These commands should work 'out of the box' in any Micropython running board with WebREPL daemon enabled.\n* **Wifi utils** : This commands make easier to save/load wifi configuration (STA and AP ) and connect to an access point or enable its own (needs wifiutils.py in upydevice, see upyutils in upydev github repo)\n* **SD:** These commands need *sdcard.py* in the upy device, and a sd module/shield at least.\n* **INPUT**: These commands need a specific sensor module and the appropriate script in the upydevice (All these scripts are under [upyutils](https://github.com/Carglglz/upydev/tree/master/upyutils) directory)\n * ***ADC***: commands that make use of the ADCs from the board, or an external ADC module (ADS1115) (for external module needs 'ads1115.py' and 'init_ADS.py')\n * ***IMU***: commands that make use of the LSM9DS1 module, although other IMU modules could be easily implemented (needs 'lsm9ds1.py' and 'init_MY_IMU.py')\n * ***WEATHER***: commands that make use of the BME280 module, although other weather sensor modules could be easily implemented (needs 'bme280.py' and 'init_BME280.py')\n * ***POWER:*** commands that make use of the INA219 module.(needs 'ina219.py' and 'init_INA219.py')\n* **OUTPUT:** These commands use the DAC or PWM of the board, some needs an actuator module (buzzer or motor driver and a motor) at least and the appropriate script in the upydevice.\n\n * ***DAC:*** to generate an analog signal (dc value, sine wave or square wave at the momment) (needs 'dac_signal_gen.py')\n * ***BUZZER***: to drive a buzzer with PWM (needs 'buzzertools.py')\n * ***DC MOTOR***: to control a DC motor (needs a motor driver and the appropriate script) (needs 'dcmotor.py')\n * ***SERVO:*** to drive a servo motor (needs 'servo.py')\n * ***STEPPER MOTOR***: to drive stepper motor (needs a motor driver and 'stepper.py')\n* **NETWORKING:**\n * ***MQTT:*** commands to connect to a broker, subscribe to topic, publish and receive messages (needs 'mqtt_client.py')\n * ***SOCKETS:*** commands to start client/server socket and send/receive messages (needs 'socket_client_server.py')\n * ***UREQUEST:*** commands to make http requests, and get json or text output\n* **PORT/BOARD SPECIFIC COMMANDS**:\n\n * battery : if running on battery, gets battery voltage (esp32 huzzah feather)\n * pinout : to see the pinout reference/info of a board, indicated by -b option,\n to request a single or a list of pins info use -po option (currently just esp32 huzzah feather)\n * specs : to see the board specs, indicated by -b option (currently just esp32 huzzah feather)\n * pin_status: to see pin state, to request a specific set use -po option\n\n------\n\n#### Extensive explanation:\n\nFor an extensive explanation and commands demo see [Documentation](https://github.com/Carglglz/upydev/blob/master/DOCS/Documentation.md).\n\n#### Addiontal Scripts for some commands:\n\nThe commands that need additional scripts in the upy device are under the [uPyutils](https://github.com/Carglglz/upydev/tree/master/upyutils) folder.\n\nFor more info see [upyutils_docs](https://github.com/Carglglz/upydev/blob/master/DOCS/upyutils_docs.md).\n\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": "http://github.com/Carglglz/upydev", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "upydev", "package_url": "https://pypi.org/project/upydev/", "platform": "", "project_url": "https://pypi.org/project/upydev/", "project_urls": { "Homepage": "http://github.com/Carglglz/upydev" }, "release_url": "https://pypi.org/project/upydev/0.1.2/", "requires_dist": [ "argcomplete", "mpy-cross", "esptool", "prompt-toolkit", "python-nmap", "netifaces" ], "requires_python": "", "summary": "Command line tool for wireless Micropython devices", "version": "0.1.2" }, "last_serial": 5971926, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "416885699cd17857d67bb477d89a1eca", "sha256": "f4c28cebec7fd2b43afe62d6c727cc8f6afed3dea8407ebc3485bcbf71194858" }, "downloads": -1, "filename": "upydev-0.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "416885699cd17857d67bb477d89a1eca", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 47529, "upload_time": "2019-08-04T22:30:42", "url": "https://files.pythonhosted.org/packages/36/1e/4250e0bf2bf1039c05ce76774b1b4106bf0965d2b18a5c9983b142eb9bda/upydev-0.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "604f718b807b38ea54746323ff234030", "sha256": "dd747a6b315b2208ac19b99f81e3cd852e4c2c77db47c716a1c8b6e15f067db1" }, "downloads": -1, "filename": "upydev-0.0.1.tar.gz", "has_sig": false, "md5_digest": "604f718b807b38ea54746323ff234030", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 42217, "upload_time": "2019-08-04T22:30:45", "url": "https://files.pythonhosted.org/packages/9d/7f/d0b3a85e858b5a81906eb227e9fd30dedd51126642644e7047e248119345/upydev-0.0.1.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "d1790ece5e0bc0ebefef1efc43510491", "sha256": "c9b740df37c082aa7a5e9db90f0dc7a7de15f5c176ed9f97f59b168e817d4cca" }, "downloads": -1, "filename": "upydev-0.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "d1790ece5e0bc0ebefef1efc43510491", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 47553, "upload_time": "2019-08-04T22:57:34", "url": "https://files.pythonhosted.org/packages/15/66/32c0ea61976912826fb11c995938da0106019dad95f7a17246216f609abd/upydev-0.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f27e2a35e673961323aafa980d215f0c", "sha256": "2b5dd22f9f405647ee3f3880129c494d58b5cb18cc7554975708a229de821a50" }, "downloads": -1, "filename": "upydev-0.0.2.tar.gz", "has_sig": false, "md5_digest": "f27e2a35e673961323aafa980d215f0c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 42238, "upload_time": "2019-08-04T22:57:35", "url": "https://files.pythonhosted.org/packages/1a/2f/b1ae568fdabf83e2df9159d04d7369627f13e81071886d3cf6a5d4582a2e/upydev-0.0.2.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "7ba2f7464a11d7a59ff774e693335201", "sha256": "6239cb10387e6309543f175b65146cb886bd702c4f460114e0f0a5faa83a1c08" }, "downloads": -1, "filename": "upydev-0.0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "7ba2f7464a11d7a59ff774e693335201", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 49088, "upload_time": "2019-08-06T17:26:24", "url": "https://files.pythonhosted.org/packages/e6/80/483cba2d3169e1987b3f68a625a7dd1b990c331109e8c4b770823f343067/upydev-0.0.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "75b7474ccf758b4416f7e15866d5c845", "sha256": "4ac70e8c966dea44b92bb4a06dc217a5b8565846a7a28b71caae3161b1413520" }, "downloads": -1, "filename": "upydev-0.0.3.tar.gz", "has_sig": false, "md5_digest": "75b7474ccf758b4416f7e15866d5c845", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 43874, "upload_time": "2019-08-06T17:26:26", "url": "https://files.pythonhosted.org/packages/b4/bc/7db7aa988cdebfb734d7f216897e1f650b9f53b7e814a207bcbad0503224/upydev-0.0.3.tar.gz" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "e061dc4ba46bda92dc08262eb2248804", "sha256": "56544be7e6128abbf9b801c6996673d69c595fb84062938c485351e6db1614e3" }, "downloads": -1, "filename": "upydev-0.0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "e061dc4ba46bda92dc08262eb2248804", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 50140, "upload_time": "2019-08-08T20:36:11", "url": "https://files.pythonhosted.org/packages/36/e6/b3d8bc1b70c017d7a3e3b58a95b7de0e8facb570b452f241f979c4521074/upydev-0.0.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2d5e7cc6cef5d4f5b0271ca4031e77a7", "sha256": "ae24a0de2df719ec36686744c62d894a4280580bfe165cd7db69b53c9feb330a" }, "downloads": -1, "filename": "upydev-0.0.4.tar.gz", "has_sig": false, "md5_digest": "2d5e7cc6cef5d4f5b0271ca4031e77a7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 44936, "upload_time": "2019-08-08T20:36:13", "url": "https://files.pythonhosted.org/packages/3d/e9/1523b045bff491ccdefd7e485a5b040559d51225e63ef958f35d309a84a4/upydev-0.0.4.tar.gz" } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "3910962a8ed3bb1c9137d881b2098385", "sha256": "342f249e3549fc25dee6476bb78b8c2d300f2405328ab0f207a25bd1c886b631" }, "downloads": -1, "filename": "upydev-0.0.5-py3-none-any.whl", "has_sig": false, "md5_digest": "3910962a8ed3bb1c9137d881b2098385", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 51303, "upload_time": "2019-08-12T22:41:24", "url": "https://files.pythonhosted.org/packages/6b/fe/8308404acd012456105468f9d88dc6582b16167d058bc6de7d4d7368f9b1/upydev-0.0.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2dce024692e027f2b7920746614e2e82", "sha256": "c39eef18b048c179ed847bec489af6e56f932d287b664024508e5916e76b8b62" }, "downloads": -1, "filename": "upydev-0.0.5.tar.gz", "has_sig": false, "md5_digest": "2dce024692e027f2b7920746614e2e82", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 46160, "upload_time": "2019-08-12T22:41:26", "url": "https://files.pythonhosted.org/packages/38/b8/1ae8adba663d81bf005033d1d69a42a7ed9e879fd0ae5a80aeee6ef7dbba/upydev-0.0.5.tar.gz" } ], "0.0.6": [ { "comment_text": "", "digests": { "md5": "87afc713e74d733ac3836de4136b579e", "sha256": "684a8060b91af92786d9bbb3ae95ba1af2b9f04dfee8076cd71deeab7c2650b9" }, "downloads": -1, "filename": "upydev-0.0.6-py3-none-any.whl", "has_sig": false, "md5_digest": "87afc713e74d733ac3836de4136b579e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 52069, "upload_time": "2019-08-16T11:16:38", "url": "https://files.pythonhosted.org/packages/ff/6a/68dee1a0f9ce0ac4526ad0fb90a38e0fcab4ca15a0b8ee02480f86bd6cdb/upydev-0.0.6-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e2d650dfc86bea9383149fd7617c4cb7", "sha256": "3946142000e6a0b7ae28a6fe47b26fc45b9f2cdffdc7f2131b9d821a3e32db76" }, "downloads": -1, "filename": "upydev-0.0.6.tar.gz", "has_sig": false, "md5_digest": "e2d650dfc86bea9383149fd7617c4cb7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 46996, "upload_time": "2019-08-16T11:16:40", "url": "https://files.pythonhosted.org/packages/ec/82/765912581a70ca2bfc3850dcf14934036796261c5efc4a461dd89da7d34a/upydev-0.0.6.tar.gz" } ], "0.0.7": [ { "comment_text": "", "digests": { "md5": "e4982cfd73f284c63b6a3a7ca1dc1bfc", "sha256": "e41a581805d8c238319601b337921c678289639d22060d40117ec94ed7495409" }, "downloads": -1, "filename": "upydev-0.0.7-py3-none-any.whl", "has_sig": false, "md5_digest": "e4982cfd73f284c63b6a3a7ca1dc1bfc", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 52069, "upload_time": "2019-08-16T12:31:01", "url": "https://files.pythonhosted.org/packages/d8/c5/d8d04ae4ca30b768ab1ae88d2b4b7a6896ea82ed56eea9abd479da326cb6/upydev-0.0.7-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "05fd28f9ce3b3c6c03004488a642c04d", "sha256": "cc05acc77bb6808b174fe1f19717c7025b83fb1affca15444ada372b6d9f91fd" }, "downloads": -1, "filename": "upydev-0.0.7.tar.gz", "has_sig": false, "md5_digest": "05fd28f9ce3b3c6c03004488a642c04d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 46926, "upload_time": "2019-08-16T12:31:04", "url": "https://files.pythonhosted.org/packages/86/fe/f45a2c068df252e0afb77a6101518a7d40ed964fcf7480d897a0477a022c/upydev-0.0.7.tar.gz" } ], "0.0.8": [ { "comment_text": "", "digests": { "md5": "90365f14a34faa107892ff69fe667d4b", "sha256": "18e03fdba5a222f0546c9a7e5b59c1e0230286489932847956cfa2ae3f95f0e2" }, "downloads": -1, "filename": "upydev-0.0.8-py3-none-any.whl", "has_sig": false, "md5_digest": "90365f14a34faa107892ff69fe667d4b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 52230, "upload_time": "2019-08-18T20:06:31", "url": "https://files.pythonhosted.org/packages/8d/55/fd987f97c66fd19af05a3e3847545a2266c5176c55f8e4bf793382cb155f/upydev-0.0.8-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7ac51e0fc5d81b7216a9f8f7443443ef", "sha256": "c6822d8ab0249e98442fbe5b5319ce321fca0d8548c78523eaac37f0d20d3b53" }, "downloads": -1, "filename": "upydev-0.0.8.tar.gz", "has_sig": false, "md5_digest": "7ac51e0fc5d81b7216a9f8f7443443ef", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 47166, "upload_time": "2019-08-18T20:06:33", "url": "https://files.pythonhosted.org/packages/14/fc/92b44a29901ff92bc487d3ad44528c32543f46877f3a1341b6194f4da4ab/upydev-0.0.8.tar.gz" } ], "0.0.9": [ { "comment_text": "", "digests": { "md5": "7f60ed581d5c0561b989a62421fb1cd2", "sha256": "98f5418943a121a8282a9f657c4763c50cc3fb6c42151d82ffc192017822a684" }, "downloads": -1, "filename": "upydev-0.0.9-py3-none-any.whl", "has_sig": false, "md5_digest": "7f60ed581d5c0561b989a62421fb1cd2", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 54298, "upload_time": "2019-08-22T18:32:21", "url": "https://files.pythonhosted.org/packages/57/bd/ba77b5e4815878b2aa27ba40aae56f563b20bce7f6c38a446b5cd4a4fb02/upydev-0.0.9-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7a4921d337bca14cf1221c95376701d5", "sha256": "d27643e5e349cc6a4c629def9ccb877ad91cf3cb1903ff95f750ad0f0813670c" }, "downloads": -1, "filename": "upydev-0.0.9.tar.gz", "has_sig": false, "md5_digest": "7a4921d337bca14cf1221c95376701d5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 52235, "upload_time": "2019-08-22T18:32:23", "url": "https://files.pythonhosted.org/packages/d3/75/a19a603addda761bf7f0449dd27fdb23e2df7df7441aa587aaa55e9b7af5/upydev-0.0.9.tar.gz" } ], "0.1.0": [ { "comment_text": "", "digests": { "md5": "34639f0d5a78cabd1629ddf73c75efb9", "sha256": "7b6a988ed88bf22159d1a9c2ea3534902276765c7d97c61e87435c8a6031e025" }, "downloads": -1, "filename": "upydev-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "34639f0d5a78cabd1629ddf73c75efb9", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 54929, "upload_time": "2019-09-19T18:18:01", "url": "https://files.pythonhosted.org/packages/b2/67/3a1d2851ac44a1966439fbc56f6b1cda07a52497a344a2c3f0fbc878f222/upydev-0.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f652ac260c579fe675efd934e1839ee6", "sha256": "7cb11a7933da98d83739f193a9b1f2a6dbc94e89e79fb40a72709679f33b78a4" }, "downloads": -1, "filename": "upydev-0.1.0.tar.gz", "has_sig": false, "md5_digest": "f652ac260c579fe675efd934e1839ee6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 53150, "upload_time": "2019-09-19T18:18:02", "url": "https://files.pythonhosted.org/packages/dc/0b/baa2809aeb08bd651d937918decaca24dd56b0d8e0eb54dc825ad5646a04/upydev-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "40fe93c6c00972e74ad0dd3b41ccabe0", "sha256": "360033ae8fa1ed44b908fb7c55fc4bedd88ae65b30169143bf765a3cd8d1b1ed" }, "downloads": -1, "filename": "upydev-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "40fe93c6c00972e74ad0dd3b41ccabe0", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 56681, "upload_time": "2019-10-01T17:29:22", "url": "https://files.pythonhosted.org/packages/71/94/8df2a91cd703698cfed7ff7f7a503fa1e6361f06c0f21e8218d10f785695/upydev-0.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b545db74106a3e3f235f595cc8e8e936", "sha256": "81901f1677d3338e361339c0fd935e6742f8d87d8757b90456fda10b8c8e0abe" }, "downloads": -1, "filename": "upydev-0.1.1.tar.gz", "has_sig": false, "md5_digest": "b545db74106a3e3f235f595cc8e8e936", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 55140, "upload_time": "2019-10-01T17:29:24", "url": "https://files.pythonhosted.org/packages/cf/13/ab004f29370bbc17341cf77872d03accc0a4cd27c5622281e6bd2e54f163/upydev-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "9b66a678ef06128378e93558daf005a6", "sha256": "eb5eaf09225ac5b0a37ff08f830ddad352cdacb69961c24dc3db293b31a070b9" }, "downloads": -1, "filename": "upydev-0.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "9b66a678ef06128378e93558daf005a6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 56900, "upload_time": "2019-10-14T14:42:19", "url": "https://files.pythonhosted.org/packages/50/59/c623364f61cd365b8ac6bc6fe6059d0dd3171f64d8fe0f6085e38817dce4/upydev-0.1.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4ef1ac156d2d3db9659633fb455da9ac", "sha256": "1fe70843a8427fe934f6acdfa1dcb175afe0d02051c4daa58625aa98f13f2c3f" }, "downloads": -1, "filename": "upydev-0.1.2.tar.gz", "has_sig": false, "md5_digest": "4ef1ac156d2d3db9659633fb455da9ac", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 55372, "upload_time": "2019-10-14T14:42:20", "url": "https://files.pythonhosted.org/packages/4d/20/7994d91abdb4aaabb4eb77e30b0be941b553d8143266bda1b07b8340f716/upydev-0.1.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "9b66a678ef06128378e93558daf005a6", "sha256": "eb5eaf09225ac5b0a37ff08f830ddad352cdacb69961c24dc3db293b31a070b9" }, "downloads": -1, "filename": "upydev-0.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "9b66a678ef06128378e93558daf005a6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 56900, "upload_time": "2019-10-14T14:42:19", "url": "https://files.pythonhosted.org/packages/50/59/c623364f61cd365b8ac6bc6fe6059d0dd3171f64d8fe0f6085e38817dce4/upydev-0.1.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4ef1ac156d2d3db9659633fb455da9ac", "sha256": "1fe70843a8427fe934f6acdfa1dcb175afe0d02051c4daa58625aa98f13f2c3f" }, "downloads": -1, "filename": "upydev-0.1.2.tar.gz", "has_sig": false, "md5_digest": "4ef1ac156d2d3db9659633fb455da9ac", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 55372, "upload_time": "2019-10-14T14:42:20", "url": "https://files.pythonhosted.org/packages/4d/20/7994d91abdb4aaabb4eb77e30b0be941b553d8143266bda1b07b8340f716/upydev-0.1.2.tar.gz" } ] }