PipedreamでPythonistaに優しい(?)ワークフロー構築R
- author:
- Kazuya Takei / @attakei 
- date:
- 2022/10/15 
- event:
- PyCon JP 2022 LT in Official Party 
- hashtags:
はじめに
LTの趣旨
Pipedreamを使ってみた/皆さん使ってみて。
お前誰よ
 
Kazuya Takei / @attakei
- 趣味系Pythonista 
- Sphinxでプレゼンテーションをしたがる人 
Sphinxを通して考える、「拡張」の仕方
見てくれた方、ありがとうございました。
Pipedreamの話をします
Pipedream is 何
Pipedream is 何
- ワークフローSaaS 
- ワークフローって - 外部リソースなどをトリガーとして定義 
- トリガーに応じて順次アクションを実行 
 
Pipedream is 何
 
「PyPI上にあるパッケージの更新情報をRSSから拾ってツイートする」例
Pipedreamのライバル
- IFTTT 
- Zapier 
- Power Automate 
- (他にもいろいろ) 
ライバルとの違い?
アクションを自作出来る。( deepl_〜 は自作)
 
ライバルとの違い?
アクションを自作出来る。(実際の動き)
カスタムコードの対応言語
- Node.js 
- Golang 
- Bash 
- Python 
Pythonistaに優しい!
使用例
GitHubのアクティビティを集計するワークフローの一部
 
使用例
コード
from datetime import date
from python_graphql_client import GraphqlClient
def get_client(token: str) -> GraphqlClient:
  headers = {
    "Authorization": f"Bearer {token}"
  }
  return GraphqlClient(endpoint="https://api.github.com/graphql", headers=headers)
def handler(pd: "pipedream"):
  token = f"{pd.inputs['github']['$auth']['oauth_access_token']}"
  client = get_client(token)
  query = """
    query($username: String!, $date: DateTime) {
      user(login: $username) {
        contributionsCollection(from: $date, to: $date) {
          contributionCalendar {
            totalContributions
            weeks {
              contributionDays {
                contributionCount
                weekday
                date
              }
            }
          }
        }
      }
    }
  """
  variables = {
    "username": "attakei",
    "date": date.today().strftime("%Y-%m-%dT00:00:00"),
  }
  result = client.execute(query=query, variables=variables)
  print(result["data"])
  return {
    "date": date.today().strftime("%Y-%m-%d"),
    "contributions": result["data"]["user"]["contributionsCollection"]["contributionCalendar"]["weeks"][0]["contributionDays"][0]["contributionCount"]
  }
「GraphQLを使ってGitiHub APIからアクティビティを入手する」 Pythonコード を動かせる。
使用例
Q
ライブラリは? 
requirements.txt みたいなものは無いの?A
標準ライブラリにないものをインポートしようとしたら、ライブラリ名とみなしてPyPIから取ってくるみたいです。(雑な理解で)
課題感
たまに意味不明な失敗する。
 
- 正しいコードでも、微妙な頻度で失敗する。 
- アクションの実行環境周りに何かありそう。 
課題感
他には、
- 「RSSの管理をしくじって、RSS全部取り直し?」からの 
- 「RSSの全エントリーをトリガーにしてしまう」という大事件。 
=> FBすれば改善されるかも?
END
ワークフローSaaSもPythonで!
無料プランあるし、無料プランでもカスタムコードは動かせます