Giter Site home page Giter Site logo

apocryphon-x / omegaup-cli Goto Github PK

View Code? Open in Web Editor NEW
8.0 2.0 3.0 398 KB

This project is temporarily archived. 🚀 Interact with omegaUp from the command-line! (This project is still in alpha version)

License: MIT License

Python 99.55% Shell 0.45%
omegaup-cli omegaup cli cli-app

omegaup-cli's Introduction

I hope you are not viewing this on a phone browser.

Hi

5 years experience!

How are you? Pretty lonely here, isn't it?

omegaup-cli's People

Contributors

apocryphon-x avatar lint-action avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

omegaup-cli's Issues

Agregar manejo de excepciones a cada método

Para evitar mensajes "raros" es necesario habilitar un manejo de excepciones provenientes de la libomegaup, por ejemplo, al hacer ucl contest details de un concurso inexistente.

Migrar a libomegaup para un desarrollo mas sencillo de la CLI

Tenemos un paquete en pypi https://pypi.org/project/omegaup/1.2.0/ y podemos autogenerarlo cada que cambia el API. eso disminuiría el costo de desarrollar el CLI y además tiene anotaciones de tipos con mypy.

El API está en https://github.com/omegaup/libomegaup/blob/main/omegaup/api.py, la documentación en https://github.com/omegaup/libomegaup/tree/main/docs (necesito ver cómo desplegarlo usando GitHub Pages) y tenemos un ejemplo de uso en https://github.com/ComiteMexicanoDeInformatica/omegaUp-deploy/blob/a3982cfacb6476c528cea8177c772ce460e06c60/upload.py#L264

(y también ya se le agregó el soporte de usar el API token).

Implementar el uso de "Click" para facilitar el parsing de argumentos

Detalles

Utilizar el package Click de PyPi, permitirá programar de manera mas sencilla los comandos de la CLI así como subcomandos y paso de argumentos adicionales. Permite un desarrollo mas sencillo a diferencia de argparse. El beneficio principal es que en un futuro la CLI podrá dar soporte a múltiples lenguajes, idealmente Ingles y Español.

Posible Solución

En el "peor" de los casos, aplicar un refactor a la mayor parte del código. En el mejor caso, solo sera cuestión de añadir unas cuantas lineas por encima de cada función. Este cambio se piensa aplicar después de cerrar el issue #9.

Crear un nuevo subcomando para gestionar la configuración de la CLI

Detalles

Parte de: #6 - El nuevo modulo permitiría configurar ciertos parámetros de la CLI. Inicialmente se tiene planeado que sirva para gestionar los nuevos APITokens almacenados por la CLI, de esta manera se podrían utilizar múltiples APITokens en lugar de solo uno¹.

¹: En caso de que el usuario final posea múltiples cuentas, este cambio seria útil para poder interactuar con todas ellas desde la CLI.

Posible Solución

Crear una nueva dependencia con pythondialog (para un menú mas fancy), o simplemente crear un menú de texto simple que permita interactuar con el teclado de forma sencilla usando blessed.

El almacenamiento de los APITokens se puede hacer en un nuevo dotfile ubicado en el directorio principal del usuario. Esta implementación seria similar al archivo ~/.netrc que ocupa la CLI de Heroku para almacenar sus Tokens.

Mostrar datos recibidos (p.e el puntaje) a la hora de realizar un envio

Detalles

Modificar las funciones que muestran el veredicto recibido después de subir una solución para que muestren datos como la memoria consumida, el tiempo que tardo la ejecución y el puntaje obtenido.

Posible Solución

Editar el codigo de follow_submit() para que imprima los datos necesarios, gracias a las peticiones previas.

omegaup-cli/omegaup/cli.py

Lines 67 to 101 in fb42696

def follow_submit(target_session, run_guid):
# Debugging Output
# print(json.dumps(json_response, indent = 4, sort_keys = True))
run_status_response = Run(target_session).status(run_guid)
json_response = run_status_response.json()
print(info_status + "Evaluación en curso. (Esperando veredicto)")
print(info_status + "Actualizando", end = "", flush = True)
while json_response["status"] == "waiting":
run_status_response = Run(target_session).status(run_guid)
json_response = run_status_response.json()
for _ in range(3):
print(".", end = "", flush = True)
time.sleep(1)
print(cli_terminal.move_left(3) + cli_terminal.clear_eol,
end = "", flush = True)
print("\r", end = "")
if json_response["status"] == "ready":
if json_response["verdict"] == "AC" : print(ac_verdict)
if json_response["verdict"] == "WA" : print(wa_verdict)
if json_response["verdict"] == "CE" : print(ce_verdict)
if json_response["verdict"] == "JE" : print(je_verdict)
if json_response["verdict"] == "PA" : print(pa_verdict)
if json_response["verdict"] == "RTE" : print(rte_verdict)
if json_response["verdict"] == "MLE" : print(mle_verdict)
if json_response["verdict"] == "OLE" : print(ole_verdict)
if json_response["verdict"] == "TLE" : print(tle_verdict)

Los datos recibidos después de cada envió se encuentran en json_response[].

run_status_response = Run(target_session).status(run_guid)
json_response = run_status_response.json()

Actualizar las clases de la CLI para agregar soporte a los nuevos APITokens

Detalles

Próximamente, OmegaUp dejara de dar soporte al api/user/login (omegaup/omegaup#5272 y omegaup/omegaup#5242), en su lugar cualquier interacción con la API sera gestionada por medio de APITokens. A partir de ese momento, las versiones de la CLI ≤ 0.6a quedaran obsoletas pues no podrán interactuar correctamente con la API.

Posible Solución

Actualizar los métodos para que acepten como parámetro el Authorization Header de HTTP a la hora de hacer un request (independientemente de la API que se vaya a utilizar). La información relacionada con los nuevos APITokens se encuentra aquí.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.