我要提问
ARTICLE DETAIL

资讯详情

前沿编程新知与开发实战干货的深度解读。

scientific-agent-skills 中的 DNAnexus 数据操作实战:dx CLI 与 dxpy 的传输、检索、元数据与删除安全框架

scientific-agent-skills 中的 DNAnexus 数据操作实战:dx CLI 与 dxpy 的传输、检索、元数据与删除安全框架 scientific-agent-skills 中的 DNAnexus 数据操作实战dx CLI 与 dxpy 的传输、检索、元数据与删除安全框架【免费下载链接】scientific-agent-skillsTurn any AI agent into an AI Scientist. The #1 Agent Skills library for science, used by 190,000 scientists worldwide. 165 ready-to-use validated skills plus 100 scientific databases covering biology, chemistry, medicine, and drug discovery. Compatible with Cursor, Claude Code, Codex, Pi, Antigravity, and the open Agent Skills standard.项目地址: https://gitcode.com/GitHub_Trending/cl/scientific-agent-skills本文基于 scientific-agent-skills 仓库中dnanexus-integration技能的核心参考文档># 独立 CLI 环境推荐隔离安装 uv tool install dxpy0.410.0 dx --version # 项目内 Python 依赖 uv add dxpy0.410.0认证建议交互式使用dx login自动化场景通过密钥管理器注入名为DX_SECURITY_CONTEXT的环境变量其值必须是 JSON 文本形如{auth_token_type: Bearer, auth_token: ...}详见 authentication.md。配置解析优先级为命令行覆盖 环境变量 ~/.dnanexus_config/environment.json 内置默认值——这意味着残留的 shell 环境变量会覆盖后来的dx login诊断时应只用dx whoami/dx pwd等非密命令。动手前建议做只读预检SKILL.md 中的 Safe Preflight 段落dx --version dx whoami dx pwd dx ls2. 安全模型变更前的六步预检DNAnexus 的数据对象存放在项目project或其他数据容器中。文档将“名字与路径只是人类友好的表示不是不可变标识符自动化必须用 ID”作为总原则并要求任何变更前执行六步流程data-operations.md将项目名解析为project-...形式的不可变 ID将每个路径解析为对象 ID检测重名duplicate names——同名不代表同一对象检查对象状态state、归档状态archivalState、大小与相关元数据确认源/目标的权限与限制access level、下载限制、TRE 策略对删除、克隆、归档、数据外发egress等操作向用户展示精确 ID 与影响面后再执行。这条安全模型与 SKILL.md 的 Operating Contract 一致从只读开始、对计费/破坏性操作先确认、绝不从非唯一名字推断删除目标、永不打印或记录DX_SECURITY_CONTEXT与 API token。3. 对象生命周期open → closing → closed文件对象使用三态生命周期data-operations.mdopen → closing → closedopen分片/内容仍可上传closing收尾进行中内容不可读不可写closed内容不可变可下载/分享。关键操作约束文件必须closed才能被读取或克隆。open/closing状态的文件可以作为 job 输入提交但 job 会停留在waiting_on_input直到文件关闭。open/closing文件若约 24 小时无活动会被视为废弃随后被平台删除——上传后不及时 close 是数据丢失的常见原因。关闭时内容连同 types、details/links、可见性一起固化但用户可编辑的元数据name、properties、tags仍可按权限管理。Record可以在需要可变结构化 details 时有意保持 open但文档强调这属于例外open record 会削弱可复现性必须在文档中声明该例外。4. 传输工具选型文档给出的选型矩阵data-operations.md工作负载工具单个或少数小文件dx upload、dx download多文件或单个大于 50 MB 的文件Upload Agentua大量/大体积/长时下载Download Agentdx-download-agent自定义 Python 自动化dxpy官方建议在超过 50 MB 时使用 Upload Agent凡是分片完整性校验与断点续传重要的场景都应使用平台传输代理而非自己拼 HTTP 请求。5. 小规模传输dx upload / dx download上传附带属性与标签见>dx upload sample.fastq.gz \ --path project-xxxx:/raw/sample.fastq.gz \ --property sample_idS001 \ --tag raw下载dx download project-xxxx:/results/sample.bam \ --output sample.bam三条实操纪律始终使用带引号的完整路径project-xxxx:/folder/name名字不唯一时改用对象 ID。脚本化场景使用--brief或机器可读输出不要解析人类格式化的表格。当前版本dx在下载或生成下载 URL指向被标记为恶意的文件时会发出警告。文档将其定义为停止条件除非用户批准一套防止执行并保护本地系统的遏制流程否则不要继续。这与 SKILL.md “Current Platform Guidance” 中“恶意文件警告视为停止条件”的表述一致对应的平台能力是 2026-06-09 起文件下载 API 暴露securityStatus字段见 sources.md 的基线变更列表。6. Upload AgentuaUpload Agent 是可断点续传的并行连接上传器。文档列出的关键行为data-operations.md需要逐条理解未压缩文件默认会被压缩远端文件名自动追加.gz已压缩输入不会被二次压缩--do-not-compress保留原始字节与命名行为字节级保真场景必须加重复执行相同命令会续传匹配中的未完成传输——这就是“同一命令可重入”的幂等性--wait-on-close阻塞直到上传的文件对象完成 close平台对每个分片校验Content-MD5。标准示例ua \ --project project-xxxx \ --folder /raw \ --wait-on-close \ --progress \ sample.fastq.gz必须原样保留字节与文件名例如参考基因组时ua \ --project project-xxxx \ --folder /raw \ --do-not-compress \ --wait-on-close \ reference.fa两个安全要点不要在捕获输出中运行ua --env它会打印当前 token。同理任何 Upload Agent 的--auth-token值与DX_SECURITY_CONTEXT都应按秘密处理authentication.md 明确禁止打印/记录/提交 token 材料。--do-not-resume只应在你有意制造第二份副本时使用否则应让代理自动续传中断的上传。7. Download AgentDownload Agent 消费BZIP2 压缩的 JSON manifest。文档要求manifest 由官方dnanexus/dxda发布包中的 manifest 生成工具产出并在启动数据外发egress前审阅其解析出的文件集合。凭据行为有一个容易混淆的点Download Agent 检查秘密变量DX_API_TOKEN缺失时回落到~/.dnanexus_config/environment.json。这是 Download Agent 专属变量不要假设它能为 Upload Agent、dx或dxpy提供配置——dx/dxpy消费的是DX_SECURITY_CONTEXTauthentication.md 的“tool-specific variable names”一节给出了完整的变量名对照。dx-download-agent download manifest.json.bz2 dx-download-agent progress manifest.json.bz2 dx-download-agent inspect manifest.json.bz2inspect会用 manifest 中的校验和重新验证已下载分片若分片缺失或损坏重跑download即可可续传。大下载前的检查清单文档原文六项全部保留确认本地可用磁盘空间确认数据外发的审批与费用确认下载限制 / TRE 策略确认所有文件为live且closed归档或开放中的文件无法按预期下载;审阅 manifest 中是否有意外项目或 PHI 数据使用一个在预期传输时长内保持有效的 token未显式设置过期的 token 默认一个月失效且撤销 token 会立即终止其关联的进行中传输与 job。最后一条运维红线不要把 API token 放进 Docker 命令行或已提交的 compose 文件。8. Python 传输dxpy 上传、下载与流式读取完整示例data-operations.mdfrom pathlib import Path import dxpy project_id project-xxxx remote dxpy.upload_local_file( sample.fastq.gz, projectproject_id, folder/raw, properties{sample_id: S001}, tags[raw], wait_on_closeTrue, show_progressTrue, ) dxpy.download_dxfile( remote, str(Path(downloads) / sample.fastq.gz), projectproject_id, show_progressTrue, )结合 python-sdk.md 中记录的 0.410.0 已验证签名可以补充参数细节upload_local_file(filenameNone, fileNone, media_typeNone, keep_openFalse, wait_on_closeFalse, use_existing_dxfileNone, show_progressFalse, write_buffer_sizeNone, multithreadTrue, **kwargs)——filename与file二选一wait_on_closeTrue在下一步依赖 closed 对象如提交 job 输入、克隆时尤其有用下载侧的project参数不只是路由提示它影响计费/上下文归属当同一文件在多个项目中存在副本、或计费上下文重要时必须显式传入。流式读取远端文件import dxpy with dxpy.open_dxfile(file-xxxx, projectproject-xxxx) as stream: first_chunk stream.read(1024)这里有一个历史陷阱值得强调DXFile.open_file()不是当前 dxpy 的方法必须使用dxpy.open_dxfile()。这一点在 sources.md 的“Corrected Legacy Patterns”表中被列为已修正的遗留模式仓库还内置了离线自检脚本把它固化为检查项uv run --with dxpy0.410.0 \ skills/dnanexus-integration/scripts/inspect_dxpy.py --strict该脚本inspect_dxpy.py离线检查一组必需符号含dxpy.upload_local_file、dxpy.download_dxfile、dxpy.open_dxfile、dxpy.find_data_objects等与各 handler 关键方法DXFile.clone、DXProject.list_folder等并在--strict模式下于基线不满足时以非零码退出报告中还包含DXFile.open_file的遗留探测项。它不认证、不发网络请求适合在升级 dxpy 后先跑一遍再改代码其报告整形与版本比较逻辑由 test_scripts.py 的单元测试覆盖。9. 搜索dx find data 与 find_data_objects9.1 CLIdx find data \ --class file \ --path project-xxxx:/results \ --name *.bam \ --name-mode glob当前安装的 toolkit 的过滤标志以dx find data --help为准——这是文档对版本漂移的明确免责声明。9.2 dxpyimport dxpy results dxpy.find_data_objects( classnamefile, projectproject-xxxx, folder/results, recurseTrue, name*.bam, name_modeglob, stateclosed, archival_statelive, describe{ fields: { name: True, size: True, created: True, archivalState: True, properties: True, } }, limit500, ) for result in results: print(result[id], result[describe][name])python-sdk.md 中记录的find_data_objects已验证签名与文档的“Critical semantics”合起来给出六条必须牢记的语义name_mode默认是exact——直接传*.bam而不加name_modeglob是最高频的错误glob支持*与?regexp只允许经过评审、边界受控的模式结果返回的是生成器dxpy 内部处理 API 分页不传limit时会一直翻页直到遍历完整结果集宽泛搜索务必用项目/文件夹/时间范围/limit收敛describe会额外消耗 API 调用且可能暴露元数据只请求需要的字段describeTrue返回完整默认描述字段映射更安全archival_state过滤要求 file 类对象并提供 project/folder 作用域tags语义为“同时具有全部指定标签”旧参数tag已弃用时间戳参数接受 epoch 毫秒、相对现在的负毫秒数、以及-2d、-1w形式的相对字符串。服务限流方面文档引用了平台文档的两个数字API 默认每页最多1000条账号级200 次 API 调用/秒的上限。因此批量脚本应实现有界并发与指数退避而不是压垮服务。10. 元数据properties 与 tagsproperties 是字符串键值对tags 是字符串集合data-operations.mdimport dxpy file_obj dxpy.DXFile(file-xxxx, projectproject-xxxx) file_obj.set_properties( { sample_id: S001, pipeline_version: 2.4.1, } ) file_obj.add_tags([validated, release-2026-07]) file_obj.rename(S001.aligned.bam)两条治理约束项目包含 PHI 时避免在 tags/properties 中写入直接标识符遵循组织批准的元数据模型元数据更新直接影响检索与溯源。set_properties/set_details是整体替换语义replace而非 merge覆写前必须审阅共享 open record 上避免读-改-写竞争python-sdk.md 也重申了这一点。DXFile的set_properties、add_tags、rename、clone、move、close均在本仓库 inspect_dxpy.py 的METHOD_GROUPS中被列为基线必检方法升级 SDK 后可用--strict模式确认这些方法仍然存在。11. Records不可变审计记录与可变状态记录创建 closed 不可变记录推荐默认import dxpy record dxpy.new_dxrecord( projectproject-xxxx, folder/metadata, namerun-001, types[RunMetadata], details{ pipeline: rna-seq, pipeline_version: 2.4.1, }, closeTrue, )仅在确实需要持续变更时才创建 open recordrecord dxpy.new_dxrecord( projectproject-xxxx, namemutable-status, details{state: queued}, closeFalse, ) record.set_details({state: running}) record.close()close 之后 details 与 links 固化。对于 append-only 溯源场景文档给出的最佳实践是创建新的版本化记录而不是变更共享的 open record——这与第 10 节的替换语义互相印证。12. Folders创建、列举与移动import dxpy project dxpy.DXProject(project-xxxx) project.new_folder(/analysis/run-001/results, parentsTrue) listing project.list_folder( /analysis/run-001, describe{fields: {name: True, state: True}}, )移动操作按精确 ID 进行project.move( /analysis/run-001/final, objects[file-xxxx, record-yyyy], )纪律在把文件夹列表与数量展示给用户之前绝不执行宽泛的递归操作。DXProject的describe、list_folder、new_folder、move、remove_objects、remove_folder同样在 inspect_dxpy.py 的基线检查范围内。13. 克隆跨项目复制的权限与限制import dxpy source dxpy.DXFile(file-xxxx, projectproject-source) clone source.clone( projectproject-destination, folder/imports, ) print(clone.get_id())文档列出的要求与陷阱data-operations.md每一条都对应一个真实失败场景源对象必须closed源项目需要VIEW及以上权限目标项目需要UPLOAD及以上权限等级定义见 authentication.md 的认证失败检查表受限项目/TRE 可以禁止克隆数据库database不可克隆隐藏的 linked 对象可能随可见父对象一起被克隆——影响面比看到的更大归档状态迁移可能阻塞克隆跨billTo克隆归档数据要求对象为 live克隆是独立副本删除源不影响克隆。当文件夹结构是第一接口时用dx cp做项目间复制dx cp \ project-source:/results \ project-destination:/imports执行前先确认源、目标、文件数量、计费实体。14. 归档与解归档dx archive/dx unarchive是计费/存储相关且可能耗时较长的操作dx archive project-xxxx:/old-results/sample.bam dx unarchive project-xxxx:/old-results/sample.bam归档前检查三件事活跃工作流/协作者/已发布产物是否还需要它所有副本与计费行为目标是文件还是预期文件夹。解归档前检查取回费用与必须的完成时限文件回到live之前不要启动依赖它的 job。编程接口是dxpy.api.project_archive()与dxpy.api.project_unarchive()但文档明确建议一次性、需要人工审阅的操作优先用 CLI。15. 删除不可逆操作的安全序列数据删除在平台侧不可逆且删除可见对象可能连带删除孤立的 hidden linked 对象。文档给出的安全序列data-operations.md列出精确 ID逐个 describe 对象确认项目、文件夹、大小、状态与 linked 对象影响请求用户确认按 ID 删除验证对象不存在并在被删数据之外记录审计条目。项目级保护是独立于对象删除的三层控制protectedtrue项目内数据删除限定为项目管理员false时 contributor 也可删除destroyProtectedtrue无论请求者权限如何阻止整个项目被销毁直到授权管理员清除项目销毁移除全部对象有活跃 job 时会失败除非terminateJobstrue强制终止它们。文档特别警告绝不把清除destroyProtected、设置terminateJobstrue或销毁项目当作对象删除请求的隐含延伸——每一项都需要在列出活跃 job、项目保护、计费上下文与总数据影响之后单独获得显式授权。Python 删除 APIimport dxpy project dxpy.DXProject(project-xxxx) project.remove_objects([file-xxxx], forceFalse)递归文件夹删除project.remove_folder(/obsolete/run-001, recurseTrue, forceFalse)文档原文对它的定性是危险的“递归删除/会删掉容器全部内容永远不要生成或执行该操作。”另有一个容易被忽略的 API 限制单次文件夹删除请求最多移除 10,000 个对象不要自动循环“删一批”而不重新核对剩余范围。项目删除、权限变更与委托overrideProjectAccess删除同样需要单独的显式授权。python-sdk.md 还补充了一条工程准则不要用forceTrue来掩盖目标解析错误。16. 批量操作检查清单文档收尾的清单data-operations.md是批量脚本的验收标准十条全部保留限制结果数量与并发度变更前将目标 ID 列表物化并审阅保留机器可读的 manifest源 ID 与目标位置让操作可重启/幂等Upload Agent 的同命令续传正是此原则的体现;不把重名当作同一对象上传后检查文件状态是否已 closed校验传输完整性Upload Agent 的分片 Content-MD5、Download Agent 的inspect捕获失败但日志中不得出现凭据或敏感元数据对账完成、跳过、失败三类 ID 分别核对尊重服务限制并使用指数退避。17. 仓库内的验证资产本篇引用行为均有仓库内证据链可按路径继续深入资产路径作用本文主体文档skills/dnanexus-integration/references/data-operations.md传输/检索/元数据/克隆/归档/删除的权威操作指引技能总纲skills/dnanexus-integration/SKILL.md运行契约、预检流程、基线声明SDK 参考skills/dnanexus-integration/references/python-sdk.md0.410.0 已验证签名与异常模型版本与来源基线skills/dnanexus-integration/references/sources.md验证日期、组件版本、已修正的遗留模式认证参考skills/dnanexus-integration/references/authentication.mdtoken 处理、变量名对照、配置优先级SDK 离线自检skills/dnanexus-integration/scripts/inspect_dxpy.py无网络符号/签名检查--strict校验基线测试tests/dnanexus-integration/test_scripts.py校验器与 inspect 脚本逻辑的单元测试升级 dxpy 前后的标准动作来自 sources.md 的 Refresh Procedure核对 PyPI 版本 → 阅读平台发布说明 → 运行inspect_dxpy.py --strict→ 对比dx build/run/find的 help → 在沙盒项目实测代表性格式 → 更新日期与版本基线。不要仅凭记忆更新示例——这正是本仓库把基线日期、版本表和遗留模式修正表写入文档的原因。【免费下载链接】scientific-agent-skillsTurn any AI agent into an AI Scientist. The #1 Agent Skills library for science, used by 190,000 scientists worldwide. 165 ready-to-use validated skills plus 100 scientific databases covering biology, chemistry, medicine, and drug discovery. Compatible with Cursor, Claude Code, Codex, Pi, Antigravity, and the open Agent Skills standard.项目地址: https://gitcode.com/GitHub_Trending/cl/scientific-agent-skills创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表