# Python - PyDDB

Напомена за спољне кориснике - Многе везе у следећем одељку односе се на интерне апликације. Молимо разговарајте са својим пројектним тимом за подршку.

Паковање pyddb пружа јасан начин да се не програмерима интеракције са ДДБ-ом поједностављивањем синтаксе и примене карактеристика практичности.

Овај водич ће прекрити инсталацију и брзо почетак пакета, као и потпуну референцу пакета и његових карактеристика.

# Карактеристике

Поред тога што увелико поједностављује интерфејс за интеракцију са ДДБ АПИ крајњим тачкама, библиотека пружа и друге корисне функције:

Аутентикација

Клијент ће затражити корисника за своје аруп акредитиве када је клијент инстантиран и аутоматски освежити токен по потреби.

Поједностављени АПИ и имплементацију

Библиотека је изграђена за почетнике python корисника који желе да створе аутоматизоване токове рада.

Поједноставили смо све крајње тачке микросервиса у једну библиотеку са доследном интерфејсом. То значи да је мање научити и лако је започети.

Можете да одржите прекривене скрипте и да ћемо се бавити провером дупликата и обављати све исправке за вас. Обично се скрипте могу користити на другим пројектима само променом броја пројекта.

Једноставно истраживање ДДБ таксономије

ДДБ има своју таксономију: Не можете једноставно створити нову врсту средства или параметра.

Ова библиотека пружа начине претраживања кроз нашу постојећу таксономију по имену или УУИД-у.

Потпуно тестиран

Ова библиотека је у потпуности тестирана на текуће и будуће верзије ДДБ АПИ-ја, тако да можете започети са самопоуздањем.

Страницу

Подразумевано, наше крајње тачке ће вратити прву страницу података. Ова библиотека рукује страњањем и дохваћа све податке за вас.

ИДЕ подршка

Библиотека је у потпуности куцана, тако да можете добити аутоматско довршавање и откуцајте проверу у свом ИДЕ-у.

# Инсталација и подешавање

  1. Потребно је Python 3.10+ (Апп Сторе) - потребно за покретање пакета.

  2. Захтева гит (сервисни сто) - потребан за инсталирање пакета.

  3. Захтијева ГитХуб налог са АРП е-поштом - Потребно за инсталирање пакета.

  4. Препоручени код Висуал Студио (Апп Сторе) - препоручено окружење за писање кода.

Када инсталирате горенаведено, отворите Висуал Студио Цоде и отворите фасциклу у коју желите да сачувате свој рад.

Отворите Басх терминал и покрените следеће команде:

Креирајте виртуелно окружење

python -m venv .venv

Активирајте виртуелно окружење

source .venv/Scripts/activate

Инсталирајте ДДБ 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/

Инсталирајте пакет PyDDB

pip install git+https://github.com/arup-group/PyDDB.git

# Брз почетак

# Добијање података

Добијање података са ДДБ-а је једноставно као и позивање одговарајуће методе на пројектном објекту.

Ово ће се бавити страници и повратни објекти са метаподацима. Погледај АПИ референца за више информација.

Увезите делове библиотеке који вам је потребно:

from pyddb import DDB, env, Project, ParameterType

Инстантирајте клијента и поставите околину:

ddb = DDB(env.sandbox)

Набавите постојећи ДДБ пројекат:

my_project = Project.get_by_number(project_number="21515700")

Добијајте податке са пројекта:

project_parameters = my_project.get_parameters()

project_assets = my_project.get_assets()

project_sources = my_project.get_sources()

Добијајте податке из таксономије:

all_parameter_types = ParameterType.get_all()

some_parameter_types = ParameterType.search('area')

my_parameter_type = ParameterType.get("Plot area")

# Подаци о објављивању

Увезите делове библиотеке који вам је потребно:

from pyddb import DDB, env, Project, ParameterType, AssetType, Unit, Source, Parameter, Asset

Инстантирајте клијента и поставите околину:

ddb = DDB(env.sandbox)

Креирајте пројекат или набавите постојећу:

project = Project.put("21515700")

Дефинишите имовину коју желите да објавите:

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,
 )
]

Дефинишите параметре које желите да поставите:

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",
        ),
 )
]

Пошаљите податке:

project.post_assets(assets)
project.post_parameters(parameters)

Свака од ових метода поста ће се вратити оно што објављују и не додају дупликатне податке. Објављивање нових параметара неће превладати постојеће параметре ако се вредност, јединица или извор није променила.

То значи да се ови поступци могу користити за креирање аутоматизованих радних токова.

# АПИ референца

Ови документи се размажу по класама и пружају опис и пример како их треба користити.

У овој библиотеци имамо две главне врсте класа које служе различите сврхе:

Часови података :

Они представљају вредности наших података и они су оно што ћете објавити и покушати да комуницирате са подацима о пројекту.

