Skip to main content

Easyfatt - Python

Questo pacchetto fornisce diversi strumenti per semplificare lo sviluppo di automazioni in Python per l'applicativo gestionale "Danea Easyfatt".

Funzioni

  • Lettura file .DefXml esportati da Easyfatt (ordini cliente, vendite banco, preventivi, ecc..)
  • Download driver firebird (necessario per la connessione al DB di Easyfatt)
  • Connessione al database di Easyfatt

Utilizzo

File .DefXml

Il modulo easyfatt_db_connector.xml espone la classe EasyfattXML e la funzione read_xml (una funzione "utility" che restituisce un'istanza di EasyfattXML).

Sia i metodi EasyfattXML.from_xml*() che la funzione read_xml() accettano il parametro convert_types (di default impostato a True) che permette di convertire i valori dei tag in tipi Python nativi (es. int, float, bool, ecc..). Se disabilitato i valori dei tag saranno sempre stringhe o None.

Esempio

In questo esempio lo script leggerà l'esportazione di una serie di ordini cliente e stamperà a schermo l'indirizzo di spedizione di ogni documento:

from pathlib import Path
from easyfatt_db_connector.xml import read_xml

xml_file = Path("OrdiniCliente.DefXml").expanduser()

# Questa istruzione...
xml_object = read_xml(xml_file, convert_types=True)

# ... si può scrivere anche così
xml_object = EasyfattXML.from_xml_string(xml_file.read_bytes(), convert_types=True)

for doc in xml_object.documents:
    print(f"Document n°{doc.number}{doc.numbering} will be shipped at '{doc.delivery.address}'")

L'output sarà il seguente:

Document n°1 will be shipped at ''
Document n°2 will be shipped at ''
Document n°3 will be shipped at ''
Document n°1/A will be shipped at ''
Document n°2/A will be shipped at ''
Document n°4 will be shipped at ''
Document n°5 will be shipped at ''
Document n°6 will be shipped at 'Via Facciolati, 546'
Document n°3/A will be shipped at 'Via Catania, sn'
Document n°7 will be shipped at ''
Document n°8 will be shipped at 'Via Rodolfo Manganaro'
Document n°9 will be shipped at 'Via Enrico Berlinguer,75'
Document n°10 will be shipped at ''
Document n°11 will be shipped at 'Via C. Colombo, 632'
Document n°12 will be shipped at ''
Document n°13 will be shipped at ''
Document n°1/B will be shipped at ''
Document n°14 will be shipped at 'Via G. Di Vittorio, 56'
Document n°15 will be shipped at 'Via Cavour, 152'
Document n°16 will be shipped at 'Via N.S. degli Angeli, 28'

Database: download driver Firebird (prerequisito)

Per connettersi al DB di Easyfatt è necessario scaricare il driver Firebird Firebird-{version}-embed.zip (versione 2.5.8 o 2.5.9) e specificarne il percorso.

from easyfatt_db_connector.core.connection import EasyfattFDB

database = EasyfattFDB(archive_path=database_path, firebird_path="./firebird-driver")

Questa procedura può essere automatizzata impostando il parametro download_firebird a True (di default è False). E' possibile controllare il percorso di download del driver tramite il parametro firebird_path (di default ~/.cache/firebird-driver/).

from easyfatt_db_connector import EasyfattFDB

database = EasyfattFDB(archive_path=database_path, download_firebird=True)

ATTENZIONE

L'opzione download_firebird è impostata di default a False per evitare che il programma effettui download in ambienti di Produzione.

Se questo è il comportamento desiderato impostare il parametro a True.

Database: connessione e query

In fase di connessione al DB l'istanza EasyfattFDB provvederà a fare una copia del database in una cartella temporanea (ed alla sua eliminazione ad operazioni terminate) così da permettere l'utilizzo anche con Easyfatt in esecuzione.

from easyfatt_db_connector.core.connection import EasyfattFDB

database = EasyfattFDB(archive_path=database_path, download_firebird=True)

with database.connect() as connection:
    customers = [dict(item) for item in connection.cursor().execute('''
        SELECT anag."CodAnagr", ANAG."Nome", ANAG."Indirizzo", ANAG."Cap", ANAG."Citta", ANAG."Prov", ANAG."Regione", IIF(naz."NomeNazionePrint" IS NULL, 'Italia', naz."NomeNazionePrint") AS Nazione
        FROM "TAnagrafica" AS anag
        LEFT JOIN "TNazioni" naz ON ANAG."Nazione" = naz."NomeNazione";
    ''').fetchallmap()]

    print(customers)

Development

Note per Windows

Build con PyInstaller

In fase di build con PyInstaller (sia in modalità --onefile che --onedir) è necessario tenere in considerazione le seguenti note:

  • Non usare mai UPX se disponibile (a causa di un bug che porta la DLL fbclient.dll a crashare in modo randomico impedendo la connessione al DB). Se possibile includere sempre --noupx tra gli argomenti di build.
  • Aggiungere --collect-all sqlalchemy_firebird tra gli argomenti di build per evitare che PyInstaller non includa il modulo fdb e firebird-driver (che non vengono rilevato automaticamente).

Python

poetry config virtualenvs.prefer-active-python true
poetry env use $(pyenv which python)

Database

  1. Installare Firebird SQL 2.5.9 (selezionare la versione "64-bit Classic, Superclassic & Superserver")
  2. Assicurarsi di selezionare "Run as service"

Per controllare l'avvenuta installazione:

  1. Aprire un terminale Powershell nella cartella di installzione (nel mio caso C:\Program Files\Firebird\Firebird_2_5)
  2. Lanciare il comando cd bin
  3. Lanciare il comando ./isql.exe "{PERCORSO_DATABASE}\{NOME_DATABASE}.eft" -u sysdba -p masterkey
  4. Ora è possibile eseguire query SQL (assicurandosi che finiscano SEMPRE con ;) picture 10

Database tool

  1. Installare ed aprire DBeaver:

    picture 1

  2. Cliccare su "File > Nuovo":

    picture 3

  3. Cliccare su "DBeaver > Connessione a Database" e cliccare "Avanti":

    picture 2

  4. Nel campo di ricerca scrivere "Firebird", selezionare il primo risultato e cliccare "Avanti":

    picture 4

  5. Compilare i dati richiesti:

    • Generale:
      • Host: localhost (default)
      • Porta: 3050 (default)
      • Percorso: adeguare alla posizione del database nel proprio sistema
    • Autenticazione:
      • Nome utente: SYSDBA (default)
      • Password: masterkey

    picture 8

  6. Terminare la configurazione del driver cliccando su "Fine"

Alcune note

  • Assicurarsi che sia visibile almeno la finestra "Navigatore Database":

    picture 9

Metadata

Release files for easyfatt-db-connector 0.3.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for easyfatt-db-connector 0.3.2
File Size Uploaded Provenance
easyfatt_db_connector-0.3.2.tar.gz 38.0 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for easyfatt-db-connector 0.3.2
File Interpreter ABI Platform
easyfatt_db_connector-0.3.2-py3-none-any.whl Python 3 none any Details

Total release size: 82.3 kB

Release files / easyfatt_db_connector-0.3.2.tar.gz

Download URL easyfatt_db_connector-0.3.2.tar.gz
Size 38.0 kB
Tags Source
SHA-256 checksum
How to use checksums
006d1c054fa0938d3b2efd8499767b5fec76a035bd96b01dc5ad41e17cd9a489
BLAKE2b-256 checksum
How to use checksums
a1bd6c030be8b46c2c4db1c49b93d9bddd2d88161860780686b85cd68b437fcf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.5.0 CPython/3.9.6 Windows/10

Release files / easyfatt_db_connector-0.3.2-py3-none-any.whl

Download URL easyfatt_db_connector-0.3.2-py3-none-any.whl
Size 44.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
5f26705d954825a825495f6eb9804023650be252b76d91225b8ec96e75c28be3
BLAKE2b-256 checksum
How to use checksums
3015ecde8b5853ab94165bcbaf190d1c62d42ba7ba879c7dbda0d47634b6940b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.5.0 CPython/3.9.6 Windows/10

Security for easyfatt-db-connector 0.3.2

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page