
    9i                    p   U d Z ddlmZ ddlZddlZddlmZ ddlmZm	Z	m
Z
 ddlmZ ddlZej                  s ed       ej                   ej"                  d	        ee      Zdad
ed<   d Zej/                  d      d        Zej/                  d      d        Zedk(  rej5                  dd       yy)u\  API Flask para buscar y devolver documentos en MongoDB.

Este servicio expone un endpoint `/search` que permite buscar documentos en una colección
específica usando un filtro JSON.

Uso:
  python app.py
  curl "http://localhost:5000/search?collection=miColeccion&filter={"activo":true}"

La URI de MongoDB se configura en el archivo `config.py`.
    )annotationsN)Any)Flaskjsonifyrequest)MongoClientzYERROR: Debes configurar MONGODB_URI en config.py o en la variable de entorno MONGODB_URI.z'[%(asctime)s] %(levelname)s %(message)s)levelformatzMongoClient | Noneclientc                     t         .t        t        j                        a t	        j
                  d       t        j                  rt         t        j                     S t         j                         S )NzConectado a MongoDB)r   r   configMONGODB_URIlogginginfo
MONGODB_DBget_default_database     /home/alumno/examen2/app.pyget_dbr   %   sM    ~V//0*+f''((&&((r   z/searchc            	        t         j                  j                  d      xs t        j                  } t         j                  j                  d      }t         j                  j                  d      }| st        ddi      dfS i }|r	 t        j                  |      }d }|r 	 t        d	t        d
t        |                  }t               }||    j                  |      }||j!                  |      }t#        |      }dd}	|D 
cg c]
  }
 |	|
       }}
t        t%        |      |d      S # t        j                  $ r#}t        dt        |      d      dfcY d }~S d }~ww xY w# t        $ r t        ddi      dfcY S w xY wc c}
w )N
collectionfilterlimiterroru@   Parámetro 'collection' requerido (o config.MONGODB_COLLECTION).i  uA   No se pudo parsear el parámetro 'filter'. Debe ser JSON válido.)r   details   i  u1   El parámetro 'limit' debe ser un número entero.c                    	 t        j                  t        j                  | t                    S # t        $ r t        |       cY S w xY w)N)default)jsonloadsdumpsstr	TypeError)objs    r   
_serializezsearch.<locals>._serializeV   s9    	::djjc:;; 	s8O	s   -0 AA)count	documents)r%   r   returnr   )r   argsgetr   MONGODB_COLLECTIONr   r    r!   JSONDecodeErrorr#   maxminint
ValueErrorr   findr   listlen)collection_name
filter_str	limit_strmongo_filterexcr   dbcursorr(   r&   doc
serializeds               r   searchr>   1   s~   ll&&|4Q8Q8QO!!(+J  )I!cdegjjj#%L		::j1L E	`3tS^45E 
B %%l3Fe$VI .77c*S/7J7S_:FGGA ## 	`"3x   	  	`G%XYZ\___	`" 8s6   D+  E$ F+E!>EE!E!$E?>E?/c                      	 y)Nu   <h1>Mongo Search App (Python)</h1><p>Usa <code>/search?collection=...&filter=...&limit=...</code></p><p>O configura <code>MONGODB_COLLECTION</code> en <code>config.py</code> para no tener que pasar <code>collection</code> en cada petición.</p>r   r   r   r   rootrA   a   s    	Zr   __main__z0.0.0.0i  )hostport)__doc__
__future__r   r    r   typingr   flaskr   r   r   pymongor   r   r   
SystemExitbasicConfigINFO__name__appr   __annotations__r   router>   rA   runr   r   r   <module>rR      s   
 #    ) )  
c    ',,/X YHo " !	) 9,H ,H^ 3  zGGG& r   