# Python - PyDDB
ملاحظة للمستخدمين الخارجيين - تشير العديد من الروابط في القسم التالي إلى التطبيقات الداخلية. يرجى التحدث إلى فريق المشروع الخاص بك للحصول على الدعم.
توفر حزمة pyddb
طريقة واضحة لغير المطورين للتفاعل مع DDB عن طريق تبسيط بناء الجملة وتنفيذ ميزات الراحة.
سيغطي هذا الدليل التثبيت والبدء السريع للحزمة ، بالإضافة إلى مرجع كامل للحزمة وميزاته.
# سمات
إلى جانب تبسيط الواجهة بشكل كبير للتفاعل مع نقاط نهاية API DDB ، توفر المكتبة ميزات مفيدة أخرى:
المصادقة
سيطالب العميل بالمستخدم لبيانات اعتماد ARUP الخاصة بهم عندما يتم إنشاء مثيل للعميل وتحديث الرمز المميز تلقائيًا حسب الضرورة.
API المبسط والتنفيذ
تم تصميم المكتبة للمبتدئين Python المستخدمين الذين يرغبون في إنشاء سير عمل آلي.
لقد قمنا بتبسيط جميع نقاط نهاية الخدمات الدقيقة في مكتبة واحدة مع واجهة متسقة. هذا يعني أن هناك أقل للتعلم ومن السهل البدء.
يمكنك الاستمرار في إعادة تشغيل البرامج النصية وسنتعامل مع التحقق من التكرارات وإجراء أي تحديثات لك. عادةً ما يمكن استخدام البرامج النصية في مشاريع أخرى فقط عن طريق تغيير رقم المشروع.
استكشاف تصنيف DDB بسهولة
DDB لديه تصنيف خاص به: لا يمكنك فقط إنشاء نوع جديد من الأصول أو المعلمة.
توفر هذه المكتبة طرقًا للبحث من خلال تصنيفنا الحالي بالاسم أو UUID.
تم اختباره بالكامل
يتم اختبار هذه المكتبة بالكامل مقابل الإصدارات الحالية والمستقبلية من API DDB ، بحيث يمكنك البدء بثقة.
ترقيم الصفحات
بشكل افتراضي ، ستعود نقاط النهاية الخاصة بنا إلى الصفحة الأولى من البيانات. هذه المكتبة تتعامل مع ترقيم الصفحات واسترداد جميع البيانات لك.
دعم IDE
يتم كتابة المكتبة بالكامل ، بحيث يمكنك الحصول على الإكمال التلقائي واكتب التحقق من IDE.
# التثبيت والإعداد
- يتطلب Python 3.10+ (متجر التطبيقات) - مطلوب لتشغيل الحزمة.
- يتطلب git (مكتب الخدمة) - مطلوب لتثبيت الحزمة.
- يتطلب حساب GitHub مع Arup البريد الإلكتروني - مطلوب لتثبيت الحزمة.
- رمز الاستوديو المرئي الموصى به (متجر التطبيق) - بيئة موصى بها لكتابة رمز.
بمجرد تثبيت ما سبق، افتح Visual Studio Code وافتح المجلد الذي ترغب في تخزين عملك فيه.
افتح محطة Bash وقم بتشغيل الأوامر التالية:
python -m venv .venv
تنشيط البيئة الافتراضية
source .venv/Scripts/activate
قم بتثبيت DDB Python sdks
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 \
ddb-template-service \
-i https://pkgs.dev.azure.com/ovearup/_packaging/ddb/pypi/simple/
قم بتثبيت حزمة PyDDB
pip install git+https://github.com/arup-group/PyDDB.git
# بداية سريعة
# الحصول على البيانات
يعد الحصول على البيانات من DDB أمرًا بسيطًا مثل استدعاء الطريقة المناسبة على كائن المشروع. هذا سوف يتعامل مع ترقيم الصفحات وإرجاع الكائنات مع البيانات الوصفية. انظر الى مرجع API للمزيد من المعلومات.
استيراد أجزاء المكتبة التي تحتاجها:
from pyddb import DDB, env, Project, ParameterType
إنشاء مثيل للعميل وضبط البيئة:
ddb = DDB(env.sandbox)
احصل على مشروع DDB موجود:
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)
ستعود كل من طرق النشر هذه إلى ما ينشرونه ولا يضيفون بيانات مكررة. لن يؤدي نشر المعلمات الجديدة إلى تجاوز المعلمات الحالية إذا لم تتغير القيمة أو الوحدة أو المصدر.
هذا يعني أنه يمكن استخدام هذه الطرق لإنشاء مهام سير العمل الآلية.
# مرجع API
يتم تقسيم هذه المستندات حسب الفصل وتقديم وصف ومثال على كيفية استخدامها. في هذه المكتبة ، لدينا نوعان رئيسيان من الفصول التي تخدم أغراض مختلفة:
فئات البيانات : تمثل هذه قيم بياناتنا وهي ما ستنشره وتراجعه للتفاعل مع بيانات المشروع. عادةً ما تكون مرتبطة بفئات التصنيف حتى نعرف نوع البيانات التي نعمل معها.
فئات التصنيف : يتم تحديد هذه الفئات ، مثل "Parametertype" أو "AssetType" ، من قبل فريقنا. هذه طرق لتصنيف بياناتنا وإعطائها سياقها.
باختصار ، فئات البيانات هي البيانات التي تعمل معها ، وفئات التصنيف هي الطرق التي نصنفها بها. يمكنك أيضًا استكشافنا قائمة المصطلحات لمزيد من المعلومات حول الشروط التي نستخدمها.
# فئات البيانات
ال DDB و مشروع الفصول هي نقاط الدخول الرئيسية للمكتبة.
يتم استخدام فئة DDB
في كل نصي لإنشاء إنشاء العميل وتعيين البيئة.
يتم استخدام فئة DDB
للوصول إلى البيانات عبر المشاريع ، بينما يتم استخدام فئة Project
للوصول إلى البيانات في مشروع معين.
# DDB
فئة DDB هي الفئة الرئيسية للعميل. يتم استخدامه لإنشاء إنشاء العميل وتعيين البيئة. يجب على جميع البرامج النصية إنشاء مثيل للعميل مع البيئة التي يعملون فيها.
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
سيعيد المشروع فقط إذا كان موجودًا في DDB. put
ستقوم بإنشاء المشروع إذا لم يكن موجودًا.
# مصدر
يتم استخدام فئة المصدر لإنشاء مصادر ونشرها إلى DDB. يتم إنشاء مصدر جديد عن طريق تمرير نوع المصدر وعنوانه والمرجع إلى طريقة 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"),
)
يمكن نشر المصادر على DDB من خلال تمرير قائمة المصادر إلى طريقة post_sources
على Project
.
my_project = Project.put("00000000")
my_project.post_sources([my_source])
يمكن إعادة توحيد المصادر الموجودة في المشروع عن طريق استدعاء طريقة get_sources
على Project
.
project_sources = my_project.get_sources()
هذا يعني أنه من السهل جدًا الحصول على مصادر من مشروع سابق وإعادة استخدامها في مشروع جديد.
# أصل
يتم استخدام فئة Asset
لإنشاء الأصول ونشرها إلى DDB. يتم إنشاء مثيل للأصل الجديد عن طريق تمرير الاسم ونوع الأصول والأصل إلى طريقة create
.
أحد الأشياء المهمة التي يجب ملاحظتها هو أنه في DDB ، لا يمكن أن يكون لديك جائزة تحمل نفس الاسم والنوع والوالد. هذا يعني أن موقع واحد لا يمكن أن يكون له مبنيين بنفس الاسم. تستخدم هذه المكتبة هذا المنطق لمنع إنشاء الأصول المكررة وبدلاً من ذلك ستعيد الأصول الحالية إذا تم إعادة تشغيل البرامج النصية.
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
لفهم التسلسل الهرمي أو استخدام DDB UI.
يمكن نشر الأصول على DDB عن طريق تمرير قائمة الأصول إلى طريقة 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
لإنشاء المعلمات ونشرها إلى DDB. يتم إنشاء معلمة جديدة عن طريق تمرير نوع المعلمة والقيمة والوحدة والمصدر والوالد إلى طريقة 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,
)
يمكن نشر المعلمات على DDB عن طريق تمرير قائمة المعلمات إلى طريقة 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
مع ParameterType
من "المنطقة".
تُستخدم هذه الفئات لتوفير السياق للبيانات ، وإعطائها بنية متسقة ، وتسهيل العمل معها.
كل هذه الفصول لديها 3 طرق شائعة ستستخدمها للتفاعل معها:
get_all
- سيؤدي ذلك إلى إرجاع جميع كائنات التصنيف من هذا النوع في DDB.
search
- سيؤدي ذلك إلى إرجاع قائمة كائنات التصنيف التي تتطابق مع مصطلح البحث.
get
- سيؤدي هذا إلى إرجاع كائن تصنيف واحد بالاسم أو UUID.
# نوع المصدر
DDB لديه تصنيف لأنواع المصادر. وتشمل أمثلة هذه "الافتراض" و "القيمة المشتقة" و "إرشادات الصناعة".
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
# نوع الأصول
DDB لديه تصنيف لأنواع الأصول. ومن الأمثلة على ذلك "الموقع" و "البناء" و "الفضاء" و "الجسر" و "النفق" و "الطريق".
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
بعض أنواع الأصول لها أنواع فرعية. يمكنك التحقق من خاصية asset_sub_type
لمعرفة ما إذا كان لديهم أنواع فرعية.
if my_asset_type.asset_sub_type:
sub_types = my_asset_type.get_sub_types()
# نوع الأصول الفرعية
يدعم تصنيف DDB مزيد من التصنيف لأنواع الأصول في أنواع فرعية. عندما يكون نوع الأصول له أنواع فرعية ، يجب تصنيف جميع الحالات من هذا النوع كأحد الأنواع الفرعية.
على سبيل المثال ، يحتوي "نظام البناء" AssetType
على العديد من الأنواع الفرعية ، بما في ذلك "التدفئة" و "التبريد" و "الإضاءة".
يجب أن تكون جميع الأصول من هذا النوع واحدة من تلك الأنواع الفرعية.
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
# نوع المعلمة
DDB لديه تصنيف لأنواع المعلمات. ومن الأمثلة على ذلك "درجة حرارة المصباح الجاف الصيفي الصيفي" ، "معامل المرونة" ، "تاريخ التفتيش الأخير".
تُستخدم هذه لتصنيف Parameters
وتطبيق بعض القواعد عليها ، مثل الوحدات التي يمكن أن تحتوي عليها أو أنواع البيانات التي يمكن أن تكون عليها.
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
# نوع العنصر
ItemType
هو مزيج من AssetType
، ParameterType
، وربما AssetSubType
.
يتم إنشاء هذه من قبل فريقنا وجعل مختلفة ParameterTypes
متوفرة على Assets
استنادًا إلى AssetType
و AssetSubType
.
يمكننا استخدام فئة ItemType
لمعرفة أي ParameterTypes
متاح لمختلف 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
تسمح لنا بتطبيق قواعد أكثر تحديدًا على بياناتنا ، مثل قائمة متوفرة Options
.
على سبيل المثال ، يمكن أن يكون هناك ItemType
يمثل ParameterType
'نوع الحقل' على AssetType
'الموقع'.
يمكن أن يحتوي هذا ItemType
على قائمة بـ Options
التي تمثل الأنواع المختلفة من الحقول التي يمكن تحديدها ، مثل "Brownfield" أو "Greenfield".
هذا يعني أنه في DDB ، يجب أن تكون جميع قيم "نوع الحقل" على موقع "الموقع" واحدة من هذين الخيارين.
for item_type in site_item_types:
if item_type.has_options:
options = item_type.get_options()
# خيار
Option
هي قيمة يمكن تحديدها لـ Parameter
من ItemType
.
هذه قوائم مسبقًا للقيم المسموح بها لمختلف ItemTypes
.
يمكنك الوصول إلى قيمها من خلال خاصية "القيمة":
for option in options:
print(option.value)
# نوع الوحدة
DDB لديه تصنيف لأنواع الوحدات. تشمل أمثلة هذه "درجة الحرارة" و "الطول" و "المنطقة" و "الحجم".
هذه تتيح لنا تجميع وحدات متشابهة ، مثل "Celsius" و "Fahrenheit" كلاهما في نوع وحدة "درجة الحرارة".
ParameterTypes
لها خاصية unit_type
التي يتم استخدامها لتقييد الوحدات التي يمكن استخدامها لهذا 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```
يمكنك أيضًا استرداد جميع الوحدات لـ `UnitType`.
```python
my_unit_type = UnitType.get('Length')
length_units = my_unit_unit.get_units()
# وحدة نظام
DDB لديه تصنيف لأنظمة الوحدة. ومن الأمثلة على هذه "Si" و "Imperial" و "General".
هذه تسمح لنا بزيادة تصنيف وحداتنا.
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
يمكنك أيضًا استرداد جميع الوحدات لـ UnitSystem
.
my_unit_system = UnitSystem.get('General')
general_units = my_unit_unit.get_units()
# وحدة
DDB لديه تصنيف للوحدات. تشمل أمثلة هذه "M" و "KG" و "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
# نوع الدور
تحدد أنواع الأدوار أنواعًا مختلفة من الوصول إلى مشروع DDB. يمكن للمستخدم الواحد أن يكون له أدوار متعددة.
أنواع الأدوار المختلفة هي:
Admin
- لتعديل أذونات المستخدم
Reader
- لقراءة بيانات المشروع
Editor
- لتحرير بيانات المشروع
Checker
- لتحديث حالة QA
Approver
- للموافقة على البيانات
RoleType
هو كائن 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]'),
])
# بطاقة شعار
Tags
تستخدم لتنظيم بياناتنا ويمكن أن تكون مفيدة للتصفية والبحث.
تشمل أمثلة هذه "Google" و "اسكتلندا" و "ميكانيكية".
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
يتم تجميعها معًا بواسطة TagTypes
.
تشمل أمثلة هذه "العميل" و "المنطقة" و "مرحلة العمل".
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()