# Python - PyDDB
Nota per gli utenti esterni - Molti dei collegamenti nella sezione seguente si riferiscono alle applicazioni interne. Si prega di parlare con il tuo team di progetto per il supporto.
Il pacchetto pyddb
fornisce un modo chiaro ai non sviluppatori di interagire con DDB semplificando la sintassi e implementando funzionalità di convenienza.
Questa guida coprirà l'installazione e l'avvio rapido del pacchetto, nonché un riferimento completo del pacchetto e delle sue funzionalità.
# Caratteristiche
Oltre a semplificare notevolmente l'interfaccia per l'interazione con gli endpoint API DDB, la libreria fornisce altre funzionalità utili:
Autenticazione
Il client richiederà all'utente le loro credenziali Arup quando il client viene istanziato e aggiorna automaticamente il token se necessario. Autenticazione
Il client richiederà all'utente le loro credenziali Arup quando il client viene istanziato e aggiorna automaticamente il token se necessario.
Il client richiederà all'utente le loro credenziali Arup quando il client viene istanziato e aggiorna automaticamente il token se necessario.
API semplificata e implementazione
La libreria è creata per gli utenti principianti python che desiderano creare flussi di lavoro automatizzati.
Abbiamo semplificato tutti gli endpoint di microservizio in una singola libreria con un'interfaccia coerente. Ciò significa che c'è meno da imparare ed è facile iniziare.
Puoi continuare gli script di ritrovo e gestiremo il controllo dei duplicati ed eseguire eventuali aggiornamenti per te. In genere gli script possono essere utilizzati su altri progetti semplicemente modificando il numero del progetto.
Esplora facilmente la tassonomia DDB
DDB ha la propria tassonomia: non puoi semplicemente creare un nuovo tipo di risorsa o parametro.
Questa biblioteca fornisce modi di cercare attraverso la nostra tassonomia esistente per nome o UUID.
Completamente testato
Questa biblioteca è completamente testata contro le versioni attuali e future dell'API DDB, quindi puoi iniziare con fiducia.
Impaginazione
Per impostazione predefinita, i nostri endpoint restituiranno la prima pagina di dati. Questa libreria gestisce la impaginazione e recupera tutti i dati per te.
Supporto IDE
La libreria è completamente digitata, quindi è possibile ottenere il completamento automatico e il controllo del tipo nel tuo IDE.
# Installazione e configurazione
- Richiede Python 3.10+ (App Store) - richiesto per eseguire il pacchetto.
- Richiede Git (service desk) - richiesto per installare il pacchetto.
- Richiede l'account GitHub con e -mail Arup - richiesto per installare il pacchetto.
- Codice Visual Studio consigliato (App Store) - Ambiente consigliato per il codice di scrittura.
Una volta installato quanto sopra, apri Visual Studio Code e apri una cartella in cui desideri archiviare il tuo lavoro.
Apri un terminale Bash ed esegui i seguenti comandi:
Crea un ambiente virtuale
python -m venv .venv
Attiva l'ambiente virtuale
source .venv/Scripts/activate
Installa gli SDK DDB Python
pip install keyring artifacts-keyring python-dateutil
pip install ddb-user-service \
ddb-reference-data-service \
ddb-qa-service \
ddb-parameter-service \
ddb-parameter-metadata-service \
ddb-environment-context-service \
ddb-comments-service \
-i https://ovearup.pkgs.visualstudio.com/_packaging/ddb/pypi/simple/
Installa il pacchetto PyDDB
pip install git+https://github.com/arup-group/PyDDB.git
# Avvio rapido
# Ottenere dati
Ottenere dati da DDB è semplice come chiamare il metodo appropriato sull'oggetto del progetto. Ciò gestirà impaginazione e restituirà oggetti con metadati. Guarda al Riferimento API per maggiori informazioni.
Importa le parti della libreria necessarie:
from pyddb import DDB, env, Project, ParameterType
Istanziare il client e impostare l'ambiente:
ddb = DDB(env.sandbox)
Ottieni un progetto DDB esistente:
my_project = Project.get_by_number(project_number="21515700")
Ottieni dati dal progetto:
project_parameters = my_project.get_parameters()
project_assets = my_project.get_assets()
project_sources = my_project.get_sources()
Ottieni dati dalla tassonomia:
all_parameter_types = ParameterType.get_all()
some_parameter_types = ParameterType.search('area')
my_parameter_type = ParameterType.get("Plot area")
# Pubblicare dati
Importa le parti della libreria necessarie:
from pyddb import DDB, env, Project, ParameterType, AssetType, Unit, Source, Parameter, Asset
Istanziare il client e impostare l'ambiente:
ddb = DDB(env.sandbox)
Creare un progetto o ottenere uno esistente:
project = Project.put("21515700")
Definisci le risorse che desideri pubblicare:
assets = [
my_site := Asset.create(
asset_type=AssetType.get("site"),
name="My DDB Site",
parent=None,
),
my_building := Asset.create(
asset_type=AssetType.get("building"),
name="My DDB Building",
parent=my_site,
)
]
Definisci i parametri che desideri pubblicare:
parameters = [
Parameter.create(
parameter_type=ParameterType.get("Plot area"),
value=240,
unit=Unit.get("m²"),
parent=my_site,
source=Source.create(
source_type = SourceType.get("Derived Value"),
title="My source title",
reference="My source reference",
),
)
]
Pubblica i dati:
project.post_assets(assets)
project.post_parameters(parameters)
Ognuno di questi metodi post restituirà ciò che stanno pubblicando e non aggiunge dati duplicati. La pubblicazione di nuovi parametri non sovrascriverà i parametri esistenti se il valore, l'unità o l'origine non sono cambiati.
Ciò significa che questi metodi possono essere utilizzati per creare flussi di lavoro automatizzati.
# Riferimento API
Questi documenti sono suddivisi per classe e forniscono una descrizione e un esempio di come dovrebbero essere usati. In questa biblioteca, abbiamo due tipi principali di classi che servono a scopi diversi:
Classi di dati : Questi rappresentano i valori dei nostri dati e sono ciò che pubblicherai e titrefererai per interagire con i dati del progetto. Questi saranno in genere legati alle classi di tassonomia, quindi sappiamo con quale tipo di dati stiamo lavorando.
Classi di tassonomia : Queste classi, come "ParameterType" o "AssetType", sono determinate dal nostro team. Questi sono modi per classificare i nostri dati e dargli un contesto.
In breve, le classi di dati sono i dati con cui stai lavorando e le classi di tassonomia sono il modo in cui li classifichiamo. Puoi anche esplorare il nostro glossario Per ulteriori informazioni sui termini che utilizziamo.
# Classi di dati
La Il Ddb E Progetto Le classi sono i principali punti di iscrizione per la libreria.
La classe DDB
viene utilizzata in ogni script per istanziare il client e impostare l'ambiente.
La classe DDB
viene utilizzata per accedere ai dati tra i progetti, mentre la classe Project
viene utilizzata per accedere ai dati su un progetto specifico.
# Ddb
La classe DDB è la classe principale per il client. Viene utilizzato per istanziare il client e impostare l'ambiente. Tutti gli script dovrebbero istanziare il cliente con l'ambiente in cui stanno lavorando.
from pyddb import DDB, env
ddb_client = DDB(env.sandbox)
Ora puoi utilizzarlo per accedere ai dati tra i progetti. Si consiglia di utilizzare query molto specifiche per ridurre la quantità di dati restituiti.
all_projects = ddb_client.get_projects()
all_plot_areas = ddb_client.get_parameters(
parameter_type_id=[
ParameterType.get("Plot area").id
]
)
# Progetto
La classe di progetto viene utilizzata per accedere ai dati su un progetto specifico. È istanziato passando il numero del progetto ai metodi get_by_number
o put
.
from pyddb import DDB, env, Project
DDB(env.sandbox)
my_project = Project.get_by_number("00000000")
my_project = Project.put("00000000")
La differenza tra questi due metodi è che get_by_number
restituirà il progetto solo se esiste in DDB. put
creerà il progetto se non esiste.
# Fonte
La classe di origine viene utilizzata per creare e pubblicare fonti su DDB. Una nuova fonte è istanziata passando il tipo di sorgente, il titolo e il riferimento al metodo create
.
from pyddb import DDB, env, Project, Source, SourceType
DDB(env.sandbox)
my_source = Source.create(
title="My source title",
reference="My source reference",
source_type=SourceType.get("Derived Value"),
)
Le fonti possono essere pubblicate su DDB passando un elenco di fonti al metodo post_sources
su un Project
.
my_project = Project.put("00000000")
my_project.post_sources([my_source])
Le fonti di un progetto possono essere ritirate chiamando il metodo get_sources
su un Project
.
project_sources = my_project.get_sources()
Ciò significa che è molto facile ottenere fonti da un progetto passato e riutilizzarle in un nuovo progetto.
# Risorsa
La classe Asset
viene utilizzata per creare e pubblicare risorse su DDB. Una nuova risorsa viene istanziata passando il nome, il tipo di attività e il genitore al metodo create
.
Una cosa importante da notare è che in DDB non puoi avere due risorse con lo stesso nome, tipo e genitore. Ciò significa che un singolo sito non può avere due edifici con lo stesso nome. Questa libreria utilizza questa logica per impedire la creazione di risorse duplicate e invece restituirà le risorse esistenti se gli script vengono eseguiti.
from pyddb import DDB, env, Project, Asset, AssetType
DDB(env.sandbox)
my_asset = Asset.create(
name="My asset name",
asset_type=AssetType.get("Site"),
)
my_other_asset = Asset.create(
name="My other asset name",
asset_type=AssetType.get("Building"),
parent=my_asset,
)
yet_another_asset = Asset.create(
asset_sub_type=AssetSubType.get("Cooling"),
parent=my_other_asset,
)
Ci sono alcune regole per la creazione di risorse:
- Le attività hanno bisogno di un
AssetType
o di unAssetSubType
, quindi sappiamo che tipo di risorsa è. - Le attività senza
AssetSubType
hanno bisogno di un nome. - Le attività devono seguire la gerarchia del tipo di attività.
Ad esempio, un'asset
Building
deve avere un beneSite
come genitore.
Puoi esplorare la classe AssetType
per comprendere la gerarchia o utilizzare l'interfaccia utente DDB.
Le attività possono essere pubblicate su DDB passando un elenco di attività al metodo post_assets
su un Project
.
my_project = Project.put("00000000")
my_project.post_assets([my_asset, my_other_asset, yet_another_asset])
Le attività su un progetto possono essere ritirate chiamando il metodo get_assets
su un Project
.
project_assets = my_project.get_assets()
Ciò significa che è molto facile ottenere risorse da un progetto passato e riutilizzarli in un nuovo progetto.
# Parametro
La classe Parameter
viene utilizzata per creare e pubblicare parametri su DDB. Un nuovo parametro viene istanziato passando il tipo di parametro, il valore, l'unità, la sorgente e il genitore al metodo create
.
Ti consigliamo di conoscere le classi Source
e Asset
prima di pubblicare parametri.
from pyddb import DDB, env, Project, Parameter, ParameterType, Source, SourceType, Asset, AssetType
DDB(env.sandbox)
my_source = Source.create(
title="My source title",
reference="My source reference",
source_type=SourceType.get("Derived Value"),
)
my_site = Asset.create(
name="My site name",
asset_type=AssetType.get("Site"),
)
my_parameter = Parameter.create(
parameter_type=ParameterType.get("Height"),
value=100,
unit="m",
source=my_source,
parent=my_site,
)
I parametri possono essere pubblicati su DDB passando un elenco di parametri al metodo post_parameters
su un Project
.
my_project = Project.put("00000000")
my_project.post_parameters([my_parameter])
Un Parameter
può essere creato con solo un ParameterType
, che quando pubblicato, creerà un parametro vuoto senza alcun valori.
Se pubblicata con un valore, la libreria verificherà se il valore, l'unità o l'origine sono cambiati e aggiornano il parametro se lo è.
Possiamo anche pubblicare commenti insieme ai nostri parametri con valori.
parameter_with_comment = Parameter.create(
parameter_type=ParameterType.get("Location"),
value="Glasgow, Scotland",
source=my_source,
comment="Includes the city of Glasgow and the surrounding area.",
)
# Classi di tassonomia
Queste classi rappresentano i diversi modi in cui abbiamo classificato i nostri dati.
Ad esempio, abbiamo migliaia di classi di dati Parameter
nei nostri progetti, e queste sono tutte classificate da alcune lezioni di tassonomia ParameterType
.
Questo potrebbe essere centinaia di Parameter
oggetti con ParameterType
di "Area".
Queste classi vengono utilizzate per fornire contesto ai dati, dargli una struttura coerente e rendere più facile lavorare.
Tutte queste classi hanno 3 metodi comuni che utilizzerai per interagire con loro:
get_all
- Ciò restituirà tutti gli oggetti di tassonomia di quel tipo in DDB.
search
- Ciò restituirà un elenco di oggetti di tassonomia che corrispondono al termine di ricerca.
get
- Ciò restituirà un singolo oggetto di tassonomia per nome o UUID.
# Tipo di origine
DDB ha una tassonomia per i tipi di fonti. Esempi di questi includono "Assunzione", "Valore derivato" e "Guida del settore".
from pyddb import DDB, env, SourceType
DDB(env.sandbox)
all_source_types = SourceType.get_all()
my_source_type = SourceType.get("Derived Value")
my_source_type.id
my_source_type.name
# Tipo di attività
DDB ha una tassonomia per i tipi di attività. Esempi di questi includono "Sito", "Building", "Space", "Bridge", "Tunnel" e "Road".
from pyddb import DDB, env, AssetType
DDB(env.sandbox)
all_asset_types = AssetType.get_all()
my_asset_type = AssetType.get("Site")
my_asset_type.id
my_asset_type.name
Alcuni tipi di risorse hanno sottotipi. Puoi controllare la loro proprietà booleana asset_sub_type
per vedere se hanno sottotipi.
if my_asset_type.asset_sub_type:
sub_types = my_asset_type.get_sub_types()
# Sottotipo di attività
La tassonomia DDB supporta l'ulteriore classificazione dei tipi di attività in sottomarini. Quando un tipo di risorsa ha sottotitoli, tutte le istanze di quel tipo devono essere classificate come uno dei tipi secondari.
Ad esempio, il "sistema di costruzione" AssetType
ha diversi tipi secondari, tra cui "riscaldamento", "raffreddamento" e "illuminazione".
Tutte le risorse di questo tipo devono essere uno di quei sottogruppi.
from pyddb import DDB, env, AssetSubType
DDB(env.sandbox)
all_asset_sub_types = AssetSubType.get_all()
my_asset_sub_type = AssetSubType.get("Heating")
my_asset_sub_type.id
my_asset_sub_type.name
my_asset_sub_type.asset_type_id
# Tipo di parametro
DDB ha una tassonomia per i tipi di parametri. Esempi di questi includono "temperatura estiva di bulbo secco interno", "modulo di elasticità", "data di ultima ispezione".
Questi sono usati per classificare il nostro Parameters
e applicare alcune regole ad esse, come le unità che possono avere o i tipi di dati che possono essere.
from pyddb import DDB, env, ParameterType
DDB(env.sandbox)
all_parameter_types = ParameterType.get_all()
my_parameter_type = ParameterType.get("Modulus of elasticity")
my_parameter_type.id
my_parameter_type.name
my_parameter_type.data_type
my_parameter_type.unit_type
# Tipo di elemento
Un ItemType
è una combinazione di AssetType
, un ParameterType
e potenzialmente un AssetSubType
.
Questi sono creati dal nostro team e rendono disponibili diversi ParameterTypes
su diversi Assets
in base al loro AssetType
e AssetSubType
.
Possiamo usare la classe ItemType
per vedere quali ParameterTypes
sono disponibili per diversi AssetTypes
.
from pyddb import DDB, env, ItemType
DDB(env.sandbox)
all_item_types = ItemType.get_all()
site_item_types = ItemType.get_by_asset_type(AssetType.get("Site"))
ItemTypes
Permettici di applicare regole ancora più specifiche ai nostri dati, come un elenco di Options
disponibile.
Ad esempio, potrebbe esserci un ItemType
che rappresenta il "tipo di campo" ParameterType
sul AssetType
"sito".
Questo ItemType
potrebbe avere un elenco di Options
che rappresentano i diversi tipi di campi che possono essere selezionati, come "Brownfield" o "Greenfield".
Ciò significherebbe che in DDB tutti i valori di "tipo di campo" sulle risorse "sito" dovrebbero essere una di queste due opzioni.
for item_type in site_item_types:
if item_type.has_options:
options = item_type.get_options()
# Opzione
Un Option
è un valore che può essere selezionato per un Parameter
di un certo ItemType
.
Questi sono elenchi di valori preimpostati che sono consentiti per diversi ItemTypes
.
Puoi accedere ai loro valori tramite la proprietà "Valore":
for option in options:
print(option.value)
# Tipo di unità
DDB ha una tassonomia per i tipi di unità. Esempi di questi includono "temperatura", "lunghezza", "area" e "volume".
Questi ci consentono di raggruppare unità simili, come "Celsius" e "Fahrenheit" entrambi essendo nel tipo di unità di "temperatura".
ParameterTypes
hanno una proprietà unit_type
che viene utilizzata per limitare le unità che possono essere utilizzate per quella ParameterType
.
from pyddb import DDB, env, UnitType
DDB(env.sandbox)
all_unit_types = UnitType.get_all()
my_unit_type = UnitType.get("Temperature")
my_unit_type.id
my_unit_type.name
Puoi anche recuperare tutte le unità per un dato UnitType
.
my_unit_type = UnitType.get('Length')
length_units = my_unit_unit.get_units()
# Sistema unitario
DDB ha una tassonomia per i sistemi unitari. Esempi di questi includono "Si", "Imperial" e "General".
Questi ci consentono di classificare ulteriormente le nostre unità.
from pyddb import DDB, env, UnitSystem
DDB(env.sandbox)
all_unit_systems = UnitSystem.get_all()
my_unit_system = UnitSystem.get("General")
my_unit_system.id
my_unit_system.name
Puoi anche recuperare tutte le unità per un dato UnitSystem
.
my_unit_system = UnitSystem.get('General')
general_units = my_unit_unit.get_units()
# Unità
DDB ha una tassonomia per le unità. Esempi di questi includono "M", "KG" e "FT".
from pyddb import DDB, env, Unit
DDB(env.sandbox)
all_units = Unit.get_all()
my_unit = Unit.get("m")
my_unit.id
my_unit.symbol
# Tipo di ruolo
I tipi di ruolo definiscono diversi tipi di accesso al progetto DDB. Un singolo utente può avere più ruoli.
I diversi tipi di ruolo sono:
Admin
- Per la modifica delle autorizzazioni utente
Reader
- Per la lettura dei dati del progetto
Editor
- Per la modifica dei dati del progetto
Checker
- Per l'aggiornamento dello stato QA
Approver
- Per l'approvazione dei dati
RoleType
è un oggetto Enum
.
from pyddb import DDB, env, Project, RoleType
DDB(env.sandbox)
project = Project.put('00000000')
project.put_user_roles([
(RoleType.Admin, '[email protected]'),
(RoleType.Editor, '[email protected]'),
])
# Etichetta
Tags
vengono utilizzati per organizzare i nostri dati e possono essere utili per il filtraggio e la ricerca.
Esempi di questi includono "Google", "Scozia" e "Meccanico".
from pyddb import DDB, env, Tag, Project, Asset, Parameter
DDB(env.sandbox)
all_tags = Tag.get_all()
my_tag = Tag.get("Google")
project = Project.put('00000000')
some_asset = project.get_assets()[0]
some_parameter = some_asset.get_parameters()[0]
project.post_tags([my_tag])
some_asset.post_tags([my_tag])
some_parameter.post_tags([my_tag])
# Tipo di tag
Tags
sono raggruppati insieme dal loro TagTypes
.
Esempi di questi includono "client", "regione" e "workstage".
from pyddb import DDB, env, TagType
DDB(env.sandbox)
all_tag_types = TagType.get_all()
my_tag_type = TagType.get("Client")
client_tags = my_tag_type.get_tags()