diff --git a/.gitignore b/.gitignore index c9dabf6..b2ffe5f 100644 --- a/.gitignore +++ b/.gitignore @@ -22,14 +22,18 @@ pip-delete-this-directory.txt # Local config / API keys .env *.env +.mx_osint_config.json config.json secrets.json keys.json -.mx_osint_config.json +tokens.json +credentials.json +*.local.json +*.config.json *.key *.pem -# OS junk +# OS files .DS_Store Thumbs.db diff --git a/MIGRATION.md b/MIGRATION.md index 53fc7c8..24dc4dc 100644 --- a/MIGRATION.md +++ b/MIGRATION.md @@ -1,16 +1,17 @@ # Migration Instructions -MeXiCOSINT now uses a production-style `src/` package layout. +MeXiCOSINT now uses a production-style `src/` package layout and an installable console command. ## What changed -- `mexicosint_v2.2.5.py` was replaced by `src/mexicosint/main.py`. -- The command-line entry point is now `src/mexicosint/cli.py`. -- Existing helper modules moved from `modules/` to `src/mexicosint/modules/`. +- The versioned script was replaced by `src/mexicosint/main.py`. +- The command-line interface lives in `src/mexicosint/cli.py`. +- The package entry point is `mexicosint = mexicosint.cli:run` in `pyproject.toml`. +- Existing helper modules live in `src/mexicosint/modules/`. - Service-facing wrappers live in `src/mexicosint/services/`. - Shared helpers live in `src/mexicosint/utils/`. -- Package metadata and the console script are defined in `pyproject.toml`. -- Local IFT data moved into `src/mexicosint/data/` so it can be packaged. +- Local IFT data lives in `src/mexicosint/data/` so it can be packaged. +- The legacy `bin/mexicosint` shell launcher was removed; use the installed `mexicosint` command instead. ## Install for development @@ -20,27 +21,34 @@ source venv/bin/activate pip install -e . ``` +Optional explicit dependency install for development: + +```bash +pip install -r requirements.txt +``` + ## Run after migration Use the installed command: ```bash -mexicosint 5512345678 +mexicosint --number 5512345678 +mexicosint --number +525512345678 mexicosint --ip 8.8.8.8 -mexicosint --dummy-test 5512345678 -mexicosint -b 5512345678 +mexicosint --dummy-test --number 5512345678 +mexicosint -b --number 5512345678 ``` -Run without installing: +The positional number form remains available for compatibility: ```bash -PYTHONPATH=src python3 -m mexicosint 5512345678 +mexicosint 5512345678 ``` -Or use the repository launcher: +Run without installing: ```bash -bash bin/mexicosint 5512345678 +PYTHONPATH=src python3 -m mexicosint --number 5512345678 ``` ## Import changes @@ -53,3 +61,13 @@ from mexicosint.modules.ift_sns import consultar from mexicosint.modules.quienhabla import consultar as consultar_quienhabla from mexicosint.services.scanner import run_phone_scan ``` + +## Safe migration steps + +1. Create a branch before changing structure. +2. Move source files under `src/mexicosint/`. +3. Convert script execution to `src/mexicosint/cli.py` and `src/mexicosint/main.py`. +4. Configure `pyproject.toml` with the `mexicosint` console script. +5. Install with `pip install -e .` in a virtual environment. +6. Run `mexicosint --number 5512345678` and `PYTHONPATH=src python3 -m mexicosint --number 5512345678`. +7. Remove references to legacy shell launchers from docs and scripts. diff --git a/README.md b/README.md index caaea95..e010bd4 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ La herramienta puede validar números, analizar formatos mexicanos, consultar fu - Enriquecimiento opcional mediante APIs externas - Procesamiento relacionado con IFT/SNS - Soporte para módulo QuienHabla.mx -- Launcher para ejecutar la herramienta sin escribir el nombre completo del script +- CLI instalable con el comando `mexicosint` - Configuración local de API keys - Soporte para reportes o salidas generadas según la versión @@ -45,8 +45,6 @@ La herramienta puede validar números, analizar formatos mexicanos, consultar fu ```text MeXiCOSINT/ -├── bin/ -│ └── mexicosint ├── docs/ │ ├── INSTALL.md │ ├── USAGE.md @@ -69,6 +67,7 @@ MeXiCOSINT/ │ └── validation.py ├── pyproject.toml ├── requirements.txt +├── MIGRATION.md ├── .gitignore ├── LICENSE └── README.md @@ -82,62 +81,59 @@ Clona el repositorio: ```bash git clone https://github.com/KiMiGuel/MeXiCOSINT.git -``` - -Entra a la carpeta del proyecto: - -```bash cd MeXiCOSINT ``` -Crea un entorno virtual: +Crea y activa un entorno virtual: ```bash python3 -m venv venv -``` - -Activa el entorno virtual: - -```bash source venv/bin/activate ``` -Instala las dependencias: +Instala el paquete en modo editable: ```bash -pip install -r requirements.txt +pip install -e . ``` -Instala el paquete en modo editable: +También puedes instalar las dependencias explícitas para desarrollo: ```bash -pip install -e . +pip install -r requirements.txt ``` --- ## Uso -Ejecuta MeXiCOSINT usando el launcher: +Ejecuta MeXiCOSINT con el comando instalado: + +```bash +mexicosint --number 5512345678 +mexicosint --number +525512345678 +mexicosint -b --number 5512345678 +``` + +El número posicional se mantiene por compatibilidad: ```bash mexicosint 5512345678 -mexicosint -b 5512345678 ``` -Tambien puedes usar el launcher del repositorio sin instalar el comando global: +Modo IP directo: ```bash -bash bin/mexicosint 5512345678 +mexicosint --ip 8.8.8.8 ``` -O ejecutar el modulo del paquete: +Ejecutar sin instalar el comando global: ```bash -PYTHONPATH=src python3 -m mexicosint 5512345678 +PYTHONPATH=src python3 -m mexicosint --number 5512345678 ``` -Use `-b`, `--compact-banner`, or the legacy `--small-banner` flag to force the compact ASCII banner. +Usa `-b`, `--compact-banner` o el alias heredado `--small-banner` para forzar el banner compacto. --- @@ -148,6 +144,7 @@ Use `-b`, `--compact-banner`, or the legacy `--small-banner` flag to force the c | [Guía de instalación](docs/INSTALL.md) | Instrucciones de instalación para Kali, Debian, Ubuntu y sistemas similares | | [Guía de uso](docs/USAGE.md) | Uso básico y notas de ejecución | | [Guía de configuración](docs/CONFIG.md) | Configuración local y manejo de API keys | +| [Migración](MIGRATION.md) | Cambios de estructura para el paquete instalable | --- @@ -178,6 +175,10 @@ No subas archivos como: config.json secrets.json keys.json +tokens.json +credentials.json +*.local.json +*.config.json .mx_osint_config.json ``` diff --git a/bin/mexicosint b/bin/mexicosint deleted file mode 100755 index 2f24c75..0000000 --- a/bin/mexicosint +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env bash - -# MeXiCOSINT launcher -# This lets users run the tool without typing the full Python filename. - -SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" - -cd "$REPO_ROOT" || exit 1 - -PYTHON_BIN="$REPO_ROOT/venv/bin/python" -if [[ ! -x "$PYTHON_BIN" ]]; then - PYTHON_BIN="python3" -fi - -PYTHONPATH="$REPO_ROOT/src${PYTHONPATH:+:$PYTHONPATH}" "$PYTHON_BIN" -m mexicosint "$@" diff --git a/docs/CONFIG.md b/docs/CONFIG.md index c14d408..f877ed9 100644 --- a/docs/CONFIG.md +++ b/docs/CONFIG.md @@ -14,32 +14,28 @@ La ruta recomendada es: ~/.mx_osint_config.json ``` -Este archivo debe existir solamente en tu computadora. - -No debe subirse a GitHub. +Este archivo debe existir solamente en tu computadora y no debe subirse a GitHub. --- ## Crear el archivo de configuración -Puedes crear el archivo con: +La primera ejecución puede crear un archivo base. También puedes crearlo manualmente: ```bash nano ~/.mx_osint_config.json ``` -Dentro del archivo puedes agregar tus API keys. - Ejemplo: ```json { - "abstractapi_key": "TU_ABSTRACTAPI_KEY", - "numverify_key": "TU_NUMVERIFY_KEY", - "shodan_key": "TU_SHODAN_KEY", - "ipinfo_key": "TU_IPINFO_KEY", - "ip2location_key": "TU_IP2LOCATION_KEY", - "opencage_key": "TU_OPENCAGE_KEY" + "abstract_phone_intelligence": "TU_ABSTRACTAPI_KEY", + "numverify": "TU_NUMVERIFY_KEY", + "shodan": "TU_SHODAN_KEY", + "ipinfo": "TU_IPINFO_KEY", + "ip2location": "TU_IP2LOCATION_KEY", + "opencage": "TU_OPENCAGE_KEY" } ``` @@ -49,21 +45,17 @@ Reemplaza cada valor con tu propia API key. ## Proteger el archivo -Para proteger el archivo de configuración local: - ```bash chmod 600 ~/.mx_osint_config.json ``` -Esto limita el acceso al archivo únicamente a tu usuario. +Esto limita el acceso del archivo únicamente a tu usuario. --- ## APIs opcionales -MeXiCOSINT puede funcionar parcialmente sin API keys. - -Sin embargo, algunas funciones tendrán mejores resultados si se configuran servicios externos. +MeXiCOSINT puede funcionar parcialmente sin API keys. Algunas funciones tendrán mejores resultados si configuras servicios externos. | Servicio | Función | | ----------- | ------------------------------------------------------------ | @@ -76,34 +68,10 @@ Sin embargo, algunas funciones tendrán mejores resultados si se configuran serv --- -## Funcionamiento sin API keys - -Si no configuras API keys, MeXiCOSINT puede seguir funcionando parcialmente. - -Ejemplo: - -```text -Sin API keys: -- Validación local -- Parsing básico -- Formato nacional/internacional -- Resultados limitados - -Con API keys: -- Enriquecimiento adicional -- Validación secundaria -- Más fuentes de comparación -- Mejor contexto para reportes -``` - ---- - ## Archivos que NO deben subirse No subas archivos que contengan claves, tokens o datos sensibles. -Ejemplos: - ```text .env *.env @@ -113,33 +81,19 @@ secrets.json keys.json tokens.json credentials.json +*.local.json +*.config.json ``` -Si uno de estos archivos aparece en GitHub por accidente, elimina el archivo y rota las claves afectadas. - -Porque sí, una API key subida a GitHub se convierte en comida gratis para bots antes de que termines de pestañear. Qué civilización tan brillante. +Si una clave llega a GitHub por accidente, elimina el archivo del repositorio y rota las claves afectadas. --- ## Revisar antes de hacer commit -Antes de subir cambios, puedes buscar posibles claves dentro del proyecto: - ```bash grep -Ri "api_key\|apikey\|token\|secret\|password\|credential" . -``` - -Si aparece una clave real, elimínala antes de hacer commit. - -También puedes revisar los archivos modificados con: - -```bash git status -``` - -Y revisar diferencias con: - -```bash git diff ``` @@ -147,8 +101,6 @@ git diff ## Configuración recomendada en `.gitignore` -El archivo `.gitignore` debe incluir entradas para evitar subir secretos por accidente: - ```gitignore .env *.env @@ -158,94 +110,26 @@ secrets.json keys.json tokens.json credentials.json +*.local.json +*.config.json *.key *.pem ``` --- -## Estructura recomendada - -La configuración sensible debe vivir fuera del repositorio: - -```text -/home/usuario/.mx_osint_config.json -``` - -o: - -```text -~/.mx_osint_config.json -``` - -El repositorio solo debe contener ejemplos, documentación y código. - ---- - -## Ejemplo seguro para documentación +## Ejecución con configuración local -Si quieres mostrar un ejemplo en la documentación, usa valores falsos: - -```json -{ - "abstractapi_key": "TU_ABSTRACTAPI_KEY", - "numverify_key": "TU_NUMVERIFY_KEY" -} -``` - -Nunca uses claves reales en ejemplos públicos. - ---- - -## Permisos recomendados - -Revisa los permisos actuales: - -```bash -ls -la ~/.mx_osint_config.json -``` - -Aplica permisos seguros: +Después de instalar el paquete: ```bash -chmod 600 ~/.mx_osint_config.json -``` - -Resultado esperado aproximado: - -```text --rw------- 1 usuario usuario ... /home/usuario/.mx_osint_config.json +mexicosint --number 5512345678 ``` ---- - -## Si subiste una API key por accidente - -1. Elimina la clave del repositorio. -2. Haz commit del cambio. -3. Entra al panel del proveedor de la API. -4. Revoca o elimina la API key expuesta. -5. Crea una API key nueva. -6. Actualiza tu archivo local `~/.mx_osint_config.json`. - -No basta con borrar la línea del README o del archivo actual. Git guarda historial. Porque Git es útil, pero también es un archivista con tendencias obsesivas. - ---- - -## Variables de entorno - -En futuras versiones, MeXiCOSINT también podría usar variables de entorno. - -Ejemplo: +Modo IP directo: ```bash -export ABSTRACTAPI_KEY="TU_ABSTRACTAPI_KEY" -``` - -Pero la forma recomendada para este proyecto es usar: - -```text -~/.mx_osint_config.json +mexicosint --ip 8.8.8.8 ``` --- @@ -259,15 +143,3 @@ Pero la forma recomendada para este proyecto es usar: * Rota cualquier clave que haya sido expuesta. * Usa ejemplos falsos en documentación pública. * Revisa cambios antes de hacer commit. - ---- - -## Estado - -Si el archivo existe y tiene permisos correctos, puedes ejecutar: - -```bash -bash bin/mexicosint -``` - -Y MeXiCOSINT debería poder leer la configuración local según las funciones disponibles en la versión actual. diff --git a/docs/INSTALL.md b/docs/INSTALL.md index c78ba2b..2119d6e 100644 --- a/docs/INSTALL.md +++ b/docs/INSTALL.md @@ -17,9 +17,6 @@ Instala los requisitos base con: ```bash sudo apt update -``` - -```bash sudo apt install -y python3 python3-pip python3-venv git ``` @@ -27,15 +24,8 @@ sudo apt install -y python3 python3-pip python3-venv git ## Clonar el repositorio -Clona el repositorio desde GitHub: - ```bash git clone https://github.com/KiMiGuel/MeXiCOSINT.git -``` - -Entra a la carpeta del proyecto: - -```bash cd MeXiCOSINT ``` @@ -45,50 +35,41 @@ cd MeXiCOSINT Se recomienda usar un entorno virtual para evitar conflictos con paquetes del sistema. -Crea el entorno virtual: - ```bash python3 -m venv venv -``` - -Activa el entorno virtual: - -```bash source venv/bin/activate ``` -Cuando el entorno virtual esté activo, tu terminal debería mostrar algo parecido a: +--- -```text -(venv) usuario@equipo:~/MeXiCOSINT$ -``` +## Instalar el paquete ---- +Instala MeXiCOSINT en modo editable desde la raíz del repositorio: -## Instalar dependencias +```bash +pip install -e . +``` -Instala las dependencias del proyecto: +Para desarrollo, también puedes instalar desde `requirements.txt`: ```bash pip install -r requirements.txt ``` -Si todo sale correctamente, MeXiCOSINT estará listo para ejecutarse. - --- ## Ejecutar MeXiCOSINT -La forma recomendada es usar el launcher incluido: +La forma recomendada es usar el comando instalado: ```bash -bash bin/mexicosint +mexicosint --number 5512345678 ``` -También puedes ejecutar directamente el archivo principal: +También puedes ejecutar el módulo del paquete sin instalar el comando global: ```bash -PYTHONPATH=src python3 -m mexicosint +PYTHONPATH=src python3 -m mexicosint --number 5512345678 ``` --- @@ -103,16 +84,12 @@ El archivo recomendado para configuración local es: ~/.mx_osint_config.json ``` -Este archivo debe quedarse en tu computadora. - -No debe subirse a GitHub. +Este archivo debe quedarse en tu computadora y no debe subirse a GitHub. --- ## Proteger archivo de configuración -Para proteger el archivo de configuración local: - ```bash chmod 600 ~/.mx_osint_config.json ``` @@ -121,10 +98,9 @@ chmod 600 ~/.mx_osint_config.json ## Actualizar MeXiCOSINT -Para actualizar el repositorio: - ```bash git pull +pip install -e . ``` Si las dependencias cambiaron, vuelve a ejecutar: @@ -137,8 +113,6 @@ pip install -r requirements.txt ## Salir del entorno virtual -Cuando termines de usar la herramienta: - ```bash deactivate ``` @@ -147,8 +121,6 @@ deactivate ## Instalación rápida -Resumen completo: - ```bash sudo apt update sudo apt install -y python3 python3-pip python3-venv git @@ -156,8 +128,8 @@ git clone https://github.com/KiMiGuel/MeXiCOSINT.git cd MeXiCOSINT python3 -m venv venv source venv/bin/activate -pip install -r requirements.txt -bash bin/mexicosint +pip install -e . +mexicosint --number 5512345678 ``` --- @@ -176,38 +148,29 @@ bash bin/mexicosint ### `python3: command not found` -Instala Python: - ```bash sudo apt install -y python3 ``` ### `pip: command not found` -Instala pip: - ```bash sudo apt install -y python3-pip ``` ### Error creando el entorno virtual -Instala venv: - ```bash sudo apt install -y python3-venv ``` -### Error de permisos - -Asegúrate de estar dentro de la carpeta del proyecto y de tener permisos sobre los archivos. +### El comando `mexicosint` no existe -```bash -pwd -``` +Confirma que el entorno virtual está activo y reinstala el paquete: ```bash -ls -la +source venv/bin/activate +pip install -e . ``` --- @@ -217,7 +180,5 @@ ls -la Si la instalación terminó correctamente, deberías poder ejecutar: ```bash -bash bin/mexicosint +mexicosint --number 5512345678 ``` - -Y ver el inicio de MeXiCOSINT en la terminal. diff --git a/docs/USAGE.md b/docs/USAGE.md index d80fb5d..6137522 100644 --- a/docs/USAGE.md +++ b/docs/USAGE.md @@ -6,38 +6,32 @@ Esta guía explica cómo ejecutar y usar **MeXiCOSINT** después de instalarlo. ## Antes de empezar -Asegúrate de estar dentro de la carpeta del proyecto: - -```bash -cd MeXiCOSINT -``` - -Activa el entorno virtual: +Activa el entorno virtual donde instalaste el paquete: ```bash source venv/bin/activate ``` -Si el entorno virtual está activo, tu terminal debería mostrar algo parecido a: - -```text -(venv) usuario@equipo:~/MeXiCOSINT$ -``` - --- ## Ejecutar MeXiCOSINT -La forma recomendada es usar el launcher incluido: +La forma recomendada es usar el comando instalado: ```bash -bash bin/mexicosint +mexicosint --number 5512345678 ``` -También puedes ejecutar directamente el archivo principal: +También puedes usar el número como argumento posicional por compatibilidad: ```bash -PYTHONPATH=src python3 -m mexicosint +mexicosint 5512345678 +``` + +Para ejecutar sin instalar el comando global: + +```bash +PYTHONPATH=src python3 -m mexicosint --number 5512345678 ``` --- @@ -46,51 +40,44 @@ PYTHONPATH=src python3 -m mexicosint MeXiCOSINT está enfocado en números telefónicos mexicanos. -Formato recomendado: +Formato internacional: ```text +52XXXXXXXXXX ``` -También puede aceptar formato nacional de 10 dígitos: +Formato nacional de 10 dígitos: ```text XXXXXXXXXX ``` -Ejemplo de formato internacional: - -```text -+525512345678 -``` - -Ejemplo de formato nacional: +Ejemplos: -```text -5512345678 +```bash +mexicosint --number +525512345678 +mexicosint --number 5512345678 ``` --- -## Flujo básico de uso - -1. Ejecuta la herramienta: +## Opciones principales ```bash -bash bin/mexicosint +mexicosint --number 5512345678 +mexicosint --ip 8.8.8.8 +mexicosint --dummy-test --number 5512345678 +mexicosint -b --number 5512345678 +mexicosint --version ``` -2. Ingresa el número telefónico cuando la herramienta lo solicite. - -3. Revisa los resultados mostrados en terminal. - -4. Si la herramienta genera reportes, revisa los archivos creados dentro del proyecto. +`-b`, `--compact-banner` y `--small-banner` fuerzan el banner compacto. --- ## Resultados posibles -Dependiendo de la versión, configuración y API keys disponibles, MeXiCOSINT puede mostrar información como: +Dependiendo de la configuración y API keys disponibles, MeXiCOSINT puede mostrar información como: * Validación del número * Formato nacional @@ -107,86 +94,39 @@ Dependiendo de la versión, configuración y API keys disponibles, MeXiCOSINT pu ## APIs y resultados limitados -MeXiCOSINT puede funcionar parcialmente sin API keys. - -Sin embargo, algunas funciones pueden estar limitadas si no configuraste servicios externos. - -Ejemplo: +MeXiCOSINT puede funcionar parcialmente sin API keys. Algunas funciones estarán limitadas si no configuraste servicios externos. ```text Sin API key: validación local y parsing básico Con API key: enriquecimiento adicional según el servicio configurado ``` -Para configurar API keys, revisa: - -```text -docs/CONFIG.md -``` +Para configurar API keys, revisa `docs/CONFIG.md`. --- ## Reportes y archivos generados -Si la herramienta genera reportes, pueden aparecer archivos como: - -```text -reporte.json -``` - -```text -reporte.html -``` - -```text -reporte_mapa.html -``` - -Los nombres exactos pueden cambiar según la versión. - -También puede haber carpetas como: - -```text -reports/ -``` +Los reportes generados se escriben dentro de carpetas ignoradas por Git, como: ```text output/ -``` - -```text +reports/ results/ ``` -Si no aparece ningún reporte, revisa la salida en terminal para confirmar si la función está disponible en tu versión. - ---- - -## Modo de prueba o desarrollo - -Si la versión incluye un modo de prueba, puede ejecutarse con una bandera especial. - -Ejemplo: - -```bash -PYTHONPATH=src python3 -m mexicosint --dummy-test -``` - -Este modo está pensado para desarrollo local. - -No debe considerarse una función principal para usuarios finales. +No publiques reportes con información sensible. --- ## Actualizar antes de usar -Para actualizar el repositorio: - ```bash git pull +pip install -e . ``` -Después, si cambiaron las dependencias: +Si cambiaron las dependencias: ```bash pip install -r requirements.txt @@ -194,16 +134,6 @@ pip install -r requirements.txt --- -## Salir del entorno virtual - -Cuando termines: - -```bash -deactivate -``` - ---- - ## Buenas prácticas * Verifica resultados con más de una fuente. @@ -216,88 +146,26 @@ deactivate ## Solución rápida de problemas -### El comando `bash bin/mexicosint` no funciona - -Confirma que estás dentro de la carpeta del proyecto: - -```bash -pwd -``` - -Confirma que existe el launcher: - -```bash -ls -la bin -``` +### El comando `mexicosint` no funciona -Ejecuta otra vez: +Confirma que el entorno virtual está activo y que el paquete fue instalado: ```bash -bash bin/mexicosint +source venv/bin/activate +pip install -e . ``` ---- - ### Error de dependencias -Vuelve a instalar los requisitos: - ```bash pip install -r requirements.txt ``` ---- - -### Error con el entorno virtual - -Recrea el entorno virtual: - -```bash -rm -rf venv -``` - -```bash -python3 -m venv venv -``` - -```bash -source venv/bin/activate -``` - -```bash -pip install -r requirements.txt -``` - ---- - ### API key no detectada -Revisa que el archivo de configuración exista: - ```bash ls -la ~/.mx_osint_config.json -``` - -Revisa permisos: - -```bash chmod 600 ~/.mx_osint_config.json ``` -Revisa la guía de configuración: - -```text -docs/CONFIG.md -``` - ---- - -## Estado - -Si todo está correcto, deberías poder ejecutar: - -```bash -bash bin/mexicosint -``` - -Y ver el inicio de MeXiCOSINT en terminal. +Revisa `docs/CONFIG.md`. diff --git a/pyproject.toml b/pyproject.toml index 7b79ead..c4a5143 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -14,7 +14,6 @@ dependencies = [ "requests>=2.28.0", "urllib3<2", "beautifulsoup4>=4.11.0", - "python-dotenv>=0.19.0", "lxml>=4.9.0", "phonenumbers>=8.13.0", "rich>=13.0.0", @@ -23,7 +22,7 @@ dependencies = [ ] [project.scripts] -mexicosint = "mexicosint.cli:main" +mexicosint = "mexicosint.cli:run" [tool.setuptools.packages.find] where = ["src"] diff --git a/requirements.txt b/requirements.txt index 10725b7..24bc7b6 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,9 +1,8 @@ requests>=2.28.0 urllib3<2 beautifulsoup4>=4.11.0 -python-dotenv>=0.19.0 lxml>=4.9.0 phonenumbers>=8.13.0 rich>=13.0.0 opencage>=3.0.0 -folium>=0.14.0 +folium>=0.14.0 diff --git a/src/mexicosint/__main__.py b/src/mexicosint/__main__.py index f32ed97..e010681 100644 --- a/src/mexicosint/__main__.py +++ b/src/mexicosint/__main__.py @@ -1,7 +1,7 @@ """Module entry point for `python -m mexicosint`.""" -from mexicosint.cli import main +from mexicosint.cli import run if __name__ == "__main__": - raise SystemExit(main()) + raise SystemExit(run()) diff --git a/src/mexicosint/cli.py b/src/mexicosint/cli.py index e804e8d..5ab9b2b 100644 --- a/src/mexicosint/cli.py +++ b/src/mexicosint/cli.py @@ -3,6 +3,7 @@ from __future__ import annotations import argparse +from typing import List, Optional from mexicosint import __version__ @@ -15,6 +16,12 @@ def build_parser() -> argparse.ArgumentParser: parser.add_argument( "number", nargs="?", + help="Numero telefonico mexicano a escanear. Se mantiene por compatibilidad.", + ) + parser.add_argument( + "--number", + dest="phone_number", + metavar="PHONE", help="Numero telefonico mexicano a escanear.", ) parser.add_argument( @@ -44,29 +51,43 @@ def build_parser() -> argparse.ArgumentParser: return parser -def _to_legacy_argv(args: argparse.Namespace) -> list[str]: - """Translate argparse output to the existing scanner argument format.""" - argv: list[str] = [] +def _scan_number(args: argparse.Namespace) -> Optional[str]: + return args.phone_number or args.number + + +def _to_scanner_argv(args: argparse.Namespace) -> List[str]: + """Translate CLI options to the scanner argument format.""" + argv = [] if args.dummy_test: argv.append("--dummy-test") if args.small_banner: argv.append("--small-banner") if args.ip: argv.extend(["--ip", args.ip]) - elif args.number: - argv.append(args.number) + else: + number = _scan_number(args) + if number: + argv.append(number) return argv -def main(argv: list[str] | None = None) -> int: +def run(argv: Optional[List[str]] = None) -> int: parser = build_parser() args = parser.parse_args(argv) - if not args.ip and not args.number: + if args.ip and _scan_number(args): + parser.error("usa --ip o --number, no ambos") + + if not args.ip and not _scan_number(args): parser.print_help() return 1 from mexicosint import main as app - app.main(_to_legacy_argv(args)) + app.main(_to_scanner_argv(args)) return 0 + + +def main(argv: Optional[List[str]] = None) -> int: + """Backward-compatible wrapper for older entry-point references.""" + return run(argv)