# Python - PyDDB
Harici kullanıcılar için not - Aşağıdaki bölümdeki bağlantıların çoğu dahili uygulamaları ifade eder. Lütfen destek için proje ekibinizle konuşun.
pyddb
paketi, geliştiricilerin sözdizimini basitleştirerek ve kolaylık özelliklerini uygulayarak DDB ile etkileşime girmeleri için net bir yol sağlar.
Bu kılavuz, paketin kurulumunu ve hızlı başlangıcının yanı sıra paketin ve özelliklerinin tam bir referansını kapsayacaktır.
# Özellikler
DDB API uç noktaları ile etkileşim kurmak için arayüzü büyük ölçüde basitleştirmenin yanı sıra, kütüphane diğer yararlı özellikler sağlar:
Kimlik doğrulama
İstemci, istemci somutlaştırıldığında ve jetonu otomatik olarak yenilediğinde kullanıcıyı ARUP kimlik bilgileri isteyecektir.
Basitleştirilmiş API ve Uygulama
Kütüphane, otomatik iş akışları oluşturmak isteyen yeni başlayanlar python kullanıcıları için oluşturulmuştur.
Tüm mikro hizmet uç noktalarını tutarlı bir arayüze sahip tek bir kütüphaneye basitleştirdik. Bu, öğrenilecek daha az şey olduğu ve başlaması kolay olduğu anlamına gelir.
Komut dosyalarını tekrar tutabilirsiniz ve kopyaları kontrol etmeyi ve sizin için herhangi bir güncelleme yapmayı gerçekleştireceğiz. Genellikle komut dosyaları diğer projelerde sadece proje numarasını değiştirerek kullanılabilir.
DDB taksonomisini kolayca keşfedin
DDB kendi taksonomisine sahiptir: sadece yeni bir varlık veya parametre türü oluşturamazsınız.
Bu kütüphane, mevcut taksonomimizi ad veya UUID ile arama yolları sağlar.
Tamamen test edilmiş
Bu kütüphane, DDB API'sının mevcut ve gelecekteki sürümlerine karşı tamamen test edilmiştir, böylece güvenle başlayabilirsiniz.
Toplama
Varsayılan olarak, uç noktalarımız verilerin ilk sayfasını döndürür. Bu kütüphane sayfalandırmayı işler ve tüm verileri sizin için alır.
IDE Desteği
Kütüphane tamamen yazılmıştır, böylece IDE'nizde otomatik tamamlama ve tip kontrolü alabilirsiniz.
# Kurulum ve Kurulum
Paketi çalıştırmak için gerekli Python 3.10+ (App Store) gerektirir.
Git (servis masası) gerektirir - paketi yüklemek için gereklidir.
ARUP e -posta ile GitHub hesabı gerektirir - paketi yüklemek için gereklidir.
Önerilen Visual Studio Kodu (App Store) - Kod yazma için önerilen ortam.
Yukarıdakileri yükledikten sonra Visual Studio Code'u açın ve çalışmanızı depolamak istediğiniz klasörü açın.
Bash terminalini açın ve aşağıdaki komutları çalıştırın:
Sanal bir ortam yaratın
python -m venv .venv
Sanal ortamı etkinleştirin
source .venv/Scripts/activate
DDB Python SDK'ları yükleyin
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/
PyDDB paketini yükleyin
pip install git+https://github.com/arup-group/PyDDB.git
# Hızlı başlangıç
# Veri almak
DDB'den veri almak, proje nesnesindeki uygun yöntemi çağırmak kadar basittir.
Bu, meta verilerle sayfalandırma ve nesneleri döndürür. Bak API referansı daha fazla bilgi için.
İhtiyacınız olan kütüphanenin parçalarını içe aktarın:
from pyddb import DDB, env, Project, ParameterType
Müşteriyi somutlaştırın ve ortamı belirleyin:
ddb = DDB(env.sandbox)
Mevcut bir DDB projesi alın:
my_project = Project.get_by_number(project_number="21515700")
Projeden veri alın:
project_parameters = my_project.get_parameters()
project_assets = my_project.get_assets()
project_sources = my_project.get_sources()
Taksonomiden veri alın:
all_parameter_types = ParameterType.get_all()
some_parameter_types = ParameterType.search('area')
my_parameter_type = ParameterType.get("Plot area")
# Verileri Gönderme
İhtiyacınız olan kütüphanenin parçalarını içe aktarın:
from pyddb import DDB, env, Project, ParameterType, AssetType, Unit, Source, Parameter, Asset
Müşteriyi somutlaştırın ve ortamı belirleyin:
ddb = DDB(env.sandbox)
Bir proje oluşturun veya mevcut bir proje alın:
project = Project.put("21515700")
Göndermek istediğiniz varlıkları tanımlayın:
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,
)
]
Göndermek istediğiniz parametreleri tanımlayın:
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",
),
)
]
Verileri gönderin:
project.post_assets(assets)
project.post_parameters(parameters)
Bu posta yöntemlerinin her biri yayınladıkları şeyi döndürür ve yinelenen veri eklemez. Değer, birim veya kaynak değişmediyse, yeni parametrelerin yayınlanması mevcut parametreleri geçersiz kılmaz.
Bu, bu yöntemlerin otomatik iş akışları oluşturmak için kullanılabileceği anlamına gelir.
# API referansı
Bu dokümanlar sınıfa göre parçalanır ve nasıl kullanılması gerektiğine dair bir açıklama ve örnek sağlar.
Bu kütüphanede, farklı amaçlara hizmet eden iki ana sınıf türümüz var:
Bunlar verilerimizin değerlerini temsil eder ve proje verilerinizle etkileşim kurmak için yayınlayacağınız ve geri çekeceğiniz şeydir.
Bunlar genellikle taksonomi sınıflarına bağlı olacaktır, böylece ne tür verilerle çalıştığımızı biliyoruz.
'Parametreype' veya 'AssetType' gibi bu sınıflar ekibimiz tarafından belirlenir. Bunlar verilerimizi sınıflandırmanın ve bağlam vermenin yollarıdır.
Kısacası, veri sınıfları birlikte çalıştığınız verilerdir ve taksonomi sınıfları onu sınıflandırmamızdır.
Ayrıca keşfedebilirsiniz sözlük Kullandığımız terimler hakkında daha fazla bilgi için.
# Veri Sınıfları
. DDB Ve Proje Sınıflar kütüphane için ana giriş noktalarıdır.
DDB
sınıfı her komut dosyasında istemciyi somutlaştırmak ve çevreyi ayarlamak için kullanılır.
DDB
sınıfı, projeler arasında verilere erişmek için kullanılırken, Project
sınıfı belirli bir projedeki verilere erişmek için kullanılır.
# DDB
DDB sınıfı müşteri için ana sınıftır. Müşteriyi somutlaştırmak ve çevreyi ayarlamak için kullanılır. Tüm komut dosyaları, müşteriyi çalıştıkları ortamla başlatmalıdır.
from pyddb import DDB, env
ddb_client = DDB(env.sandbox)
Şimdi bunu projeler arasında verilere erişmek için kullanabilirsiniz.
İade edilen veri miktarını azaltmak için çok özel sorguların kullanılması önerilir.
all_projects = ddb_client.get_projects()
all_plot_areas = ddb_client.get_parameters(
parameter_type_id=[
ParameterType.get("Plot area").id
]
)
# Proje
Proje sınıfı, belirli bir projedeki verilere erişmek için kullanılır. Proje numarasını get_by_number
veya put
yöntemlerine geçirerek başlatılır.
from pyddb import DDB, env, Project
DDB(env.sandbox)
my_project = Project.get_by_number("00000000")
my_project = Project.put("00000000")
Bu iki yöntem arasındaki fark, get_by_number
'ın projeyi yalnızca DDB'de varsa döndürmesidir. put
mevcut değilse projeyi oluşturacaktır.
# Kaynak
Kaynak sınıfı DDB'ye kaynak oluşturmak ve yayınlamak için kullanılır. Yeni bir kaynak, kaynak türünü, başlığını ve create
yöntemine atıfta bulunarak somutlaştırılır.
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"),
)
Kaynaklar, post_sources
üzerindeki Project
yöntemine bir kaynak listesi geçirerek DDB'ye gönderilebilir.
my_project = Project.put("00000000")
my_project.post_sources([my_source])
Bir projedeki kaynaklar get_sources
yöntemini Project
üzerinden çağırarak geri alınabilir.
project_sources = my_project.get_sources()
Bu, geçmiş bir projeden kaynak almanın ve onları yeni bir projede yeniden kullanmanın çok kolay olduğu anlamına gelir.
# Varlık
Asset
sınıfı, DDB'ye varlık oluşturmak ve yayınlamak için kullanılır. Yeni bir varlık, ad, varlık türü ve ebeveyni create
yöntemine aktararak başlatılır.
Dikkat edilmesi gereken önemli bir şey, DDB'de aynı ad, tip ve ebeveyn olan iki varlığa sahip olamayacağıdır. Bu, tek bir sitenin aynı adı taşıyan iki binaya sahip olamayacağı anlamına gelir.
Bu kütüphane, bu mantığı yinelenen varlıkların oluşturulmasını önlemek için kullanır ve bunun yerine komut dosyaları yeniden çalıştırılırsa mevcut varlıkları iade edecektir.
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,
)
Varlıklar oluşturmak için birkaç kural vardır:
Varlıkların bir
AssetType
veyaAssetSubType
olması gerekir, böylece ne tür bir varlık olduğunu biliyoruz.AssetSubType
olmayan varlıkların bir isme ihtiyacı vardır.Varlıkların varlık türü hiyerarşisini takip etmesi gerekir.
Örneğin, bir Building
varlığının ebeveyn olarak Site
varlığına sahip olması gerekir.
Hiyerarşiyi anlamak veya DDB kullanıcı arayüzünü kullanmak için AssetType
sınıfını keşfedebilirsiniz.
Varlıklar, post_assets
yöntemine Project
yöntemine bir varlık listesi aktararak DDB'ye gönderilebilir.
my_project = Project.put("00000000")
my_project.post_assets([my_asset, my_other_asset, yet_another_asset])
Bir projedeki varlıklar get_assets
yöntemini Project
'da çağırarak yeniden tasarlanabilir.
project_assets = my_project.get_assets()
Bu, geçmiş bir projeden varlık almanın ve onları yeni bir projede yeniden kullanmanın çok kolay olduğu anlamına gelir.
# Parametre
Parameter
sınıfı DDB'ye parametreler oluşturmak ve yayınlamak için kullanılır. Yeni bir parametre, parametre türü, değer, birim, kaynak ve parametre create
yöntemine aktarılarak başlatılır.
Parametreleri yayınlamadan önce Source
ve Asset
sınıflarına aşina olmak isteyeceksiniz.
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,
)
Parametreler, post_parameters
üzerindeki Project
yöntemine bir parametre listesi iletilerek DDB'ye gönderilebilir.
my_project = Project.put("00000000")
my_project.post_parameters([my_parameter])
A Parameter
, yayınlandığında herhangi bir değer olmadan boş bir parametre oluşturacak olan sadece bir ParameterType
ile oluşturulabilir.
Bir değerle gönderildiğinde, kütüphane değerin, birimin veya kaynağın değişip değişmediğini kontrol eder ve parametreyi varsa günceller.
Ayrıca değerlerle parametrelerimizin yanında yorum gönderebiliriz.
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.",
)
# Taksonomi sınıfları
Bu sınıflar, verilerimizi sınıflandırdığımız farklı yolları temsil eder.
Örnek olarak, projelerimizde binlerce Parameter
veri sınıfımız var ve bunların hepsi birkaç ParameterType
taksonomi sınıfı ile sınıflandırılıyor.
Bu, Parameter
"Alan" ile yüzlerce ParameterType
nesnesi olabilir.
Bu sınıflar verilere bağlam sağlamak, tutarlı bir yapı sağlamak ve çalışmayı kolaylaştırmak için kullanılır.
Bu sınıfların hepsinin onlarla etkileşim kurmak için kullanacağınız 3 ortak yöntemi vardır:
get_all
- Bu, DDB'deki bu türdeki tüm taksonomi nesnelerini döndürür.
search
- Bu, arama terimine uygun taksonomi nesnelerinin bir listesini döndürür.
get
- Bu, ad veya UUID ile tek bir taksonomi nesnesini döndürür.
# kaynak tipi
DDB'nin kaynak türleri için bir taksonomi vardır.
Bunlara örnek olarak 'varsayım', 'türetilmiş değer' ve 'endüstri rehberliği' yer alır.
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
# Varlık türü
DDB'nin varlık türleri için bir taksonomi vardır.
Bunlara örnek olarak 'site', 'bina', 'uzay', 'köprü', 'tünel' ve 'yol' bulunur.
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
Bazı varlık türlerinin alt tipleri vardır. Alt tipleri olup olmadığını görmek için asset_sub_type
boolean özelliklerini kontrol edebilirsiniz.
if my_asset_type.asset_sub_type:
sub_types = my_asset_type.get_sub_types()
# Varlık alt tipi
DDB taksonomisi, varlık türlerinin alt türlere daha fazla sınıflandırılmasını destekler.
Bir varlık türünün alt türleri olduğunda, bu türün tüm örnekleri alt türlerden biri olarak sınıflandırılmalıdır.
Örnek olarak, 'bina sistemi' AssetType
, 'ısıtma', 'soğutma' ve 'aydınlatma' dahil olmak üzere birkaç alt türe sahiptir.
Bu tür tüm varlıkların bu alt türlerden biri olması gerekir.
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
# Parametre türü
DDB'nin parametre türleri için bir taksonomi vardır.
Bunların örnekleri arasında 'yaz iç mekan kuru ampul sıcaklığı', 'esneklik modülü', 'Son İnceleme Tarihi'.
Bunlar Parameters
'ımızı sınıflandırmak ve sahip olabilecekleri birimler veya olabilecekleri veri türleri gibi bazı kuralları uygulamak için kullanılır.
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
# Öğe türü
ItemType
, AssetType
, bir ParameterType
ve potansiyel olarak AssetSubType
'ın bir kombinasyonudur.
Bunlar ekibimiz tarafından oluşturulur ve ParameterTypes
ve Assets
'larına göre farklı AssetType
'da farklı AssetSubType
sunar.
Farklı ItemType
için hangi ParameterTypes
'ın mevcut olduğunu görmek için AssetTypes
sınıfını kullanabiliriz.
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
Mevcut Options
listesi gibi verilerimize daha spesifik kurallar uygulamamıza izin verin.
Örneğin, ItemType
'sitesinde' ParameterType
'alan türünü' temsil eden bir AssetType
olabilir.
Bu ItemType
, 'Brownfield' veya 'Greenfield' gibi seçilebilen farklı alan türlerini temsil eden Options
listesine sahip olabilir.
Bu, DDB'de, 'site' varlıklarındaki tüm 'alan türü' değerlerinin bu iki seçenekten biri olması gerektiği anlamına gelir.
for item_type in site_item_types:
if item_type.has_options:
options = item_type.get_options()
# Seçenek
Option
, belirli bir Parameter
ItemType
için seçilebilen bir değerdir.
Bunlar, farklı ItemTypes
için izin verilen değerlerin önceden ayarlanmış listeleridir.
Değerlerine 'değer' özelliği aracılığıyla erişebilirsiniz:
for option in options:
print(option.value)
# Birim tipi
DDB, birim türleri için bir taksonomiye sahiptir.
Bunlara örnek olarak 'sıcaklık', 'uzunluk', 'alan' ve 'hacim' bulunur.
Bunlar, her ikisi de 'Sıcaklık' birim tipinde 'Santigrat' ve 'Fahrenheit' gibi benzer birimleri gruplamamıza izin verir.
ParameterTypes
, unit_type
için kullanılabilecek birimleri kısıtlamak için kullanılan bir ParameterType
özelliğine sahiptir.
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
Belirli bir UnitType
için tüm birimleri de alabilirsiniz.
my_unit_type = UnitType.get('Length')
length_units = my_unit_unit.get_units()
# Birim sistemi
DDB, birim sistemleri için bir sınıflandırmaya sahiptir.
Bunlara örnek olarak 'Si', 'İmparatorluk' ve 'Genel' yer alır.
Bunlar birimlerimizi daha da sınıflandırmamıza izin verir.
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
Belirli bir UnitSystem
için tüm birimleri de alabilirsiniz.
my_unit_system = UnitSystem.get('General')
general_units = my_unit_unit.get_units()
# Birim
DDB'nin birimler için bir taksonomi vardır.
Bunların örnekleri arasında 'M', 'kg' ve 'ft' bulunur.
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
# Rol Türü
Rol türleri DDB projesine farklı erişim türlerini tanımlar.
Tek bir kullanıcının birden fazla rolü olabilir.
Farklı rol türleri:
Admin
- Kullanıcı izinlerini değiştirmek için
Reader
- Proje verilerini okumak için
Editor
- Proje verilerini düzenlemek için
Checker
- KG durumunu güncellemek için
Approver
- Verileri onaylamak için
RoleType
bir Enum
nesnesidir.
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]'),
])
# Etiket
Tags
verilerimizi düzenlemek için kullanılır ve filtreleme ve arama için yararlı olabilir.
Bunlara örnek olarak 'Google', 'İskoçya' ve 'Mekanik' yer alıyor.
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])
# Etiket Türü
Tags
TagTypes
ile birlikte gruplandırılır.
Bunlara örnek olarak 'Müşteri', 'Bölge' ve 'WorkStage' bulunur.
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()