---
name: convert_github_to_raw_url
kind: function
lang: py
domain: core
version: "1.0.0"
purity: pure
signature: "convert_github_to_raw_url(url: str) -> str"
description: "Convierte una URL de blob de GitHub/GitLab a su URL raw. Ej: github.com/org/repo/blob/main/file.py → raw.githubusercontent.com/org/repo/main/file.py. Retorna la URL sin cambios si no aplica."
tags: [github, gitlab, url, raw, blob, convert, transform]
uses_functions: []
uses_types: []
returns: []
returns_optional: false
error_type: ""
imports: ["urllib.parse"]
params:
  - name: url
    desc: "URL a convertir (puede ser GitHub, GitLab o cualquier otra)"
output: "string con la URL convertida a raw format (o sin cambios si no es un blob)"
tested: true
tests:
  - "URL GitHub blob"
  - "URL GitLab blob"
  - "URL que no es blob retorna sin cambios"
  - "URL no-GitHub retorna sin cambios"
test_file_path: "python/functions/core/convert_github_to_raw_url_test.py"
file_path: "python/functions/core/convert_github_to_raw_url.py"
---

## Ejemplo

```python
from core.convert_github_to_raw_url import convert_github_to_raw_url

# GitHub blob → raw.githubusercontent.com
url = convert_github_to_raw_url(
    "https://github.com/openai/whisper/blob/main/README.md"
)
# "https://raw.githubusercontent.com/openai/whisper/main/README.md"

# GitLab blob → raw
url = convert_github_to_raw_url(
    "https://gitlab.com/org/repo/-/blob/main/file.py"
)
# "https://gitlab.com/org/repo/-/raw/main/file.py"

# URL sin blob → sin cambios
url = convert_github_to_raw_url("https://github.com/org/repo")
# "https://github.com/org/repo"
```

## Notas

Algoritmo:
1. Parsear la URL con `urllib.parse.urlparse`.
2. Si host es `github.com`: buscar segmento `blob` en el path.
   - Si existe: eliminar el segmento `blob` y cambiar el dominio a `raw.githubusercontent.com`.
3. Si host es `gitlab.com` o empieza con `gitlab.`: reemplazar `/-/blob/` por `/-/raw/`
   o `/blob/` por `/raw/`.
4. Cualquier otro host: retornar la URL sin cambios.

Funcion pura. No hace I/O ni tiene efectos secundarios.
