0. Instalar última versión de python
#1. Actualizamos sudo apt update #2. Instalamos dependencias sudo apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev #3.Descargar la ultima version de Python de https://www.python.org/downloads/source/ #4. Ir a la crpeta donde se ha descargado por ejemplo Downloads cd ~Downloads #5. Desempaquetar el fichero ".tgz" tar zxvf Python-3.13.0.tgz #6.Nos situamos en la carpeta generada cd Python-3.13.0 #7. Compilamos el código ./configure --enable-optimizations #8. Hacemos un build del Makefile generado. Este proceso es muuuuuy lento sudo make install #9. Verificamos que se ha instalado bien python3 -V
1. Instalar la librería "request", y otras más en un entrono virtual
Si tenemos uina versión avanzada de Ubuntu, necesitamos instalar python en un entorno virtual.
Dicho entorno virtual se crea en una carpeta.
Cuando se instala python en dicha carpeta, crea 4 subcarpetas (bin, include, lib, lib64 y pyvenv.cfg)
Ahora para instalar el paquete request, hay que indicarle la ruta donde está instalado el python en dicho entorno virtual (dentro de la subcarpeta bin) , sinó no deja instalar.
OJO: Cuando se abra VStudio, hay que decirle que abra la carpeta donde se ha instalado el entorno virtual, de lo contrario no reconocerá las librerías instaladas. en mi caso es ~/MyOdoo/Control-Presencia
En una ventana de comandos ejecutar:
#0.Instalar dependencias necesarias
sudo apt install libpq-dev python3-dev
#1.Instalar Python3.11 en un entrono virtual sudo apt install python3.11-venv #2.Crear entrono virtual en ~/MyOdoo/Control-Presencia
python3 -m venv ~/MyOdoo/Control-Presencia #3.Cambiamos de directorio.# OJO: Este directorio és el que tenemos que elegir en VS para que reconozca el
# el entorno donde se instralaran o se han instalado las librerias.
# Para ello, una vez instaladas las librerias, se abrirá VStudio y se le dirá
# File -> Open Folder y se indicara la carpeta ~/MyOdoo/Control-Presencia
cd ~/MyOdoo/Control-Presencia #4.Instalamos el paquete request indicando la ruta del ejecutable python en
# el entorno virtual
./bin/python -m pip install requests
#5.Instalamos la libreria para tratar XML ./bin/python -m pip install elementpath
#6.Instalamos la libreria para tratar YML ./bin/python -m pip install pyyaml
#7.Instalamos la libreria para conectase con Oracle ./bin/python -m pip install oracledb
#8.Instalamos la libreria para conectase con Postgres ./bin/python -m pip install psycopg2
#8.Instalamos la libreria para trabajar con arrays ./bin/python -m pip install numpy
#9.Instalamos la libreria para trabajar con pdf ./bin/python -m pip install -U pypdfium2
#10.Instalamos la libreria para trabajar con ocr
sudo apt install tesseract-ocr./bin/python -m pip install pytesseract./bin/python -m pip install opencv-contrib-python./bin/python -m pip install imutils./bin/python -m pip install matplotlibsudo apt install libmagickwand-dev./bin/python -m pip install Wand./bin/python -m pip install deskew./bin/python -m pip install easyocr./bin/python -m pip install Filetype./bin/python -m pip install pandas./bin/python -m pip install openpyxl./bin/python -m pip install xlrd./bin/python -m pip install matplotlib./bin/python -m pip install py7zr./bin/python -m pip install python-magic./bin/python -m pip install cmislib./bin/python -m pip install tk./bin/python -m pip install tkinter-tooltip./bin/python -m pip install unidecode./bin/python -m pip install nox./bin/python -m pip install secure-smtplib
OJO: Para que funcione tkinter (tk) en Ubuntu hay que hacer
sudo apt-get install python3-tk
En Pycharm hacemos
- Ir a Python Packages
- Dar el nombre del paquete e instalar (requests, elementpath, pyyaml, oracledb, psycopg2)
Si queremos instalar las dependencias de Odoo 16
#1.Cambiamos de directorio.
cd ~/MyOdoo/Control-Presencia
#2.Creamos un directorio para Odoo 16 y nos situamos en el
mkdir ~/MyOdoo/odoo-16.0
cd ~/MyOdoo/odoo-16.0
#3.Descargamos Odoo 16 dentro
mkdir ~/MyOdoo/odoo-16.0
git clone https://github.com/odoo/odoo.git -b 16.0 --depth=1
#4.Cambiamos de directorio del entorno
cd ~/MyOdoo/Control-Presencia
#4.Instalamos las dependencias que requiere Odoo
/bin/python -m pip install -r ~/MyOdoo/odoo-16.0/requirements.txt
#5.Instalamos las dependencia Odoo
/bin/python -m pip install -e ~/MyOdoo/odoo-16.0
#6.A veces falla si hacemos odoo --version. par tanto instalamos también
./bin/python -m pip install lxml_html_clean
2 Activar y desactivar un entorno virtual python
#1. Ya hemos visto como crear un entrono virtual
# en ~/MyOdoo/Control-Presencia
python3 -m venv ~/MyOdoo/Control-Presencia# OJO: Este directorio és el que tenemos que elegir en VS para que reconozca el
# el entorno donde se instralaran o se han instalado las librerias.
# Para ello, una vez instaladas las librerias, se abrirá VStudio y se le dirá
# File -> Open Folder y se indicara la carpeta ~/MyOdoo/Control-Presencia
#2. Mostrar la versión de python istalada
~/MyOdoo/Control-Presencia/bin/python -V#3. Activar el entorno virtual
source ~/MyOdoo/Control-Presencia/bin/activate
#4. Ver donde se ha instalado el python
which python
#5. DESACTIVAR el entorno virtual
deactivate
3. Crear un programa sencillo y ejecutarlo
import requests api_url = "https://jsonplaceholder.typicode.com/todos/1" response = requests.get(api_url) print(response.json())
{'userId': 1, 'id': 1, 'title': 'delectus aut autem', 'completed': False}
4. Crear un programa sencillo pero real
import requestsimport xml.etree.ElementTree as ET#Definimos la URL, el conteniodo y el tipo de consulta application/soap+xml#1. URLapi_url="https://rrhh-xxxxxx.grupocastilla.es/epsilonnetws/WSEmpleado.asmx?wsdl"#2. Contenidoxml="""<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"><soap:Body><ConsultaGenericaBD_XML xmlns="http://www.grupocastilla.es/epsilonnetws"><sToken><TOKEN><AppName>AYTOXXXX_APPS</AppName><AppToken>XXXXXXXXXXXXXXX</AppToken></TOKEN></sToken><nombreTabla>PERSONAS</nombreTabla><condicion>APELLIDO2 LIKE '%PLA%'</condicion></ConsultaGenericaBD_XML></soap:Body></soap:Envelope>"""#3. Tipo de peticiónheaders = {'Content-Type': 'application/soap+xml; charset=utf-8'}#--EJECUTAMOS LA PETICIÓNprint (requests.post(api_url, data=xml, headers=headers).text)
<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><ConsultaGenericaBD_XMLResponse xmlns="http://www.grupocastilla.es/epsilonnetws"><ConsultaGenericaBD_XMLResult><TABLA xmlns=""><REGISTRO><CAMPO NOMBRE="NIF"><![CDATA[73XXXXXXX]]></CAMPO><CAMPO NOMBRE="ID_PF"><![CDATA[0]]></CAMPO><CAMPO NOMBRE="APELLIDO1"><![CDATA[XXXRIXXX]]></CAMPO><CAMPO NOMBRE="APELLIDO2"><![CDATA[PLAXX]]></CAMPO><CAMPO NOMBRE="NOMBRE"><![CDATA[XXXAXXX]]></CAMPO></REGISTRO><REGISTRO><CAMPO NOMBRE="NIF"><![CDATA[XXXXXXXXX]]></CAMPO><CAMPO NOMBRE="ID_PF"><![CDATA[0]]></CAMPO><CAMPO NOMBRE="APELLIDO1"><![CDATA[MXXXXXX]]></CAMPO><CAMPO NOMBRE="APELLIDO2"><![CDATA[PLAXXX]]></CAMPO><CAMPO NOMBRE="NOMBRE"><![CDATA[JOSE]]></CAMPO></REGISTRO></TABLA></ConsultaGenericaBD_XMLResult></ConsultaGenericaBD_XMLResponse></soap:Body></soap:Envelope>
5. Crear un programa con un fichero de propiedades en YAML
castilla:api_url: https://rrhh-tavernes.grupocastilla.es/epsilonnetws/WSEmpleado.asmx?wsdlheaders :Content-Type: application/soap+xml; charset=utf-8token: ><TOKEN><AppName>$APPNAME$</AppName><AppToken>xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx</AppToken></TOKEN>appName: AYTOxxxx_APPSnombreTabla: PERSONASxml: ><soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"><soap:Body><ConsultaGenericaBD_XML xmlns="http://www.grupocastilla.es/epsilonnetws"><sToken>$TOKEN$</sToken><nombreTabla>$TABLA$</nombreTabla><condicion>$CONDICION$</condicion></ConsultaGenericaBD_XML></soap:Body></soap:Envelope>
import xml.etree.ElementTree as ET'''XML Utils'''class XMLUtils:@staticmethoddef getElement(xmlString, tagString):elem=ET.fromstring(xmlString)tabla=elem.taglevel=0while tabla!=tagString and level<10:elem=elem[0]tabla=elem.taglevel+=1return elem#Get an array of records as an array of dictionaries@staticmethoddef getRecordsCastilla(firstElem):records=[]for secondElem in firstElem: # REGISTRO#print('100 ',secondElem.tag, secondElem.attrib, secondElem.text)dictio={}for thirdElem in secondElem: # CAMPO#print('200 ',thirdElem.tag, '--', thirdElem.attrib,'----', thirdElem.text)att = thirdElem.attrib['NOMBRE']value = thirdElem.textdictio[att]=value#print ('dictio=',dictio)records.append(dictio)return records
import sysimport requestsimport yamlimport xml.etree.ElementTree as ETfrom u03_XML import XMLUtils#--------------------------------------#1. Get properties from config file#--------------------------------------configFile = sys.path[0] + "/c01_config.yml"print ('configFile:', configFile)with open(configFile, 'r') as f:configData = yaml.full_load(f)['castilla']print('confiData:',configData)#------------------------------------------------------------#2. Define request#------------------------------------------------------------condicion="" # All !!!xml=configData['xml'] \.replace('$TOKEN$' , configData['token']) \.replace('$APPNAME$' , configData['appName']) \.replace('$TABLA$' , configData['nombreTabla'])\.replace('$CONDICION$', condicion)#------------------------------------------------------------#3. Execute and print output to console#------------------------------------------------------------output=requests.post(configData['api_url'], data = xml, headers = configData['headers']).text#------------------------------------------------------------#3. Write output to file#------------------------------------------------------------fileName = sys.path[0] + "/../my-python-programs-output/p01-request-01.output.xml"print ('fileName:',fileName)fileOut=open(fileName,"w") # RewritefileOut.write(output)fileOut.close#------------------------------------------------------------#4. Extract XML info#------------------------------------------------------------tabla=XMLUtils.getElement(output,"TABLA")records=XMLUtils.getRecordsCastilla(tabla)#------------------------------------------------------------#5. Print the records#------------------------------------------------------------i=0for myrecord in records: # myrecord is a dictionaryi+=1print(i,'--------------------------------------')print ('myrecord=', myrecord)
No hay comentarios :
Publicar un comentario