"mimetypes" --- Mapea nombres de archivo a tipos MIME
*****************************************************

**Código fuente:** Lib/mimetypes.py

======================================================================

El módulo "mimetypes" convierte entre un nombre de archivo o URL y el
tipo MIME asociado a la extensión del nombre de archivo. Se
proporcionan conversiones de nombre de archivo a tipo MIME y de tipo
MIME a extensión de nombre de archivo; no se admiten codificaciones
para esta última conversión.

El módulo proporciona una clase y varias funciones de conveniencia.
Las funciones son la interfaz normal de este módulo, pero algunas
aplicaciones pueden estar interesadas en la clase también.

Las funciones que se describen a continuación constituyen la interfaz
principal de este módulo. Si el módulo no ha sido inicializado,
llamarán "init()" si se basan en la información que "init()"
establece.

mimetypes.guess_type(url, strict=True)

   Adivina el tipo de un archivo basado en su nombre de archivo, ruta
   o URL, dado por *url*. La URL puede ser una cadena o un objeto
   *path-like object*.

   El valor de retorno es una tupla "(type, encoding)" donde *type* es
   "None" si el tipo no puede ser adivinado (por sufijo ausente o
   desconocido) o una cadena de la forma "type/subtype'", utilizable
   para un encabezado MIME *content-type*.

   *encoding* es "None" para no codificar o el nombre del programa
   usado para codificar (por ejemplo **compress** o **gzip**). La
   codificación es adecuada para ser usada como una cabecera de
   *Content-Encoding*, **no** como una cabecera de *Content-Transfer-
   Encoding*. Los mapeos son conducidos por tablas. Los sufijos de
   codificación son sensibles a las mayúsculas y minúsculas; los
   sufijos de tipo se prueban primero distinguiendo entre mayúsculas y
   minúsculas, y luego sin dicha distinción.

   El argumento opcional *strict* es una flag que especifica si la
   lista de tipos MIME conocidos se limita sólo a los tipos oficiales
   registrados en IANA. Cuando *strict* es "True" (el valor por
   defecto), sólo se soportan los tipos de IANA; cuando *strict* es
   "False", también se reconocen algunos tipos MIME adicionales no
   estándar pero de uso común.

   Distinto en la versión 3.8: Añadido soporte para que la URL sea un
   objeto *path-like object*.

mimetypes.guess_all_extensions(type, strict=True)

   Adivina las extensiones de un archivo basadas en su tipo MIME,
   dadas por *type*. El valor de retorno es una lista de cadenas que
   dan todas las extensiones posibles del nombre del archivo,
   incluyendo el punto inicial ("'.'"). No se garantiza que las
   extensiones hayan sido asociadas con ningún flujo de datos en
   particular, pero serían mapeadas al tipo MIME *type* por
   "guess_type()".

   El argumento opcional *strict* tiene el mismo significado que con
   la función "guess_type()".

mimetypes.guess_extension(type, strict=True)

   Adivina la extensión de un archivo basada en su tipo MIME, dada por
   *type*. El valor de retorno es una cadena que da una extensión de
   nombre de archivo, incluyendo el punto inicial ("'.'"). No se
   garantiza que la extensión haya sido asociada con ningún flujo de
   datos en particular, pero sería mapeada al tipo MIME *type* por
   "guess_type()". Si no se puede adivinar ninguna extensión para
   *type*, se retorna "None".

   El argumento opcional *strict* tiene el mismo significado que con
   la función "guess_type()".

Algunas funciones adicionales y elementos de datos están disponibles
para controlar el comportamiento del módulo.

mimetypes.init(files=None)

   Inicializa las estructuras de datos internos. Si se proporciona
   *files* debe ser una secuencia de nombres de archivos que deben
   utilizarse para aumentar el mapa de tipo por defecto. Si se omite,
   los nombres de archivo a utilizar se toman de "knownfiles"; en
   Windows, se cargan las configuraciones actuales del registro. Cada
   archivo nombrado en *files* o "knownfiles" tiene prioridad sobre
   los nombrados antes de él. Se permite llamar repetidamente a
   "init()".

   Si se especifica una lista vacía para *files* se evitará que se
   apliquen los valores predeterminados del sistema: sólo estarán
   presentes los valores conocidos de una lista incorporada.

   Si *files* es "None" la estructura interna de datos se reconstruye
   completamente a su valor inicial por defecto. Esta es una operación
   estable y producirá los mismos resultados cuando se llame varias
   veces.

   Distinto en la versión 3.2: Anteriormente, la configuración del
   registro de Windows se ignoraba.

mimetypes.read_mime_types(filename)

   Carga el mapa de tipo dado en el archivo *filename*, si existe. El
   mapa de tipos es retornado como un diccionario que mapea las
   extensiones de los nombres de archivo, incluyendo el punto inicial
   ("'.'"), a las cadenas de la forma "'type/subtype'". Si el archivo
   *filename* no existe o no puede ser leído, se retorna "None".

