{"id":22273502,"url":"https://github.com/dfleta/sudokumodules","last_synced_at":"2025-09-12T00:11:31.469Z","repository":{"id":201027376,"uuid":"706191157","full_name":"dfleta/sudokuModules","owner":"dfleta","description":"Kata sobre programación modular en Python ","archived":false,"fork":false,"pushed_at":"2024-10-30T10:55:05.000Z","size":27,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-01-30T14:44:44.802Z","etag":null,"topics":["error-handling","parametrized-tests","preconditioning","pytest-markers","python-import-modules","python-modules","sudoku-checker","tdd"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dfleta.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-10-17T13:28:40.000Z","updated_at":"2024-10-30T10:55:09.000Z","dependencies_parsed_at":null,"dependency_job_id":"2cfd2fb3-15d2-41ab-84f0-7d0a48f3b9b9","html_url":"https://github.com/dfleta/sudokuModules","commit_stats":null,"previous_names":["dfleta/sudokumodules"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dfleta%2FsudokuModules","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dfleta%2FsudokuModules/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dfleta%2FsudokuModules/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dfleta%2FsudokuModules/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dfleta","download_url":"https://codeload.github.com/dfleta/sudokuModules/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245501803,"owners_count":20625855,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["error-handling","parametrized-tests","preconditioning","pytest-markers","python-import-modules","python-modules","sudoku-checker","tdd"],"created_at":"2024-12-03T13:12:54.569Z","updated_at":"2025-03-25T16:41:43.831Z","avatar_url":"https://github.com/dfleta.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"Sudoku Modules\n==============\n\nKata sobre programación modular en Python, a partir de uno de los ejercicios propuestos en el _problem set_ de la _Lesson 3: How to Manage Data_ del curso [_Intro to computer science_](https://www.youtube.com/watch?v=9nkR2LLPiYo\u0026list=PLAwxTw4SYaPmjFQ2w9j05WDX8Jtg5RXWW) del Prof. Dave Evans [@evansuva](https://github.com/evansuva) en Udacity. \n\nSe trata de investigar y comprender los contextos de ejecución al invocar módulos Python.\n\nPor este motivo, la configuración del `sys.path` en el código de `checkSudoku.py` y los `import`\nde las dependencias se han hecho explícitas. Lee los comentarios en el código.\n\nAdemás, se incluyen unos prints estilo _devil guide to debugging_ en `checkCuadrado.py`para hacer explícita la ejecución del código de un módulo cuando lo importamos y entender el comportamiento de los _Mixed Usage Modes_ `__name__` y ` __main__`.\n\nLa estructura de directorios y sus nombres tampoco son muy ortodoxas ya que responden a la intención de forzar comportamientos para comprender el sistema de importación de módulos de Python.\n\nNo se utiliza una suite de testing, ya que se accede a los casos test utilizando la **reflexión** de Python, accediendo a los mismos como propiedades del objeto módulo `casosTestSudoku.py`.\n\nNo se utiliza el nombre `test` en el directorio con los casos test porque sino el entorno Python intenta importar desde ese paquete los módulos que no encuentra cuando importamos el contenido del directorio con los casos test (precedencia de nombre).\n\n## Uso\n\nEjecutar `sudoku.py` desde consola en el directorio raíz del proyecto IS OK:\n\n`$ python3 sudoku.py`\n\nEjecutar `checkSudoku.py` desde el directorio raíz del proyecto IS NOT OK \npues el contexto de ejecución será el directorio raíz y al cambiar el `path` a `..` las rutas relativas a las depedencias no se construyen bien.\n\n`$ python3 src/checkSudoku.py` IS NOT OK\n\nEjecutar `checkSudoku.py` desde el directorio `src` del proyecto IS OK:\n\n`src $ python3 checkSudoku.py`\n\nEjecutar cada módulo de las funciones SRP desde el contexto `src` IS OK:\n\n`src $ python3 checkCuadrado.py`\n\n## Casos test\n\nCómo parametrizar casos test:\n\n- [How to parametrize fixtures and test functions](https://docs.pytest.org/en/stable/how-to/parametrize.html)\n\n- [Parametrization examples.](https://docs.pytest.org/en/stable/example/parametrize.html#paramexamples)\n\n### Uso\n\n```python\n[pytest]\nmarkers = \n    barricada: situaciones que implican precondiciones\n    es_cuadrado: el sudoku es una matriz n*n\n    numeros_validos: el sudoku esta formado por numeros enteros en el rango 1 a numeros\n    filas_validas: no existen numeros repetidos en las filas\n    columnas_validas: no existen numeros repetidos en las columnas\n```\n\nEn los casos test parametrizados utilizamos el marker con esta notación:\n\n```python\n@pytest.mark.filas_validas\n@pytest.mark.parametrize(\"sudoku, sano\",\n                         # resto de casos test\n                         [pytest.param(casosTest.numero_fuera_del_rango,\n                                         True,\n                                         marks=pytest.mark.barricada)])\n```\n\nSelección del marker de los casos test parametrizados:\n\n`pytest -m barricada`\n\nSelección del marker en el resto de casos test:\n\n`pytest -m numeros_validos`\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdfleta%2Fsudokumodules","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdfleta%2Fsudokumodules","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdfleta%2Fsudokumodules/lists"}