Skip to content

Commit f3b197c

Browse files
authored
Merge pull request mouredev#6919 from EmmanuelMMontesinos/main
# 44 - python
2 parents 30f50f0 + 510ce82 commit f3b197c

File tree

2 files changed

+184
-0
lines changed

2 files changed

+184
-0
lines changed
Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
"""
2+
/*
3+
* EJERCICIO:
4+
* ¡Me voy de viaje al GitHub Universe 2024 de San Francisco!
5+
*
6+
* Desarrolla un CLI (Command Line Interface) que permita
7+
* interactuar con Git y GitHub de manera real desde terminal.
8+
*
9+
* El programa debe permitir las siguientes opciones:
10+
* 1. Establecer el directorio de trabajo
11+
* 2. Crear un nuevo repositorio
12+
* 3. Crear una nueva rama
13+
* 4. Cambiar de rama
14+
* 5. Mostrar ficheros pendientes de hacer commit
15+
* 6. Hacer commit (junto con un add de todos los ficheros)
16+
* 7. Mostrar el historial de commits
17+
* 8. Eliminar rama
18+
* 9. Establecer repositorio remoto
19+
* 10. Hacer pull
20+
* 11. Hacer push
21+
* 12. Salir
22+
*
23+
* Puedes intentar controlar los diferentes errores.
24+
*/
25+
"""
26+
import os
27+
28+
class GitCLI:
29+
def __init__(self):
30+
self.directorio = None
31+
self.remoto = None
32+
33+
def mostrar_info(self):
34+
print(f"Directorio de trabajo: {self.directorio}")
35+
print(f"Repositorio remoto: {self.remoto}")
36+
def asignar_directorio(self):
37+
self.directorio = input("Introduce el directorio de trabajo: ")
38+
os.chdir(self.directorio)
39+
40+
def nuevo_repositorio(self):
41+
os.system("git init")
42+
os.system("git branch -m main")
43+
44+
def crear_rama(self):
45+
nombre_rama = input("Introduce el nombre de la rama para crear: ")
46+
os.system(f"git branch {nombre_rama}")
47+
48+
def cambiar_rama(self):
49+
nombre_rama = input("Introduce el nombre de la rama a cambiar: ")
50+
os.system(f"git checkout {nombre_rama}")
51+
52+
def mostrar_ficheros_pendientes(self):
53+
os.system("git status -s")
54+
55+
def hacer_commit(self):
56+
os.system("git add .")
57+
mensaje = input("Introduce el mensaje del commit: ")
58+
os.system(f"git commit -m {mensaje}")
59+
60+
def historial_commits(self):
61+
os.system("git log")
62+
63+
def eliminar_rama(self):
64+
nombre_rama = input("Introduce el nombre de la rama a eliminar: ")
65+
os.system(f"git branch -d {nombre_rama}")
66+
67+
def establecer_remoto(self):
68+
url = input("Introduce la URL del repositorio remoto: ")
69+
os.system(f"git remote add origin {url}")
70+
self.remoto = url
71+
os.system("git push -u origin main")
72+
73+
def hacer_pull(self):
74+
os.system("git pull origin main")
75+
76+
def hacer_push(self):
77+
os.system("git push")
78+
79+
def bucle(self):
80+
while True:
81+
self.mostrar_info()
82+
print("\nSelecciona una opción: ")
83+
print("1. Establecer el directorio de trabajo")
84+
print("2. Crear un nuevo repositorio")
85+
print("3. Crear una nueva rama")
86+
print("4. Cambiar de rama")
87+
print("5. Mostrar ficheros pendientes de hacer commit")
88+
print("6. Hacer commit")
89+
print("7. Mostrar el historial de commits")
90+
print("8. Eliminar rama")
91+
print("9. Establecer repositorio remoto")
92+
print("10. Hacer pull")
93+
print("11. Hacer push")
94+
print("12. Salir")
95+
96+
option = input("Opción: ")
97+
98+
match option:
99+
case "1":
100+
self.asignar_directorio()
101+
case "2":
102+
self.nuevo_repositorio()
103+
case "3":
104+
self.crear_rama()
105+
case "4":
106+
self.cambiar_rama()
107+
case "5":
108+
self.mostrar_ficheros_pendientes()
109+
case "6":
110+
self.hacer_commit()
111+
case "7":
112+
self.historial_commits()
113+
case "8":
114+
self.eliminar_rama()
115+
case "9":
116+
self.establecer_remoto()
117+
case "10":
118+
self.hacer_pull()
119+
case "11":
120+
self.hacer_push()
121+
case "12":
122+
break
123+
case _:
124+
print("Opcion incorrecta")
125+
126+
# Prueba
127+
128+
if __name__ == "__main__":
129+
cli = GitCLI()
130+
cli.bucle()
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
"""
2+
* EJERCICIO:
3+
* ¡El 12 de noviembre lanzo mouredev pro!
4+
* El campus de la comunidad para estudiar programación de
5+
* una manera diferente: https://mouredev.pro
6+
*
7+
* Crea un programa que funcione como una cuenta atrás.
8+
*
9+
* - Al iniciarlo tendrás que indicarle el día, mes, año,
10+
* hora, minuto y segundo en el que quieres que finalice.
11+
* - Deberás transformar esa fecha local a UTC.
12+
* - La cuenta atrás comenzará y mostrará los días, horas,
13+
* minutos y segundos que faltan.
14+
* - Se actualizará cada segundo y borrará la terminal en
15+
* cada nueva representación del tiempo restante.
16+
* - Una vez finalice, mostrará un mensaje.
17+
* - Realiza la ejecución, si el lenguaje lo soporta, en
18+
* un hilo independiente.
19+
"""
20+
from datetime import datetime, timezone
21+
import os
22+
import time
23+
import threading
24+
25+
class CuentaAtras:
26+
def __init__(self, dia: int, mes: int, ano: int, hora: int, minutos: int, segundos: int):
27+
self.fecha_final = datetime(ano, mes, dia, hora, minutos, segundos, tzinfo=timezone.utc)
28+
29+
def limpiar_pantalla(self):
30+
os.system("cls")
31+
32+
def bucle(self):
33+
while True:
34+
self.diferencia = self.fecha_final - datetime.now(timezone.utc)
35+
if self.diferencia.total_seconds() <= 0:
36+
self.limpiar_pantalla()
37+
print("¡Hemos llegado!")
38+
break
39+
40+
dias = self.diferencia.days
41+
horas, resto = divmod(self.diferencia.seconds, 3600)
42+
minutos, segundos = divmod(resto, 60)
43+
44+
45+
self.limpiar_pantalla()
46+
print(f"Quedan: {dias} días, {horas} horas, {minutos} minutos, {segundos} segundos")
47+
48+
49+
time.sleep(1)
50+
51+
# Prueba
52+
cuenta = CuentaAtras(7, 11, 2024, 20, 41, 0)
53+
proceso = threading.Thread(target=cuenta.bucle)
54+
proceso.start()

0 commit comments

Comments
 (0)