[pyar] xml.etree.ElementTree
Augusto
adtononi en gmail.com
Mie Dic 18 15:26:14 -03 2019
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
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20191218/08d6f941/attachment-0001.html>
Más información sobre la lista de distribución pyar