То ће се обично везати за класе таксономије да бисмо знали са којим подацима са којима радимо.

ТАКСОНОМИ ЦЛАСЕС :

Ове класе, попут 'параметертипе' или 'АССЕТТИП', одређује наш тим. Ово су начини категоризације наших података и дајући јој контекст.

Укратко, класе података су подаци са којима радите, а класе таксономије су начини на које га класификујемо.

Такође можете да истражите наше речник За више информација о условима које користимо.

# Часови података

Тхе ДДБ и Пројекат Часови су главне улазне тачке за библиотеку.

Класа DDB користи се у свакој скрипте да је инстантиција клијента и поставила околину.

Класа DDB користи се за приступ подацима широм пројеката, док се класа Project користи за приступ подацима о одређеном пројекту.

# ДДБ

ДДБ класа је главна класа за клијента. Користи се за иншање клијента и поставити околину. Све скрипте треба да унесе клијента у околини у којој раде.

from pyddb import DDB, env
ddb_client = DDB(env.sandbox)

Ово сада можете да искористите да бисте приступили подацима широм пројеката.

Препоручује се употреба врло специфичних упита како би се смањила количина враћених података.

all_projects = ddb_client.get_projects()
all_plot_areas = ddb_client.get_parameters(
 parameter_type_id=[
     ParameterType.get("Plot area").id
 ]
)

# Пројекат

Класа пројекта користи се за приступ подацима о одређеном пројекту. Инстантирано је преношењем пројекта на методе get_by_number или put.

from pyddb import DDB, env, Project
DDB(env.sandbox)
my_project = Project.get_by_number("00000000")
my_project = Project.put("00000000")

Разлика између ове две методе је да ће get_by_number вратити само пројекат ако постоји у ДДБ-у. put ће створити пројекат ако не постоји.

# Извор

Изворна класа користи се за креирање и објављивање извора на ДДБ. Нови извор је инстантиран преношењем врсти извора, наслов и упућивања на методу 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"),
)

Извори се могу објавити ДДБ-у преласком листе извора на методу post_sources на А Project.

my_project = Project.put("00000000")
my_project.post_sources([my_source])

Извори на пројекту могу се покупити позивањем методе get_sources на Project.

project_sources = my_project.get_sources()

То значи да је врло лако добити изворе из претходног пројекта и поново их поново користити у новом пројекту.

# Имовина

Класа Asset користи се за креирање и постављање имовине ДДБ-у. Нова имовина је инстантирана преношењем имена, типа имовине и родитеља на методу create.

Једна важна ствар за напомену је да у ДДБ-у не можете имати два средства са истим именом, типом и родитељем. То значи да појединачна локација не може имати две зграде са истим именом.

Ова библиотека користи ову логику како би се спречило креирање дупликата и уместо тога, вратиће постојећу имовину ако су скрипте рерун.

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,
)

Постоји неколико правила за стварање имовине:

  • Средство је потребно или AssetType или AssetSubType тако да знамо какву је имовину.

  • Имовина без AssetSubType Потребно вам је име.

  • Актива је потребно да следи хијерархију типа имовине.

На пример, А средство за имовину Building мора имати Адреса Site као родитеља.

Можете да истражите класу AssetType да бисте разумели хијерархију или користите ДДБ уИ.

Средство се може објавити ДДБ-у преласком листе имовине на методу post_assets на Project.

my_project = Project.put("00000000")
my_project.post_assets([my_asset, my_other_asset, yet_another_asset])

Актива на пројекту може се повратити позивањем на методу get_assets на Project.

project_assets = my_project.get_assets()

То значи да је врло лако добити имовину из претходног пројекта и поново их поново користити у новом пројекту.

# Параметар

Класа Parameter користи се за креирање и постављање параметара на ДДБ. Нови параметар је инстантиран преношењем типа, вредности, јединице, јединице, извора и родитеља и родитеља на методу create. Желите да будете упознати са класама Source и Asset пре постављања параметара.

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,
)

Параметри се могу објавити ДДБ-у преласком листе параметара на методу post_parameters на Project.

my_project = Project.put("00000000")
my_project.post_parameters([my_parameter])

А Parameter се може створити само ParameterType, који ће када је објављено створити празан параметар без икаквих вредности.

Када је објављено са вриједношћу, библиотека ће проверити да ли је вредност, јединица или извор променио и ажурирала параметар ако има.

Такође можемо објавити коментаре упоредо са нашим параметрима са вредностима.

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.",
)

# ТАКСОНОМИ ЦЛАСЕС

Ове класе представљају различите начине на које смо класификовали своје податке.

Као пример, имамо хиљаде класа података о подацима у нашим пројектима, а све их је све класификовано за неколико Parameter класа таксономије.

Ово би могло бити стотине ParameterType објеката са Parameterом "подручја".

