No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Aprende todo un fin de semana sin pagar una suscripción 🔥

Aprende todo un fin de semana sin pagar una suscripción 🔥

Regístrate

Comienza en:

3D
10H
18M
48S

Implementar hooks

4/14
Recursos

Introducción a Hooks

Los Hooks son sentencias que se van a ejecutar antes o después de generar la plantilla de datos. Por ejemplo, puedes usarlos para verificar el nombre de una carpeta, actualizar git, etc.

Implementación de Hooks

  • Se crea la carpeta “hooks”, adentro de la carpeta principal de tu proyecto.
  • Dentro de la carpeta se agregan los archivos “pre_gen_project.py” (lo que se ejecuta antes de generar la plantilla) y “pos_gen_project.py” (lo que se ejecuta después de generar la plantilla).

Por ejemplo, en “pre_gen_project.py” se puede inicializar git o validar nombres y archivos para evitar errores.

En el archivo “pos_gen_project.py” se puede hacer el primer commit en git o mostrar la finalización de la instalación de dependencias.

Contribución creada por: Néstor Arellano.

Aportes 9

Preguntas 4

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

o inicia sesión.

Subproceso para instalar las librerias en requirements.txt

subprocess.call(['pip', 'install', '-r', 'requirements.txt'])

A veces las clases saben ser muy overwhelming. Mírenla al día siguiente de nuevo y muchas cosas se aclaran amigos :c

Código

cookiecutter.json code:

{
    "project_title": "Cookiecutter Personal",
    "project_slug": "{{ cookiecutter.project_title.lower().replace(' ', '_') }}",
    "project_description": "Something cool",
    "project_author_name": "Your name",
    "project_packages": ["All", "Minimal"],
    "python_version": "3.7"
}

pre_gen_project.py code:

import os
import sys

project_slug = "{{ cookiecutter.project_slug }}"

ERROR_COLOR = "\x1b[31m" # To change the terminal color
MESSAGE_COLOR = "\x1b[34m"
RESET_ALL = "\x1b[0m"

if project_slug.startswith("x"):
    print(f'{ERROR_COLOR}ERROR: {project_slug=} is not a valid name for this template.{RESET_ALL}')

    sys.exit(1)

print(f"{MESSAGE_COLOR}Let's do it! You're going to create something awesome!")
print(f"Creating project at { os.getcwd() }{RESET_ALL}")

post_gen_project.py code:

import subprocess

MESSAGE_COLOR = "\x1b[34m"
RESET_ALL = "\x1b[0m"

print(f"{MESSAGE_COLOR}Almost done!")
print(f"Initializing a git repository...{RESET_ALL}")

subprocess.call(['git', 'init'])
subprocess.call(['git', 'add', '*'])
subprocess.call(['git', 'commit', '-m', 'Initial commit'])

print(f"{MESSAGE_COLOR}The beginning of your destiny is defined now! Create and have fun!{RESET_ALL}")

Una abreviación
Dentro de la carpeta hooks pueden usar

touch {pre,post}_gen_project.py

para crear ambos archivos.

Sin duda si quisieran mejorar la privacidad, entorno de trabajo, y protección de datos, carpetss personales y no personales de trabajo, este curso puede ser arma principal para mejorar entornos de trabajo, incluso sin duda esta área de entorno de trabajo para ciencia de datos aplica Incluso para sector gobierno, sin importar Incluso nivel, aún así sin duda para mejorar la privacidad pueden usar un sotfware hardware que no se allá Elaborado en ee.uu u.e con fines de protección de soberanía que es la más importante, algunas algunos naciones tendrían que recibir una gran “lección internacional” para mejorar sus Infraestructura, tecnología, y protección en base a sotfware hardware que no son de la otan, por ejemplo brics que ya comienza con estos estas proyectos porque la soberanía es importante y civiles habitantes no tienen porqué estar siendo afectados(as) o estar haciendo trabajo que no les pertenece pero que además ni reciben sueldos salarios de instituciones Incluso de seguridad de soberanía y que sin duda Demuestra la alta corrupción, fallas, Incluso problemas de tecnología, y problemas de falta de apreciación nacional internacional, situación que no tiene porqué afectar a habítantes civiles incluso turistas sin excusas y pretextos. Gran falla internacional.

En fin se de lo que redacto xD.

Excelente y entendido

Example: Validating template variables

Using Pre/Post-Generate Hooks

import re
import sys


MODULE_REGEX = r'^[_a-zA-Z][_a-zA-Z0-9]+$'

module_name = '{{ cookiecutter.module_name }}'

if not re.match(MODULE_REGEX, module_name):
    print('ERROR: %s is not a valid Python module name!' % module_name)

    # exits with status 1 to indicate failure
    sys.exit(1)

Cuando se ejecute el comando

cookiecutter https://github.com....

Hay que asegurse estar activo en el ambiente virtual,sino dara el siguiente error “cookiecutter no se reconoce como un comando interno o externo”

Estando activo en un ambiente se puede hacer de esta forma :

C:\Users\usuario\Documents\Platzi-cursos\Probando_Cookiecutter
(cookiecutter-personal) λ cookiecutter https://github.com/IvanTolaba/cookiecutter_prueba

estando activo en el ambiente (cookiecutter-personal) ,parado en la carpeta Probando_Cookiecutter ,ejecuto el comando de una plantilla de nombre diferente en github llamada cookiecutter_prueba y lo crea en esa carpeta,funciona !!!

Personal Mistakes:

  1. Make sure you’ve removed the default Prefix from environment.yml that’s part of cookiecutter.
  2. Mamba is better off, so create your venv and then install your packages with mamba as show bellow.
subprocess.call(['conda', 'create', '-n', '{{cookiecutter.environment_name}}'])
subprocess.call(['mamba','env','update','-n','{{cookiecutter.environment_name}}','-f','environment.yml'])

Estuvo muy completo.