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