#hypothesis #annotations #api-bindings #api #web-api

bin+lib hypothesis-rs

hypothesis 的分支,修复了一些问题

1 个不稳定版本

0.11.0 2022 年 8 月 13 日

#10#注解

MIT 许可证

71KB
1K SLoC

Crates.io Docs.rs CI GitHub release dependency status

为 Hypothesis 提供的 Rust API

描述

这是一个针对 Hypothesis Web API v1.0.0 的轻量级包装器和 CLI。它包括与注释(创建/更新/删除/搜索/获取/标记)

  • (创建/更新/列表/获取/离开/成员)
  • 个人资料(用户信息/组)
  • 相关的所有 APIKey 授权端点。

安装和使用

授权

您需要一个 Hypothesis 账户,以及通过以下链接获取的个人 API 令牌:此处。将环境变量 $HYPOTHESIS_NAME$HYPOTHESIS_KEY 分别设置为您的用户名和开发者 API 密钥。

作为命令行工具

cargo install hypothesis

运行 hypothesis --help 查看子命令和选项。注意:CLI 当前尚未具备 Rust crate 的所有功能,特别是批量操作和更新日期不受支持。

生成 shell 完整性

hypothesis complete zsh > .oh-my-zsh/completions/_hypothesis
exec zsh

作为 Rust 包

将其添加到您的 Cargo.toml 中

[dependencies]
hypothesis = {version = "0.4.0", default-features = false}
tokio = { version = "0.2", features = ["macros"] }

示例

use hypothesis::Hypothesis;
use hypothesis::annotations::{InputAnnotation, Target, Selector};

#[tokio::main]
async fn main() -> Result<(), hypothesis::errors::HypothesisError> {
    let api = Hypothesis::from_env()?;
    let new_annotation = InputAnnotation::builder()
            .uri("https://www.example.com")
            .text("this is a comment")
            .target(Target::builder()
               .source("https://www.example.com")
               .selector(vec![Selector::new_quote("exact text in website to highlight",
                                                  "prefix of text",
                                                  "suffix of text")])
               .build()?)
           .tags(vec!["tag1".to_string(), "tag2".to_string()])
           .build()?;
    api.create_annotation(&new_annotation).await?;
    Ok(())
}

请参阅 API 结构的文档(Hypothesis)以获取可能的查询列表。使用批量函数执行多个操作 - 例如,使用 api.fetch_annotations 而不是循环调用 api.fetch_annotation

请参阅 文档 了解更多使用示例。

变更日志

请参阅 变更日志

贡献

请确保您在存储库根目录中有一个 .env 文件(已添加到 .gitignore),其中包含 HYPOTHESIS_NAME、HYPOTHESIS_KEY 和 TEST_GROUP_ID

注意事项 / 待办事项

  • 仅支持 APIKey 授权和 hypothes.is 权限(即单个用户)。
  • Target.selector.RangeSelector似乎没有遵循W3C标准。目前它只是一个hashmap。
  • Annotation超媒体链接以hashmap的形式存储,因为我不知道所有可能值。
  • 需要弄清楚Document如何工作,以便正确地记录它(哈哈)。
  • 创建后无法删除一个组,但可以保留它(也许这是同一件事?)
  • 不清楚UserProfile.preferencesUserProfile.features的含义。
  • CLI只是将输出作为JSON打印,这行吗?更高级的CLI可以在此基础上构建(或直接使用crate)

依赖项

~8–22MB
~314K SLoC