Ове класе се користе за пружање контекста подацима, дају јој доследну структуру и олакшати рад.

Све ове класе имају 3 уобичајене методе које ћете користити за интеракцију са њима:

ParameterType - Ово ће вратити све таксономије објекте тог типа у ДДБ-у.

get_all - Ово ће вратити списак таксономијских објеката који одговарају року за претрагу.

search - Ово ће вратити јединствени предмет таксономије по имену или УУИД-у.

# Извор Тип

ДДБ има таксономију за врсте извора.

Примери ових укључују "претпоставку", "изведену вредност" и "Водич за индустрију".

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```

### Врста имовине <a id="asset-type"></a>

ДДБ има таксономију за типове имовине.

Примери ових укључују "сајт", "зграда", "простор", "мост", "тунел" и "пут".

```python
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```

Неке врсте имовине имају подтипове. Можете да проверите њихов `get` боолеан имовину да бисте видели да ли имају подтипове.

```python
if my_asset_type.asset_sub_type:
    sub_types = my_asset_type.get_sub_types()

# Подтип имовине

Трактономија ДДБ подржава даљу класификацију типова имовине у подповедице.

Када тип имовине има подповедице, сви инстанци тог типа морају се класификовати као један од подпожаја.

Као пример, "ГРАЂЕВИНСКИ СИСТЕМ" asset_sub_type има неколико подпожаја, укључујући "гријање", "хлађење" и "осветљење".

Сва имовина ове врсте морају бити једна од тих подпожаја.

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```

### Врста параметара <a id="parameter-type"></a>

ДДБ има таксономију за врсте параметара.

Примери ових укључују 'Летњу температуру суве сијалице', 'модул еластичности', 'датум последње инспекције'.

Они се користе за класификацију нашег `AssetType` и примијенити им неке правила на њих, као што су јединице које могу имати или врсте података које могу бити.

```python
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

# Тип ставка

Parameters је комбинација ItemType, а AssetType и потенцијално ParameterType.

Они креирају наш тим и направимо другачије AssetSubType доступне на различитим ParameterTypes на основу њиховог Assets и AssetType.

Можемо да користимо класу AssetSubType да бисте видели који су доступни ItemType за различите ParameterTypes.

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"))

AssetTypes allow us to apply even more specific rules to our data, such as a list of available ItemTypes.

For example, there could be an Options that represents the ItemType 'Field type' on the ParameterType 'Site'.

This AssetType could have a list of ItemType that represent the different types of fields that can be selected, such as 'Brownfield' or 'Greenfield'.

This would mean that in DDB, all values of 'Field type' on 'Site' assets would have to be one of those two options.

for item_type in site_item_types:
    if item_type.has_options:
        options = item_type.get_options()

# Опција

Options је вредност која се може одабрати за Option одређеног Parameter.

Ово су унапред постављене листе вредности које су дозвољене за различите ItemType.

Њихове вредности можете приступити кроз имовину "Вредност":

for option in options:
    print(option.value)

# Јединица тип

ДДБ има таксономију за врсте јединица.

Примери ових укључују "температуру", "дужину", "подручје" и "јачину".

Они нам омогућавају да се групирамо јединице које су сличне, попут "Целзијуса" и "Фахренхеита" буду у тип јединице "температуре".

ItemTypes има својство ParameterTypes који се користи за ограничавање јединица које се могу користити за то unit_type.

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

Такође можете да преузмете све јединице за дато ParameterType.

my_unit_type = UnitType.get('Length')

length_units = my_unit_unit.get_units()

# Систем јединице

ДДБ има таксономију за јединичне системе.

Примери ових укључују "СИ", "Империал" и "Генерал".

Они нам омогућавају да додатно класификујемо наше јединице.

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

Такође можете да преузмете све јединице за дато UnitType.

my_unit_system = UnitSystem.get('General')
general_units = my_unit_unit.get_units()```

### Јединица <a id="unit"></a>

ДДБ има таксономију за јединице.

Примери ових укључују 'м', 'кг' и 'фт'.

```python
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

# Врста улоге

Врсте улога дефинишу различите врсте приступа ДДБ пројекту.

Самохрани корисник може имати више улога.

Различите врсте улога су:

UnitSystem - за модификацију корисничких дозвола

Admin - за читање података о пројекту

Reader - за уређивање података о пројекту

Editor - за ажурирање статуса КА

Checker - за одобравање података

Approver је објект RoleType.

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]'),
])

# Ознака

Enum користе се за организовање наших података и може бити корисно за филтрирање и претраживање.

Примери ових укључују "Гоогле", 'Шкотска' и "Механичка".

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])

# Врста ознаке

Tags су груписани заједно по њиховом Tags.

Примери ових укључују "клијент", "регион" и "радну стабули".

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()
Last Updated: 13.9.2023. 15:19:15