[Boto3 Adv-Cal DAY23]modelデータをJSONから直接開いて参照してみる

boto3 で楽しむ AWS PythonLife 一人AdventCalendarです。23日目はBotocoreのモデルデータが収まっているJSONファイルを利用して、調査等に手軽に使える手段を模索してみました。
2018.12.23

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

boto3 で楽しむ AWS PythonLife 一人AdventCalendarです。

boto3のドキュメントを通して、サービス別にどういった事が出来るのかを理解したり、管理コンソールを通さずにTerminalだけで完結できるように検証していくことが目的になります。

23日目はBotocoreのJSONデータを直接開いて手軽に確認する方法を模索してみました。

BotocoreのJSONデータ

API追加等が行われる際には更新が入ります。ただし、中の文字列はSnakeCase対処がされており、直接の補完利用が効きづらくなっています。

中身の直参照

前回、例外Classを確認する為の検証を行いましたが、データを直接開いてしまえば若干手間が省けるのではないかと考えました。

リポジトリからサービスを指定して、該当フォルダに限定した上でmodel用のjsonを指定し、APIのKeyに絞って取得します。

% git grep --name s3 botocore/data | grep data/s3/ | grep service-2 | head -1 | xargs cat - | jq '.operations'
{
...
  "UploadPart": {
      "name": "UploadPart",
      "http": {
              "method": "PUT",
                    "requestUri": "/{Bucket}/{Key+}"
  },
  "input": {
          "shape": "UploadPartRequest"

  },
  "output": {
          "shape": "UploadPartOutput"

  },
      "documentationUrl": "http://docs.amazonwebservices.com/AmazonS3/latest/API/mpUploadUploadPart.html",
          "documentation": "<p>Uploads a part in a multipart upload.</p> <p> <b>Note:</b> After you initiate multipart upload and upload one or more parts, you must either complete or abort multipart upload in order to stop getting charged for storage of the uploaded parts. Only after you either complete or abort multipart upload, Amazon S3 frees up the parts storage and stops charging you for the parts storage.</p>"
},
  "UploadPartCopy": {
        "name": "UploadPartCopy",
        "http": {
                "method": "PUT",
                      "requestUri": "/{Bucket}/{Key+}"
    },
    "input": {
            "shape": "UploadPartCopyRequest"

    },
    "output": {
            "shape": "UploadPartCopyOutput"

    },
        "documentationUrl": "http://docs.amazonwebservices.com/AmazonS3/latest/API/mpUploadUploadPartCopy.html",
            "documentation": "<p>Uploads a part by copying data from an existing object as data source.</p>"
    }
}

特定のオペレーションにしぼりたい場合は、以下のようになります。関数名指定がSnakeCaseになるところだけ難点です。

% git grep --name s3 botocore/data | grep data/s3/ | grep service-2 | xargs cat - | jq '.operations.UploadPartCopy'
{
    "name": "UploadPartCopy",
      "http": {
            "method": "PUT",
                "requestUri": "/{Bucket}/{Key+}"
  },
  "input": {
        "shape": "UploadPartCopyRequest"

  },
  "output": {
        "shape": "UploadPartCopyOutput"

  },
    "documentationUrl": "http://docs.amazonwebservices.com/AmazonS3/latest/API/mpUploadUploadPartCopy.html",
      "documentation": "<p>Uploads a part by copying data from an existing object as data source.</p>"

}

まとめ

データがJSONに収められていることが要因で補完が効きづらいことを対処する方法を模索した結果、「とりあえず該当するJSONデータを直接開いてみたら多少はどうにかなるんじゃないか」という、若干安直な考えをやってみました。documentationUrlが表示される部分だけ救いだと感じました。

また、vimでは仕組み上jediがうまく機能していませんが、PycharmであればPyboto3を使うという手段もあり、目的に応じてエディタを変えることも一つの方法かもしれません。