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