WaterView, nostro cliente, lavora nel campo della classificazione di immagini tramite Deep Learning e aveva la necessità di generalizzare del codice sviluppato in una parte non riservata del proprio lavoro: è nata, così, l'idea di rilasciare come software libero una piccola libreria su GitHub e su PyPi.

Il problema

In base a delle variabili d'ambiente, poter variare il comportamento del medesimo codice Python affinché interagisca con un file system UNIX o con AWS S3. Ovvero, astrarre l'accesso e usare chiamate uniche che si tratti di un file system UNIX o di un bucket AWS S3.

La soluzione

Essendo il problema del tutto scorrelato dalla logica applicativa, la soluzione più pulita era la creazione di un pacchetto pubblico rilasciato con licenza libera, così da poter permettere l'installazione in modo più preciso rispetto ai repository privati.

Per raggiungere questo risultato abbiamo scritto un'unica classe di interfaccia che si riferisce a due classi specifiche, una per il file system e una per S3, le quali fanno riferimento alla stessa classe astratta, realizzandone quindi dei metodi concreti con i medesimi prototipi.

fss3wrap

Le dipendenze

Per la gestione effettiva dei file system concreti, abbiamo utilizzato la libreria fs che astrae molto bene diversi tipi di file system con un'unica interfaccia per il programmatore (PyFilesystem), aggiungedo fs-s3fs-ng: un'interfaccia al file system PyFilesystem per l'accesso ai bucket AWS S3.

Il codice

Il pacchetto Python si chiama fss3wrap ed è disponibile su PyPi e su GitHub e naturalmente si installa con

pip install fss3wrap

--

Photo by Darius Bashar on Unsplash