[pyar] xml.etree.ElementTree

Federico Brest federiconbrest en gmail.com
Mie Dic 18 15:48:49 -03 2019


Ah sisi, pensé que me hablabas de la variable, perdón.
Si, eso hice, ahora tengo el problema con la variable de devolución del
método getInfoFromApi
Le puse que me devuelva tree ( que la genero en esta línea tree =
lxmlhtml.fromstring(source_code) ) pero me dice que no esta definida


El mié., 18 dic. 2019 a las 15:26, Augusto (<adtononi en gmail.com>) escribió:

> Lo estás usando. Response se le suele llamar a la devolución del request.
> En tú caso hiciste:
> requests.get(url, headers=custom_header, data=args).text
> Acá pone content en vez de text
>
> El mié., 18 dic. 2019 15:16, Federico Brest <federiconbrest en gmail.com>
> escribió:
>
>> No uso response.text finalmente, esta comentada esa linea
>>
>> El mié., 18 dic. 2019 a las 15:03, Augusto (<adtononi en gmail.com>)
>> escribió:
>>
>>> Intenta usar response.content en vez de response.text, te va a devolver
>>> el body en bytes
>>>
>>> El mié., 18 dic. 2019 14:36, Federico Brest <federiconbrest en gmail.com>
>>> escribió:
>>>
>>>> Muchas gracias por la pronta respuesta y el aguante!!
>>>> Compila perfecto, pero me estoy encontrando con el siguiente error:
>>>> "Unicode strings with encoding declaration are not supported. Please
>>>> use bytes input or XML fragments without declaration. "
>>>> Sabes cómo resolverlo?
>>>>
>>>> El mié., 18 dic. 2019 a las 14:11, Augusto (<adtononi en gmail.com>)
>>>> escribió:
>>>>
>>>>> Es: from lxml import html as lxmlhtml
>>>>> Después podes usar lxmlhtml.fromstring, si no me equivoco
>>>>>
>>>>>
>>>>> El mié., 18 dic. 2019 12:09, Federico Brest <federiconbrest en gmail.com>
>>>>> escribió:
>>>>>
>>>>>> Buenas! Hice lo que me recomendaste Agusto, y no me reconoce un
>>>>>> módulo de fromstring...me comí algo?
>>>>>> Va el código en cuestión:
>>>>>>
>>>>>> #import json
>>>>>> import requests
>>>>>> import io
>>>>>> import xml.etree.ElementTree as ET
>>>>>> import lxml
>>>>>> import html as lxmlhtml
>>>>>> from lxml.html import fromstring
>>>>>>
>>>>>> def validar_cuit(cuit):
>>>>>>     # validaciones minimas
>>>>>>     if len(cuit) != 11:
>>>>>>         #print("False")
>>>>>>         return False
>>>>>>
>>>>>>     base = [5, 4, 3, 2, 7, 6, 5, 4, 3, 2]
>>>>>>
>>>>>>     #cuit = cuit.replace("-", "")
>>>>>>
>>>>>>     # calculo el digito verificador:
>>>>>>     aux = 0
>>>>>>     for i in range(10):
>>>>>>         aux += int(cuit[i]) * base[i]
>>>>>>
>>>>>>     aux = 11 - (aux - (int(aux / 11) * 11))
>>>>>>
>>>>>>     if aux == 11:
>>>>>>         aux = 0
>>>>>>     if aux == 10:
>>>>>>         aux = 9
>>>>>>
>>>>>>     #print("True")
>>>>>>     return aux == int(cuit[10])
>>>>>>
>>>>>> def getInfoFromApi(cuit):
>>>>>>     custom_header = {
>>>>>>         'usuario_apikey':
>>>>>> "QWTERT2syVkQ2NW1UN2c3MWNQeWEWFWEFWExVRnJVUT09",
>>>>>>         'Cookie':
>>>>>> "__cfduid=de5890d2d1645d87b18692a6sdfsdfgdfhdad91d6adf1576011069;
>>>>>> MIPROVEEDOR=l5r3dteuh2rkgwerwerfde4t9qm85tl8sm; ROUTEID=.1",
>>>>>>     }
>>>>>>
>>>>>>     url = 'https://informe.mirproveedor.com/api/informes/solicitar/'
>>>>>> + str(cuit)
>>>>>>     args = {'formato':'xml', 'procesar_forzado':'1', 'cuit': cuit }
>>>>>>
>>>>>>     source_code = requests.get(url, headers=custom_header,
>>>>>> data=args).text
>>>>>>     tree = lxmlhtml.fromstring(source_code)
>>>>>>
>>>>>>     #response = requests.get(url, headers=custom_header, data=args)
>>>>>>     #tree = ET.parse(response.text)
>>>>>>     #root = tree.getroot()
>>>>>>     #content = response.json()
>>>>>>
>>>>>>     print("-- Status Code:", response.status_code)
>>>>>>
>>>>>>     return content
>>>>>>
>>>>>> def saveInfo(content, filename):
>>>>>>     '''with io.open(filename, 'w', encoding='utf8') as file:
>>>>>>         #json.dump(content, file, indent=4, ensure_ascii=False)
>>>>>>         file.write(response.text)
>>>>>>
>>>>>>         #Process XML here
>>>>>>         #tree.write('file-after-edits.xml', encoding='utf8')
>>>>>>     '''
>>>>>>     with open(filename, 'w', encoding = 'utf-8') as filexml:
>>>>>>         filexml.write(tree)
>>>>>>         filexml.close()
>>>>>>
>>>>>>
>>>>>> def prettify(elem):
>>>>>>     # Devuelve un XML impreso formateado y string del elemento
>>>>>>     rough_string = ElementTree.tostring(elem, 'utf-8')
>>>>>>     reparsed = minidom.parseString(rough_string)
>>>>>>     return reparsed.toprettyxml(indent="\t")
>>>>>>
>>>>>>
>>>>>> if __name__ == '__main__':
>>>>>>     cuit = input("Ingrese un numero de cuit: ")
>>>>>>
>>>>>>     print("- Obteniendo información de", cuit)
>>>>>>     info = getInfoFromApi(cuit)
>>>>>>
>>>>>>     cuitValido = validar_cuit(cuit)
>>>>>>     if cuitValido == False:
>>>>>>         print("El Cuit ",cuit," es Invalido")
>>>>>>         print("Presione una tecla para Finalizar...")
>>>>>>         msvcrt.getch()
>>>>>>     else:
>>>>>>         print("cuil válido")
>>>>>>
>>>>>>     filename = cuit + '.xml'
>>>>>>     saveInfo(info, filename)
>>>>>>     print("- Guardado en", filename)
>>>>>>
>>>>>>     print("Presione una tecla para finalizar...")
>>>>>>     msvcrt.getch()
>>>>>>
>>>>>> El lun., 16 dic. 2019 a las 16:18, Augusto (<adtononi en gmail.com>)
>>>>>> escribió:
>>>>>>
>>>>>>> Entonces hace lo siguiente:
>>>>>>>
>>>>>>> Leete esa librería y crea un XML puro, es decir creando nodos (no te
>>>>>>> olvides de utilizar CDATA, está en la documentación también). A estos nodos
>>>>>>> insertale la data que extraigas usando las expresiones Xpath (tenes una
>>>>>>> extensión para el buscador llamada TryXpath, literal pegas la expresión y
>>>>>>> marca a que elemento corresponde, dicha expresión después la pegas en el
>>>>>>> script de python).
>>>>>>>
>>>>>>> Esto es scrapeo web, vas a econtrar tutoriales para scrapear y meter
>>>>>>> la info en una tabla, hay miles.
>>>>>>>
>>>>>>> Suerte!
>>>>>>>
>>>>>>>
>>>>>>> El lun., 16 dic. 2019 a las 16:10, Federico Brest (<
>>>>>>> federiconbrest en gmail.com>) escribió:
>>>>>>>
>>>>>>>>
>>>>>>>>> Olvide indicar, que la importo así
>>>>>>>>>
>>>>>>>>
>>>>>>>>> from lxml import html as lxmlhtml
>>>>>>>>>>
>>>>>>>>>
>>>>>>>> Jajaja tranqui, lo di por sentado.
>>>>>>>>
>>>>>>>>>
>>>>>>>>> El lun., 16 dic. 2019 a las 16:06, Augusto (<adtononi en gmail.com>)
>>>>>>>>> escribió:
>>>>>>>>>
>>>>>>>>>> Depende qué quieras guardar en el .xml.
>>>>>>>>>> Yo trabaje con la librería lxml, y para obtener el source code
>>>>>>>>>> tal como está en el navegador hago lo siguiente:
>>>>>>>>>>
>>>>>>>>>> source_code = requests.get(url, headers=headers).text
>>>>>>>>>>>  tree = lxmlhtml.fromstring(source_code)
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Después utilizando expresiones Xpath obtengo la información
>>>>>>>>>> específica que yo quiero. En mi caso trabaje con noticias, entonces de todo
>>>>>>>>>> el contenido solo extraía el título, fecha, texto, etc.
>>>>>>>>>>
>>>>>>>>>> No entiendo por qué necesitarías el source completo, pero de
>>>>>>>>>> necesitarlo entonces hace:
>>>>>>>>>>
>>>>>>>>>> with open(filename, 'w', encoding = 'utf-8') as filexml:
>>>>>>>>>>>     filexml.write(tree) # o donde hayas metido el
>>>>>>>>>>> requests.get().text
>>>>>>>>>>>     filexml.close()
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Eso solo para guardar el texto, ya después tenes las funciones
>>>>>>>>>> propias de lxml para crear los nodos (esto si extraes info específica y
>>>>>>>>>> querés ordenarla de determinada manera)
>>>>>>>>>>
>>>>>>>>>
>>>>>>>> Buenisimo!! cualquiera de las 2 cosas me vienen muy bien porque la
>>>>>>>> idea es después guardar en una tabla solo un par de campos (es largo de
>>>>>>>> explicar, pero basicamente lo que estoy haciendo es un parche porque el
>>>>>>>> sistema original es una porqueria y no esta desarrollado en python (ni en
>>>>>>>> ningun lenguaje conocido, es Genexus), y este no permite interactuar con
>>>>>>>> APIs, sólo usando WS...una caca.
>>>>>>>> PD: Nunca traten de arreglar sistemas feos que la empresa contrató
>>>>>>>> a proveedores que desarrollen (no existía sistemas hasta que llegué yo...y
>>>>>>>> asi estamos, je).
>>>>>>>>
>>>>>>>> Muchas gracias !!!
>>>>>>>>
>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> El lun., 16 dic. 2019 a las 15:28, Federico Brest (<
>>>>>>>>>> federiconbrest en gmail.com>) escribió:
>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> Tenes un problema con las variables también. En la función save
>>>>>>>>>>>> le pasas content y filename, pero después intentas guardar response.text,
>>>>>>>>>>>> de donde sale eso?
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> La verdad es que ya no me acuerdo jajaja
>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> Yo te recomiendo que generes el xml al momento que obtenés la
>>>>>>>>>>>> info de la API, y no hacer las cosas por separado.
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> Buen consejo! como sería el código entonces?
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> El lun., 16 dic. 2019 15:04, Federico Brest <
>>>>>>>>>>>> federiconbrest en gmail.com> escribió:
>>>>>>>>>>>>
>>>>>>>>>>>>> Cuidado con comprartir las credenciales de la API, esa parte
>>>>>>>>>>>>>> no hace falta.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> No hay problema con eso, fueron caracteres alfanuméricos
>>>>>>>>>>>>> colocados al azar, no son credenciales verdaderas
>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Después, tu función getInfoFromApi no devuelve nada. Fijate
>>>>>>>>>>>>>> que tenes comentada la línea del content
>>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> Si, me percaté de ese detalle y lo descomenté. Aun asi falla
>>>>>>>>>>>>> la funcionalidad de escribir el archivo XML
>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Tu idea es parar todo el source code de la página a un xml?
>>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> La idea es almacenar en un XML la respuesta recibida de la API
>>>>>>>>>>>>>
>>>>>>>>>>>>> Cualquier ayuda que puedan brindar es más que bienvenida :)
>>>>>>>>>>>>> Saludos,
>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> El lun., 16 dic. 2019 11:19, Federico Brest <
>>>>>>>>>>>>>> federiconbrest en gmail.com> escribió:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Muchas gracias por responder tan pronto :)
>>>>>>>>>>>>>>> Va de nuevo el código completo:
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> #import json
>>>>>>>>>>>>>>> import requests
>>>>>>>>>>>>>>> import io
>>>>>>>>>>>>>>> import xml.etree.ElementTree as ET
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> def validar_cuit(cuit):
>>>>>>>>>>>>>>>     # validaciones minimas
>>>>>>>>>>>>>>>     if len(cuit) != 11:
>>>>>>>>>>>>>>>         #print("False")
>>>>>>>>>>>>>>>         return False
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>     base = [5, 4, 3, 2, 7, 6, 5, 4, 3, 2]
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>     #cuit = cuit.replace("-", "") # remuevo las barras
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>     # calculo el digito verificador:
>>>>>>>>>>>>>>>     aux = 0
>>>>>>>>>>>>>>>     for i in range(10):
>>>>>>>>>>>>>>>         aux += int(cuit[i]) * base[i]
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>     aux = 11 - (aux - (int(aux / 11) * 11))
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>     if aux == 11:
>>>>>>>>>>>>>>>         aux = 0
>>>>>>>>>>>>>>>     if aux == 10:
>>>>>>>>>>>>>>>         aux = 9
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>     #print("True")
>>>>>>>>>>>>>>>     return aux == int(cuit[10])
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> def getInfoFromApi(cuit):
>>>>>>>>>>>>>>>     custom_header = {
>>>>>>>>>>>>>>>         'usuario_apikey':
>>>>>>>>>>>>>>> "Q2syVkQ2NW1UN2c3MWREWGSDDSWNQeWxVRnJVUT09",
>>>>>>>>>>>>>>>         'Cookie':
>>>>>>>>>>>>>>> "__cfduid=de5890d2d1645d87b18692a6ad91d6adsrtvcsf1576011069;
>>>>>>>>>>>>>>> PROVEEDOR=l5r3dteuh2rkge4t9qm85tl8sm; ROUTEID=.1",
>>>>>>>>>>>>>>>     }
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>     url = '
>>>>>>>>>>>>>>> https://informe.unproveedor.com/api/informes/solicitar/' +
>>>>>>>>>>>>>>> str(cuit)
>>>>>>>>>>>>>>>     args = {'formato':'xml', 'procesar_forzado':'1', 'cuit':
>>>>>>>>>>>>>>> cuit }
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>     response = requests.get(url, headers=custom_header,
>>>>>>>>>>>>>>> data=args)
>>>>>>>>>>>>>>>     tree = ET.parse(response.text)
>>>>>>>>>>>>>>>     root = tree.getroot()
>>>>>>>>>>>>>>>     #content = response.json()
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>     print("-- Status Code:", response.status_code)
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>     return content
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> def saveInfo(content, filename):
>>>>>>>>>>>>>>>     with io.open(filename, 'w', encoding='utf8') as file:
>>>>>>>>>>>>>>>         #json.dump(content, file, indent=4,
>>>>>>>>>>>>>>> ensure_ascii=False)
>>>>>>>>>>>>>>>         file.write(response.text)
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> if __name__ == '__main__':
>>>>>>>>>>>>>>>     cuit = input("Ingrese un numero de cuit: ")
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>     print("- Obteniendo información de", cuit)
>>>>>>>>>>>>>>>     info = getInfoFromApi(cuit)
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>     cuitValido = validar_cuit(cuit)
>>>>>>>>>>>>>>>     if cuitValido == False:
>>>>>>>>>>>>>>>         print("El Cuit ",cuit," es Invalido")
>>>>>>>>>>>>>>>         print("Presione una tecla para Finalizar...")
>>>>>>>>>>>>>>>         msvcrt.getch()
>>>>>>>>>>>>>>>     else:
>>>>>>>>>>>>>>>         print("cuil válido")
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>     filename = cuit + '.xml'
>>>>>>>>>>>>>>>     saveInfo(info, filename)
>>>>>>>>>>>>>>>     print("- Guardado en", filename)
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>     print("Presione una tecla para finalizar...")
>>>>>>>>>>>>>>>     msvcrt.getch()
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Abrazo, y nuevamente muchas gracias.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> El lun., 16 dic. 2019 a las 11:14, Lucas Paiva (<
>>>>>>>>>>>>>>> lucaspaiva.ar en gmail.com>) escribió:
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Como estas? lo que pasa que la cosa esta justamente en la
>>>>>>>>>>>>>>>> función que no estas mostrandonos, si tiene las credentials del cliente
>>>>>>>>>>>>>>>> sacaselas pero mostranos como traes los datos de la api.
>>>>>>>>>>>>>>>> De todas maneras vos decis :
>>>>>>>>>>>>>>>> "cuando se supone que supone que deberìa crear un XML con
>>>>>>>>>>>>>>>> lo que me devuelve la API, lo que esta haciendo es buscar un archivo local
>>>>>>>>>>>>>>>> con ese nombre y me lo muestra en la consola...."
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Y la funcion siguiente hace exactamente eso:
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> ef saveInfo(content, filename):
>>>>>>>>>>>>>>>>     with io.open(filename, 'w', encoding='utf8') as file:
>>>>>>>>>>>>>>>>         file.write(response.text)
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Aca estas escribiendo un archivo y luego imprimir el
>>>>>>>>>>>>>>>> contenido por pantalla. y por lo que se entiende del resto del codigo lo
>>>>>>>>>>>>>>>> estas creando con extension .XML
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> De todas maneras si mal no recuerdo para escribir un
>>>>>>>>>>>>>>>> archivo XML valido, deberias hacer algo como:
>>>>>>>>>>>>>>>> Importar ET de element.etree y hacer algo como :
>>>>>>>>>>>>>>>> my_data = ET.tostring(res_de_api_o_content_xml)
>>>>>>>>>>>>>>>> file = ipen("sarasa.xml","w)
>>>>>>>>>>>>>>>> file.write(my_data)
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Sory si no esta todo correcto , lo escribí asi nomas sin
>>>>>>>>>>>>>>>> probar ningún código.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Saludos.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Lucas
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> El lun., 16 dic. 2019 a las 11:02, Federico Brest (<
>>>>>>>>>>>>>>>> federiconbrest en gmail.com>) escribió:
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Hola gente,
>>>>>>>>>>>>>>>>> Hic eel siguiente script, pero estoy teniendo
>>>>>>>>>>>>>>>>> problemas...cuando se supone que supone que deberìa crear un XML con lo que
>>>>>>>>>>>>>>>>> me devuelve la API, lo que esta haciendo es buscar un archivo local con ese
>>>>>>>>>>>>>>>>> nombre y me lo muestra en la consola....
>>>>>>>>>>>>>>>>> Algune podrá darme una mano?
>>>>>>>>>>>>>>>>> Envío el código en cuestión:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> def saveInfo(content, filename):
>>>>>>>>>>>>>>>>>     with io.open(filename, 'w', encoding='utf8') as file:
>>>>>>>>>>>>>>>>>         file.write(response.text)
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> if __name__ == '__main__':
>>>>>>>>>>>>>>>>>     cuit = input("Ingrese un numero de cuit: ")
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>     print("- Obteniendo información de", cuit)
>>>>>>>>>>>>>>>>>     info = getInfoFromApi(cuit)
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> ''' getInfoFromApi es otra funcion que esta declarada en
>>>>>>>>>>>>>>>>> el script. No la transcribo porque estan las key de acceso de lcliente...de
>>>>>>>>>>>>>>>>> todas formas, esa funcion anda '''
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>     cuitValido = validar_cuit(cuit) #esta es otra funcion
>>>>>>>>>>>>>>>>> que esta declarada en el script
>>>>>>>>>>>>>>>>>     if cuitValido == False:
>>>>>>>>>>>>>>>>>         print("El Cuit ",cuit," es Invalido")
>>>>>>>>>>>>>>>>>         print("Presione una tecla para Finalizar...")
>>>>>>>>>>>>>>>>>         msvcrt.getch()
>>>>>>>>>>>>>>>>>     else:
>>>>>>>>>>>>>>>>>         print("cuil válido")
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>     filename = cuit + '.xml'
>>>>>>>>>>>>>>>>>     saveInfo(info, filename)
>>>>>>>>>>>>>>>>>     print("- Guardado en", filename)
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Desde ya muchas gracias!!
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>>> *          Ing. Federico N. Brest*
>>>>>>>>>>>>>>>>>   Ingeniero en Sistemas de Información
>>>>>>>>>>>>>>>>>             Becario Investigador
>>>>>>>>>>>>>>>>>      Universidad Tecnológica Nacional
>>>>>>>>>>>>>>>>>       Facultad Regional Buenos Aires
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> “*¿El éxito es la meta? Pienso que no. La meta es
>>>>>>>>>>>>>>>>> conseguir, defender y mantener nuestra libertad*” -
>>>>>>>>>>>>>>>>> Richard Stallman
>>>>>>>>>>>>>>>>> *P* *Antes de imprimir este mensaje, piense si realmente
>>>>>>>>>>>>>>>>> es necesario. ¡Cuidemos nuestro Ambiente!*
>>>>>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>>>>>> Lista de Correo de PyAr - Python Argentina -
>>>>>>>>>>>>>>>>> pyar en python.org.ar
>>>>>>>>>>>>>>>>> Sitio web: http://www.python.org.ar/
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Para administrar la lista (o desuscribirse) entrar a
>>>>>>>>>>>>>>>>> http://listas.python.org.ar/listinfo/pyar
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> La lista de PyAr esta Hosteada en USLA - Usuarios de
>>>>>>>>>>>>>>>>> Software Libre de Argentina - http://www.usla.org.ar
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>>>>> Lista de Correo de PyAr - Python Argentina -
>>>>>>>>>>>>>>>> pyar en python.org.ar
>>>>>>>>>>>>>>>> Sitio web: http://www.python.org.ar/
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Para administrar la lista (o desuscribirse) entrar a
>>>>>>>>>>>>>>>> http://listas.python.org.ar/listinfo/pyar
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> La lista de PyAr esta Hosteada en USLA - Usuarios de
>>>>>>>>>>>>>>>> Software Libre de Argentina - http://www.usla.org.ar
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>> *          Ing. Federico N. Brest*
>>>>>>>>>>>>>>>   Ingeniero en Sistemas de Información
>>>>>>>>>>>>>>>             Becario Investigador
>>>>>>>>>>>>>>>      Universidad Tecnológica Nacional
>>>>>>>>>>>>>>>       Facultad Regional Buenos Aires
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> “*¿El éxito es la meta? Pienso que no. La meta es
>>>>>>>>>>>>>>> conseguir, defender y mantener nuestra libertad*” - Richard
>>>>>>>>>>>>>>> Stallman
>>>>>>>>>>>>>>> *P* *Antes de imprimir este mensaje, piense si realmente es
>>>>>>>>>>>>>>> necesario. ¡Cuidemos nuestro Ambiente!*
>>>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>>>> Lista de Correo de PyAr - Python Argentina -
>>>>>>>>>>>>>>> pyar en python.org.ar
>>>>>>>>>>>>>>> Sitio web: http://www.python.org.ar/
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Para administrar la lista (o desuscribirse) entrar a
>>>>>>>>>>>>>>> http://listas.python.org.ar/listinfo/pyar
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> La lista de PyAr esta Hosteada en USLA - Usuarios de
>>>>>>>>>>>>>>> Software Libre de Argentina - http://www.usla.org.ar
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>>> Lista de Correo de PyAr - Python Argentina -
>>>>>>>>>>>>>> pyar en python.org.ar
>>>>>>>>>>>>>> Sitio web: http://www.python.org.ar/
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Para administrar la lista (o desuscribirse) entrar a
>>>>>>>>>>>>>> http://listas.python.org.ar/listinfo/pyar
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software
>>>>>>>>>>>>>> Libre de Argentina - http://www.usla.org.ar
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> --
>>>>>>>>>>>>> *          Ing. Federico N. Brest*
>>>>>>>>>>>>>   Ingeniero en Sistemas de Información
>>>>>>>>>>>>>             Becario Investigador
>>>>>>>>>>>>>      Universidad Tecnológica Nacional
>>>>>>>>>>>>>       Facultad Regional Buenos Aires
>>>>>>>>>>>>>
>>>>>>>>>>>>> “*¿El éxito es la meta? Pienso que no. La meta es conseguir,
>>>>>>>>>>>>> defender y mantener nuestra libertad*” - Richard Stallman
>>>>>>>>>>>>>
>>>>>>>>>>>>> *P* *Antes de imprimir este mensaje, piense si realmente es
>>>>>>>>>>>>> necesario. ¡Cuidemos nuestro Ambiente!*
>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>> Lista de Correo de PyAr - Python Argentina -
>>>>>>>>>>>>> pyar en python.org.ar
>>>>>>>>>>>>> Sitio web: http://www.python.org.ar/
>>>>>>>>>>>>>
>>>>>>>>>>>>> Para administrar la lista (o desuscribirse) entrar a
>>>>>>>>>>>>> http://listas.python.org.ar/listinfo/pyar
>>>>>>>>>>>>>
>>>>>>>>>>>>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software
>>>>>>>>>>>>> Libre de Argentina - http://www.usla.org.ar
>>>>>>>>>>>>
>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>> Lista de Correo de PyAr - Python Argentina - pyar en python.org.ar
>>>>>>>>>>>> Sitio web: http://www.python.org.ar/
>>>>>>>>>>>>
>>>>>>>>>>>> Para administrar la lista (o desuscribirse) entrar a
>>>>>>>>>>>> http://listas.python.org.ar/listinfo/pyar
>>>>>>>>>>>>
>>>>>>>>>>>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software
>>>>>>>>>>>> Libre de Argentina - http://www.usla.org.ar
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> --
>>>>>>>>>>> *          Ing. Federico N. Brest*
>>>>>>>>>>>   Ingeniero en Sistemas de Información
>>>>>>>>>>>             Becario Investigador
>>>>>>>>>>>      Universidad Tecnológica Nacional
>>>>>>>>>>>       Facultad Regional Buenos Aires
>>>>>>>>>>>
>>>>>>>>>>> “*¿El éxito es la meta? Pienso que no. La meta es conseguir,
>>>>>>>>>>> defender y mantener nuestra libertad*” - Richard Stallman
>>>>>>>>>>> *P* *Antes de imprimir este mensaje, piense si realmente es
>>>>>>>>>>> necesario. ¡Cuidemos nuestro Ambiente!*
>>>>>>>>>>> _______________________________________________
>>>>>>>>>>> Lista de Correo de PyAr - Python Argentina - pyar en python.org.ar
>>>>>>>>>>> Sitio web: http://www.python.org.ar/
>>>>>>>>>>>
>>>>>>>>>>> Para administrar la lista (o desuscribirse) entrar a
>>>>>>>>>>> http://listas.python.org.ar/listinfo/pyar
>>>>>>>>>>>
>>>>>>>>>>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software
>>>>>>>>>>> Libre de Argentina - http://www.usla.org.ar
>>>>>>>>>>
>>>>>>>>>> _______________________________________________
>>>>>>>>> Lista de Correo de PyAr - Python Argentina - pyar en python.org.ar
>>>>>>>>> Sitio web: http://www.python.org.ar/
>>>>>>>>>
>>>>>>>>> Para administrar la lista (o desuscribirse) entrar a
>>>>>>>>> http://listas.python.org.ar/listinfo/pyar
>>>>>>>>>
>>>>>>>>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software
>>>>>>>>> Libre de Argentina - http://www.usla.org.ar
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>> *          Ing. Federico N. Brest*
>>>>>>>>   Ingeniero en Sistemas de Información
>>>>>>>>             Becario Investigador
>>>>>>>>      Universidad Tecnológica Nacional
>>>>>>>>       Facultad Regional Buenos Aires
>>>>>>>>
>>>>>>>> “*¿El éxito es la meta? Pienso que no. La meta es conseguir,
>>>>>>>> defender y mantener nuestra libertad*” - Richard Stallman
>>>>>>>> *P* *Antes de imprimir este mensaje, piense si realmente es
>>>>>>>> necesario. ¡Cuidemos nuestro Ambiente!*
>>>>>>>> _______________________________________________
>>>>>>>> Lista de Correo de PyAr - Python Argentina - pyar en python.org.ar
>>>>>>>> Sitio web: http://www.python.org.ar/
>>>>>>>>
>>>>>>>> Para administrar la lista (o desuscribirse) entrar a
>>>>>>>> http://listas.python.org.ar/listinfo/pyar
>>>>>>>>
>>>>>>>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre
>>>>>>>> de Argentina - http://www.usla.org.ar
>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> Lista de Correo de PyAr - Python Argentina - pyar en python.org.ar
>>>>>>> Sitio web: http://www.python.org.ar/
>>>>>>>
>>>>>>> Para administrar la lista (o desuscribirse) entrar a
>>>>>>> http://listas.python.org.ar/listinfo/pyar
>>>>>>>
>>>>>>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre
>>>>>>> de Argentina - http://www.usla.org.ar
>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> *          Ing. Federico N. Brest*
>>>>>>   Ingeniero en Sistemas de Información
>>>>>>             Becario Investigador
>>>>>>      Universidad Tecnológica Nacional
>>>>>>       Facultad Regional Buenos Aires
>>>>>>
>>>>>> “*¿El éxito es la meta? Pienso que no. La meta es conseguir,
>>>>>> defender y mantener nuestra libertad*” - Richard Stallman
>>>>>> *P* *Antes de imprimir este mensaje, piense si realmente es
>>>>>> necesario. ¡Cuidemos nuestro Ambiente!*
>>>>>> _______________________________________________
>>>>>> Lista de Correo de PyAr - Python Argentina - pyar en python.org.ar
>>>>>> Sitio web: http://www.python.org.ar/
>>>>>>
>>>>>> Para administrar la lista (o desuscribirse) entrar a
>>>>>> http://listas.python.org.ar/listinfo/pyar
>>>>>>
>>>>>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre
>>>>>> de Argentina - http://www.usla.org.ar
>>>>>
>>>>> _______________________________________________
>>>>> Lista de Correo de PyAr - Python Argentina - pyar en python.org.ar
>>>>> Sitio web: http://www.python.org.ar/
>>>>>
>>>>> Para administrar la lista (o desuscribirse) entrar a
>>>>> http://listas.python.org.ar/listinfo/pyar
>>>>>
>>>>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
>>>>> Argentina - http://www.usla.org.ar
>>>>
>>>>
>>>>
>>>> --
>>>> *          Ing. Federico N. Brest*
>>>>   Ingeniero en Sistemas de Información
>>>>             Becario Investigador
>>>>      Universidad Tecnológica Nacional
>>>>       Facultad Regional Buenos Aires
>>>>
>>>> “*¿El éxito es la meta? Pienso que no. La meta es conseguir, defender
>>>> y mantener nuestra libertad*” - Richard Stallman
>>>> *P* *Antes de imprimir este mensaje, piense si realmente es necesario.
>>>> ¡Cuidemos nuestro Ambiente!*
>>>> _______________________________________________
>>>> Lista de Correo de PyAr - Python Argentina - pyar en python.org.ar
>>>> Sitio web: http://www.python.org.ar/
>>>>
>>>> Para administrar la lista (o desuscribirse) entrar a
>>>> http://listas.python.org.ar/listinfo/pyar
>>>>
>>>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
>>>> Argentina - http://www.usla.org.ar
>>>
>>> _______________________________________________
>>> Lista de Correo de PyAr - Python Argentina - pyar en python.org.ar
>>> Sitio web: http://www.python.org.ar/
>>>
>>> Para administrar la lista (o desuscribirse) entrar a
>>> http://listas.python.org.ar/listinfo/pyar
>>>
>>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
>>> Argentina - http://www.usla.org.ar
>>
>>
>>
>> --
>> *          Ing. Federico N. Brest*
>>   Ingeniero en Sistemas de Información
>>             Becario Investigador
>>      Universidad Tecnológica Nacional
>>       Facultad Regional Buenos Aires
>>
>> “*¿El éxito es la meta? Pienso que no. La meta es conseguir, defender y
>> mantener nuestra libertad*” - Richard Stallman
>> *P* *Antes de imprimir este mensaje, piense si realmente es necesario.
>> ¡Cuidemos nuestro Ambiente!*
>> _______________________________________________
>> Lista de Correo de PyAr - Python Argentina - pyar en python.org.ar
>> Sitio web: http://www.python.org.ar/
>>
>> Para administrar la lista (o desuscribirse) entrar a
>> http://listas.python.org.ar/listinfo/pyar
>>
>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
>> Argentina - http://www.usla.org.ar
>
> _______________________________________________
> Lista de Correo de PyAr - Python Argentina - pyar en python.org.ar
> Sitio web: http://www.python.org.ar/
>
> Para administrar la lista (o desuscribirse) entrar a
> http://listas.python.org.ar/listinfo/pyar
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
> Argentina - http://www.usla.org.ar



-- 
*          Ing. Federico N. Brest*
  Ingeniero en Sistemas de Información
            Becario Investigador
     Universidad Tecnológica Nacional
      Facultad Regional Buenos Aires

“*¿El éxito es la meta? Pienso que no. La meta es conseguir, defender y
mantener nuestra libertad*” - Richard Stallman
*P* *Antes de imprimir este mensaje, piense si realmente es necesario.
¡Cuidemos nuestro Ambiente!*
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20191218/55cba2de/attachment-0001.html>


Más información sobre la lista de distribución pyar