跳到主要内容

SDK(Python)

SDK 是一个包含预构建 Labii 组件的工具包,开发者使用它来与 Labii API 进行交互。完整的文档可在 https://docs.labii.com/api/overview 查阅。

使用 ​

  1. 安装 Labii SDK
pip install labii-sdk
  1. 导入包
from labii_sdk.sdk import LabiiObject
  1. 初始化 API 对象
labii = LabiiObject(
api_key="xxx",
organization__sid="xxx"
)
  1. 开始查询
# get a list of tables
labii.Tables.list()

初始化 SDK ​

在初始化 SDK 时,可以自定义以下参数:

  • base_url,服务器基础 URL,默认为 https://www.labii.dev。如果您使用的是不同的数据中心,请确保更改 base_url 设置。
  • api_key,用于认证的 API Key。
  • organization__sid,您的组织 SID。您可以通过登录 Labii (https://www.labii.com/login/),然后进入侧边菜单 -> 设置 -> 组织 -> SID 找到它。
  • api,,APIObject。如果未提供新的 APIObject,将自动创建。当您需要在初始化 Labii 对象之前对 API 进行认证时,请使用此功能。
labii = LabiiObject(
base_url="https://www.labii.dev",
api_key="xxx"
organization__sid=None
api=None
)

对象 ​

用于交互的 Labii 对象。更多信息请参阅 https://docs.labii.com/api/overview#objects

  • Profile
  • APIKey
  • Organization
  • Application
  • Subscription
  • People
  • Team
  • SAML
  • OrganizationWidget
  • Backup
  • Project
  • ProjectMember
  • Table
  • Column
  • Section
  • Filter
  • Record
  • Cell
  • Version
  • Visitor
  • Activity
  • Workflow
  • Step
  • Widget
  • Dashboard
  • Notification

方法 ​

用于与对象交互的方法列表。

create​

创建一个对象。

# Create a project
labii.Project.create({name="test", ...})

# Create a table
labii.Table.create({name_singular="test", ...})

# Create a row
labii.Record.create{{name="test", ...}, query="table__sid=xxx"}

retrieve​

返回一个对象。

  • sid,对象的 SID。
  • query (可选),附加查询以限制结果。
# Return a project
labii.Project.retrieve("psvy0a40x18c0rwBGLQV1")

# Return a record
labii.Row.retrieve("psvy0a40x18c0rwBGLQV1")

list​

获取对象列表。

  • page (默认=1),返回的页码。
  • page_size (默认=10),每页显示的项目数。
  • all_pages (布尔值,默认=False),是否返回所有页面。当为 False 时,仅返回第一页的数据。仅适用于列表视图。
  • level (默认为 "organization"),获取记录的范围。更多信息请参阅 https://docs.labii.com/api/overview#levels
  • serializer (默认为 "list"),返回数据字段的范围。更多信息请参阅 https://docs.labii.com/api/overview#serializer
    • name,仅返回 SID 和名称,速度非常快
    • list,返回对象的选定字段,速度快
    • detail,返回对象的所有字段,速度慢
  • query (可选),附加查询以限制结果。
# Return first page of experiment records
labii.Row.list(
page=1,
page_size=10,
all_pages=False,
level="organization",
serializer="name",
query="table__sid=psvy0a40x18c0rwBGLQV1&is_archived=false"
)

# Return list of projects
labii.Project.list()

modify​

编辑一个对象。

  • sid,对象的 SID。
  • data (dict),用于提交的 JSON 字典数据。更多信息请参阅 https://docs.labii.com/api/methods
  • query (可选),附加查询以限制结果。
# modify the name of a project
labii.Project.modify(
sid="psvy0a40x18c0rwBGLQV1",
data={"name": "new name"}
)

delete​

删除一个对象。

  • sid,对象的 SID。
  • query (可选),附加查询以限制结果。
信息

并非所有对象都可以被删除。如果对象无法删除,将显示 405 错误。

# remove the permission of a user
labii.ProjectMember.delete("psvy0a40x18c0rwBGLQV1")

文件操作​

Labii 还开发了一些功能,以方便文件上传。

upload​

将文件上传到 Labii。

  • file_path,文件的完整路径。
  • projects,格式为 [{"sid": "project__sid"}] 的项目列表。
# upload a file
from labii_sdk.sdk import LabiiObject
labii = LabiiObject(api_key="xxx", organization__sid="xxx")
file_record = labii.upload("/tmp/test.txt", [{"sid":"xxx"}])

watch_folder​

您可以使用此功能监视特定文件夹。一旦文件存在,该功能将上传每个文件到 Labii,并将文件移动到 "uploaded" 子文件夹。此功能允许您自动上传由机器/设备生成的文件。

信息

使用此功能需要版本 1.9 或更高版本。

  • folder_path,必需,要监视的文件夹(包括路径),默认为当前路径。
  • projects,必需,格式为 [{"sid": "project__sid"}] 的项目列表。
  • interval,可选,检查文件夹的时间间隔,默认为 5 秒。
// Watch a results folder
from labii_sdk.sdk import LabiiObject
labii = LabiiObject(api_key="xxx", organization__sid="xxx")
labii.watch_folder(folder_path="./results", [{"sid":"xxx"}])

其他​

切换组织​

使用此功能可以无缝切换到不同的组织。这在从测试组织切换到生产组织时特别有用。

// switch organization
from labii_sdk.sdk import LabiiObject
labii = LabiiObject(api_key="xxx", organization__sid="xxx")
labii.switch_organization(organization__sid)

获取列​

在生成新记录时,通常需要列 SID 来准备数据对象。在 Python 中,获取数组中对象的索引并不总是简单的任务。因此,我们开发了此功能,以简化使用 Labii SDK 进行编码的过程。

from labii_sdk.sdk import LabiiObject
labii = LabiiObject(api_key="xxx", organization__sid="xxx")

# get sample table
table = labii.Table.list(query="name_singular=sample", serializer="name")["results"][0]
columns = labii.get_columns(f"table__sid={table['sid']}&name__in=volume,concentration,storage")
print(columns)

{
"volume": "70cf0a40x459cb9dinsxCH",
"concentration": "9beh0a40x459cdafkpuzEJ",
"source_samples": "0cfi0a40x459cebglqvAFK",
"storage": "behk0a40x459d0dinsxCHM",
"storage_coordinates": "cfil0a40x459d1ejotyDIN"
}