mimetypes.add_type(type, ext, strict=True)

   Añade un mapeo del tipo MIME *type* a la extensión *ext*. Cuando la
   extensión ya se conoce, el nuevo tipo reemplazará al antiguo.
   Cuando el tipo ya se conoce la extensión se añadirá a la lista de
   extensiones conocidas.

   Cuando *strict* es "True" (el valor por defecto), el mapeo se
   añadirá a los tipos MIME oficiales, de lo contrario a los no
   estándar.

mimetypes.inited

   Flag que indica si se han inicializado o no las estructuras de
   datos globales. Esto se establece como "True" por "init()".

mimetypes.knownfiles

   Lista de los nombres de los archivos de mapas de tipo comúnmente
   instalados.  Estos archivos se llaman típicamente  "mime.types" y
   se instalan en diferentes lugares por diferentes paquetes.

mimetypes.suffix_map

   Diccionario que mapea sufijos a sufijos. Se utiliza para permitir
   el reconocimiento de archivos codificados cuya codificación y tipo
   se indican con la misma extensión. Por ejemplo, la extensión ".tgz"
   se mapea a ".tar.gz" para permitir que la codificación y el tipo se
   reconozcan por separado.

mimetypes.encodings_map

   El diccionario mapea las extensiones de los nombres de archivo a
   los tipos de codificación.

mimetypes.types_map

   Diccionario que mapea extensiones de los nombres de archivo a tipos
   MIME.

mimetypes.common_types

   Diccionario que mapea extensiones de los nombres de archivo a tipos
   MIME no estándar, pero comúnmente encontrados.

Un ejemplo de utilización del módulo:

   >>> import mimetypes
   >>> mimetypes.init()
   >>> mimetypes.knownfiles
   ['/etc/mime.types', '/etc/httpd/mime.types', ... ]
   >>> mimetypes.suffix_map['.tgz']
   '.tar.gz'
   >>> mimetypes.encodings_map['.gz']
   'gzip'
   >>> mimetypes.types_map['.tgz']
   'application/x-tar-gz'


Objetos MimeTypes
=================

La clase "MimeTypes" puede ser útil para aplicaciones que quieran más
de una base de datos de tipo MIME; proporciona una interfaz similar a
la del módulo "mimetypes".

class mimetypes.MimeTypes(filenames=(), strict=True)

   Esta clase representa una base de datos de tipos MIME. Por defecto,
   proporciona acceso a la misma base de datos que el resto de este
   módulo. La base de datos inicial es una copia de la proporcionada
   por el módulo, y puede ser extendida cargando archivos adicionales
   de tipo "mime.types" en la base de datos usando los métodos
   "read()" o "readfp()". Los diccionarios de mapeo también pueden ser
   borrados antes de cargar datos adicionales si no se desean los
   datos por defecto.

   El parámetro opcional *filenames* puede utilizarse para hacer que
   se carguen archivos adicionales "encima" de la base de datos
   predeterminada.

   suffix_map

      El diccionario mapea sufijos a sufijos. Se utiliza para permitir
      el reconocimiento de archivos codificados cuya codificación y
      tipo se indican con la misma extensión. Por ejemplo, la
      extensión ".tgz" se mapea a ".tar.gz" para permitir que la
      codificación y el tipo se reconozcan por separado. Esto es
      inicialmente una copia del global "suffix_map" definido en el
      módulo.

   encodings_map

      El diccionario mapea las extensiones de los nombres de archivo a
      los tipos de codificación. Es inicialmente una copia del global
      "encodings_map" definido en el módulo.

   types_map

      Una tupla que contiene dos diccionarios, mapeando las
      extensiones de los nombres de archivo a los tipos MIME: el
      primer diccionario es para los tipos no estándar y el segundo
      para los tipos estándar. Están inicializados por "common_types"
      y "types_map".

   types_map_inv

      Una tupla que contiene dos diccionarios, mapeando los tipos MIME
      a una lista de extensiones de nombres de archivos: el primer
      diccionario es para los tipos no estándar y el segundo para los
      tipos estándar. Están inicializados por "common_types" y
      "types_map".

   guess_extension(type, strict=True)

      Similar a la función "guess_extension()", usando las tablas
      almacenadas como parte del objeto.

   guess_type(url, strict=True)

      Similar a la función "guess_type()", usando las tablas
      almacenadas como parte del objeto.

   guess_all_extensions(type, strict=True)

      Similar a la función "guess_all_extensions()", usando las tablas
      almacenadas como parte del objeto.

   read(filename, strict=True)

      Carga información MIME de un archivo llamado *filename*. Esto
      usa "readfp()" para analizar el archivo.

      Si *strict* es "True", la información se añadirá a la lista de
      tipos estándar, si no a la lista de tipos no estándar.

   readfp(fp, strict=True)

      Carga información de tipo MIME de un archivo abierto *fp*.  El
      archivo debe tener el formato de los archivos estándar
      "mime.types".

      Si *strict* es "True", la información se va a añadir a la lista
      de tipos estándar, de otro modo se añadirá a la lista de tipos
      no estándar.

   read_windows_registry(strict=True)

      Carga información desde el registro de Windows del tipo de
      metadato MIME.

      Disponibilidad: Windows.

      Si *strict* es "True", la información se va a añadir a la lista
      de tipos estándar, de otro modo se añadirá a la lista de tipos
      no estándar.

      Nuevo en la versión 3.2.
