{ "info": { "author": "Germ\u00e1n Osella Massa", "author_email": "german.osella@nexo.unnoba.edu.ar", "bugtrack_url": null, "classifiers": [], "description": "==========\nAutoPython\n==========\n\nAutoPython se hace pasar por el shell de Python en el que en lugar de esperar el ingreso de sentencias, a \u00e9stas se las toma de un script normal de Python y se simula el ingreso de las mismas como si se las estuviera escribiendo por teclado, haciendo adem\u00e1s resaltado de sintaxis con colores y permitiendo la navegaci\u00f3n r\u00e1pida entre las sentencias usando un n\u00famero de \u00edndice asignado a cada una. Ideal para demostraciones o presentaciones en vivo con mucho c\u00f3digo para mostrar. AutoPython est\u00e1 escrito para Python 3.\n\n\nInstalaci\u00f3n:\n------------\n\nSi ten\u00e9s instalado pip_, alcanza con ejecutar:\n\n.. code-block:: bash\n\n\t$ pip install autopython\n\n\nRequerimientos:\n---------------\n\nAutoPython tiene como dependencias los siguientes m\u00f3dulos:\n\n- Colorama_\n- Pygments_\n\n\nComo usar AutoPython:\n---------------------\n\nSimplemente ejecut\u00e1ndolo d\u00e1ndole como par\u00e1metro el nombre el archivo fuente que se quiere presentar.\n\n.. code-block:: bash\n\n\t$ autopython tutorial.py\n\n\nEl script dado deber\u00e1 contener cada una de las sentencias o fragmentos de c\u00f3digo a mostrar y esta herramienta se encargar\u00e1 de simular durante una presentaci\u00f3n el ingreso de cada una de esas sentencias, como si se las estuviera escribiendo directamente en el propio shell de Python.\n\nTras invocar a AutoPython con el nombre del script previamente preparado, se puede ver en la consola exactamente lo mismo que se ver\u00eda en el shell de Python: Una leyenda con la versi\u00f3n del int\u00e9rprete y dem\u00e1s informaci\u00f3n, seguido del prompt ``>>>`` que se\u00f1ala la espera del ingreso de la pr\u00f3xima sentencia a ejecutar.\n\nA partir de este punto es donde esta herramienta difiere radicalmente del shell real. En lugar de permitir el ingreso libre de c\u00f3digo, AutoPython espera que se presionen determinadas teclas para controlar lo que vaya a suceder a continuaci\u00f3n.\n\nSi se oprime la tecla de avance (que puede ser tanto ``Av.P\u00e1g`` como ``Espacio`` o ``Enter``) se procede a simular el ingreso por teclado de la primer sentencia contenida en el script dado. El ingreso de la sentencia se har\u00e1 escribiendo en la consola de a un car\u00e1cter a la vez, a una velocidad configurable pero variable de tipeo, insertando pausas aleatorias para darle m\u00e1s realismo a la simulaci\u00f3n. Tras completar el ingreso de dicha sentencia, el cursor quedar\u00e1 al final de la \u00faltima l\u00ednea escrita, en el punto donde, si fuera ingresada en el shell real, s\u00f3lo faltar\u00eda presionar ``Enter`` para ejecutarla.\n\nSi a continuaci\u00f3n se vuelve a oprimir nuevamente la tecla de avance, AutoPython finaliza el ingreso de la sentencia simulando presionar ``Enter`` y mostrando en la consola exactamente el mismo resultado que dicho c\u00f3digo producir\u00eda si fuera ingresado en el shell de Python. Oprimiendo reiteradas veces la tecla de avance permite ir mostrando y ejecutando las sucesivas sentencias contenidas en el resto del script.\n\nVale la pena destacar que la ejecuci\u00f3n de cada una de las sentencias no es simulada sino que se utiliza al propio int\u00e9rprete de Python para dicho fin. Todo resultado que se observe ser\u00e1 el mismo que se obtendr\u00eda al ingresar la misma sentencia en el shell de Python.\n\nAutoPython intenta imitar de la mejor manera posible la apariencia y el comportamiento del propio shell interactivo de Python. Se prest\u00f3 gran atenci\u00f3n en reproducir el comportamiento del shell real al ingresar una sentencia de varias l\u00edneas, donde el prompt alterna entre ``>>>`` y ``...`` seg\u00fan si se contin\u00faa o no con el ingreso de dicha sentencia.\n\nPero eso no es todo lo que la herramienta hace: El c\u00f3digo fuente se presenta con colores empleando resaltado de sintaxis, una sentencia muy larga es cortada autom\u00e1ticamente en varias l\u00edneas para mostrarse completa y cada sentencia ejecutable es numerada con un \u00edndice (comenzando en 1) para poder hacerle referencia f\u00e1cilmente, mostrando el n\u00famero de sentencia entre par\u00e9ntesis al final de la primera (y posiblemente, \u00fanica) l\u00ednea de c\u00f3digo. En el caso que existan comentarios dentro del c\u00f3digo fuente, \u00e9stos no ser\u00e1n considerados como sentencias ejecutables y simplemente se los escribir\u00e1 sin pausas, deteni\u00e9ndose reci\u00e9n al llegar a la pr\u00f3xima sentencia.\n\nAutoPython permite volver hacia atr\u00e1s, utilizando la tecla de retroceso (configurada como ``Re.P\u00e1g`` o la letra ``P``), regresando a sentencias que fueron mostradas anteriormente. Este comportamiento es an\u00e1logo a volver a escribir una sentencia ya ingresada y no tiene ning\u00fan otro efecto en el estado interno del int\u00e9rprete: Retroceder no deshace los efectos causados por una sentencia previamente ejecutada. Si se usa la tecla de retroceso en el punto en el que se est\u00e1 por ejecutar una sentencia (o sea, se oprimi\u00f3 una vez la tecla de avance, se mostr\u00f3 la sentencia pero a\u00fan no se la ejecut\u00f3), se simula el comportamiento de usar ``Control-C`` para cancelar dicha entrada y se procede a simular el ingreso de la sentencia anterior a \u00e9sta. Si, en cambio, se usa la tecla de retroceso luego de ejecutar una sentencia (es decir, se oprimi\u00f3 dos veces la tecla de avance), AutoPython vuelve a repetir el ingreso de la \u00faltima sentencia ejecutada. Un efecto similar se consigue con la tecla de repetici\u00f3n (tecla ``R``) que repite el ingreso de la \u00faltima sentencia mostrada, independientemente de si \u00e9sta se lleg\u00f3 a ejecutar.\n\nLa herramienta aprovecha el hecho de que todas las sentencias ejecutadas son numeradas con un \u00edndice y permite saltar directamente a una sentencia indicando su n\u00famero, utilizando la tecla de salto (tecla ``G``). En este caso, el resultado observado var\u00eda de acuerdo a donde se encuentre la sentencia a saltar con respecto a la que se mostr\u00f3 por \u00faltima vez: Si se desea saltar a una instrucci\u00f3n posterior, se procede a ejecutar una a una todas las sentencias necesarias para llegar desde donde est\u00e1 actualmente hasta la sentencia pedida. Dicha ejecuci\u00f3n se realiza sin efectos de tipeo, para no producir pausas innecesarias. Si, en cambio, se pidi\u00f3 saltar a una sentencia anterior, se asume que se desea volver a escribir dicha sentencia en el contexto en que originalmente se previ\u00f3 su ejecuci\u00f3n, por lo que se reinicia el estado interno del int\u00e9rprete (como si reci\u00e9n hubiera arrancado) y se vuelven a ejecutar desde el principio todas y cada una de las sentencias necesarias para llegar a la sentencia indicada. El n\u00famero de sentencia sigue la sem\u00e1ntica de los \u00edndices en las secuencias de Python, donde valores positivos indican desplazamientos a partir del inicio mientras que valores negativos se\u00f1alan desplazamientos desde el final de la secuencia. As\u00ed, el \u00edndice -1 indica que se quiere mostrar la ejecuci\u00f3n de la \u00faltima sentencia del script.\n\nAutoPython provee la posibilidad de que en cualquier momento el orador decida tomar el control del int\u00e9rprete y comenzar a introducir sentencias de la misma manera que lo har\u00eda en el propio shell de Python. Esto se logra presionando la tecla de shell (tecla ``S``). Cuando la herramienta entra en modo interactivo, toda sentencia que se escriba por teclado proceder\u00e1 a ejecutarse inmediatamente en el contexto del int\u00e9rprete usado durante el ingreso autom\u00e1tico de AutoPython, de forma que todo efecto que dichas sentencias produzcan afectar\u00e1 al resto de las sentencias que se ejecuten m\u00e1s tarde (ya sean ingresadas manualmente o en forma autom\u00e1tica). El modo de simulaci\u00f3n se abandona utilizando la combinaci\u00f3n de teclas ``EOF`` (End Of File o fin de archivo) que sobre los sistemas operativos basados en Windows se indica con la combinaci\u00f3n de teclas ``Control-Z`` mientras que en sistemas operativos derivados de Unix se utiliza la combinaci\u00f3n ``Control-D``.\n\nFinalmente, la tecla de salida (tecla ``Q``) permite terminar la ejecuci\u00f3n de la herramienta en cualquier punto de la presentaci\u00f3n, cancelando toda sentencia pendiente de ser ejecutada y mostrando la llamada a la funci\u00f3n ``quit()``, que normalmente causa el cierre del int\u00e9rprete.\n\nDurante una presentaci\u00f3n, AutoPython genera un archivo de bit\u00e1cora en donde se almacena todo lo realizado: Inicio de la presentaci\u00f3n, avance a la pr\u00f3xima sentencia, ejecuci\u00f3n de la sentencia, retrocesos, repeticiones, saltos y cambios a modo interactivo junto con todas las sentencias ingresadas manualmente.\nToda esta informaci\u00f3n se guarda junto con una marca de tiempo indicando en qu\u00e9 momento se realiz\u00f3 cada acci\u00f3n. Esto se hace con la finalidad de poder analizar y depurar el script preparado, permitiendo detectar largas pausas entre sentencias, saltos aleatorios dentro de la secuencia prevista o sentencias ingresadas por el orador que probablemente deber\u00edan estar contenidas como parte de la exposici\u00f3n armada.\n\nLa velocidad de tipeo es configurable y se la indica como la demora m\u00ednima entre letra y letra, realiz\u00e1ndose una demora al azar entre ese m\u00ednimo y el doble del mismo.\n\nAutoPython es multiplataforma y deber\u00eda funcionar tanto sobre Windows como Mac OS X o Linux (aunque mayormente se lo prueba sobre este \u00faltimo).\n\n\nCosas por hacer:\n----------------\n\n- Agregar par\u00e1metros para la l\u00ednea de comandos que permitan configurar las opciones disponibles.\n- Separar la l\u00f3gica de la presentaci\u00f3n, para poder simular/utilizar otros shells (consola de IPython, te estoy mirando...).\n- M\u00e1s temas de colores para el resaltado de sintaxis.\n- English translation.\n- ???\n- Profit!\n\n\nLicencia:\n---------\n\nCopyright Germ\u00e1n Osella Massa 2016. Licencia GPLv3. Ver archivo `LICENSE.txt`_.\n\n\n.. _pip: http://www.pip-installer.org/\n.. _Colorama: https://github.com/tartley/colorama\n.. _Pygments: http://pygments.org/\n.. _LICENSE.txt: https://github.com/gosella/autopython/blob/master/LICENSE.txt", "description_content_type": null, "docs_url": null, "download_url": "https://github.com/gosella/autopython", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/gosella/autopython", "keywords": "python3,presentation,autoscripting", "license": "GPLv3", "maintainer": null, "maintainer_email": null, "name": "autopython", "package_url": "https://pypi.org/project/autopython/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/autopython/", "project_urls": { "Download": "https://github.com/gosella/autopython", "Homepage": "https://github.com/gosella/autopython" }, "release_url": "https://pypi.org/project/autopython/0.3/", "requires_dist": null, "requires_python": null, "summary": "Autoscripting for Python 3", "version": "0.3" }, "last_serial": 2028629, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "e0787303dca85fd7e62a45b436f46795", "sha256": "e7b0aa6b15efc7d58a0e9b076eacc677412a28d2b548728b4f4233044f476ccf" }, "downloads": -1, "filename": "autopython-0.1.tar.gz", "has_sig": false, "md5_digest": "e0787303dca85fd7e62a45b436f46795", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8481, "upload_time": "2016-03-26T01:58:39", "url": "https://files.pythonhosted.org/packages/9d/aa/550c3e785c77cf3789a41137402cdcbf660e96e1eeb69c1a0914fe7d425a/autopython-0.1.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "5a0ebaa93ba4a1a405ef8955ae23e8fc", "sha256": "0eedb9c0d0fd2fc1b33c5ff6c5fa75f0ae11f9ae4bbe005a5732a500ec63669d" }, "downloads": -1, "filename": "autopython-0.2.tar.gz", "has_sig": false, "md5_digest": "5a0ebaa93ba4a1a405ef8955ae23e8fc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15759, "upload_time": "2016-03-26T14:25:45", "url": "https://files.pythonhosted.org/packages/e1/24/209af941d4a4ae3b9bdc3189b19e044d981ed010948c41efc18dbf713ba9/autopython-0.2.tar.gz" } ], "0.3": [ { "comment_text": "", "digests": { "md5": "6e87bf46eb41e972653636dcdcdd1b8f", "sha256": "b5f0b47d0357aa06d3873d91d30ea2ed3b60a86954e08876c49ed91ccaf28455" }, "downloads": -1, "filename": "autopython-0.3.tar.gz", "has_sig": false, "md5_digest": "6e87bf46eb41e972653636dcdcdd1b8f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16219, "upload_time": "2016-03-26T18:35:44", "url": "https://files.pythonhosted.org/packages/1b/13/1dc224732d454b16fbce96a3c10f616061ca68efeb4c115cb355e998ffa0/autopython-0.3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "6e87bf46eb41e972653636dcdcdd1b8f", "sha256": "b5f0b47d0357aa06d3873d91d30ea2ed3b60a86954e08876c49ed91ccaf28455" }, "downloads": -1, "filename": "autopython-0.3.tar.gz", "has_sig": false, "md5_digest": "6e87bf46eb41e972653636dcdcdd1b8f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16219, "upload_time": "2016-03-26T18:35:44", "url": "https://files.pythonhosted.org/packages/1b/13/1dc224732d454b16fbce96a3c10f616061ca68efeb4c115cb355e998ffa0/autopython-0.3.tar.gz" } ] }