やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

GitHubアップローダのアカウント登録CUI起動シーケンスを考えてみた2

2回目。

前回まで

10/11、http://ytyaru.hatenablog.com/entry/2017/10/11/000000
10/25、http://ytyaru.hatenablog.com/entry/2017/10/25/000000

前回、仮実装してみた。

python3 GitHubUploader.py account -u username -p password -m mailaddress -s ssh_public_key_file_path

今回

いろいろ考えると、前回のでは機能不足かもしれない。

実行形態について考えてみた

アップローダ起動。

python3 hub.py upload -u "GitHubUsername" -d "リポジトリ説明文" -l "http://リポジトリHomepage"

以下、アカウント関係。

  1. CUIによる対話で登録する
python3 hub.py account cui -u "GitHubUsername" -p "password" -m "mail@address.com"
  1. 対話なしで自動登録する
python3 hub.py account auto -u "GitHubUsername" -p "password" -m "mail@address.com"
  1. 一括処理
python3 hub.py account tsv "filepath.tsv"
  1. 編集
python3 hub.py account edit

サブコマンドがネストしてウザい。

アカウント操作機能を独立させる

アップローダと別にする。

ファイル名 略名 機能
GitHubUploader.py hup.py GitHubリポジトリをアップロードする。
GitHubAccountManager.py ham.py GitHubアカウントを管理する。
  1. CUIによる対話で登録する
python3 ham.py cui -u "GitHubUsername" -p "password" -m "mail@address.com"
  1. 対話なしで自動登録する(insert, delete, update)
python3 ham.py insert -u "GitHubUsername" -p "password" -m "mail@address.com"
  1. 一括処理
python3 ham.py tsv "filepath.tsv"
  1. CUI編集
python3 ham.py edit

編集はアカウントDBの閲覧や変更をするCUI。SQLite3を操作すればできることだが、CUI対話だけで簡単に修正できるようにしたい。

edit,cui,autoなどコマンドがわかりにくい。そもそも、アカウントを管理できるのはGitHubサイト管理者だけ。

アカウントの全体管理と1ユーザ単位操作を独立させる

ファイル名 略名 機能
GitHubUploader.py hup.py GitHubリポジトリをアップロードする。
GitHubUserRegister.py hur.py GitHubアカウントを登録する。
GitHubUserEditor.py hue.py GitHubアカウントDBを操作する。

GitHubUserRegister.py

サブコマンドありとなしの2パターンが考えられる。

サブコマンド 説明
なし コマンド短縮できるが、意図しない動作になるかもしれない。
あり コマンドどおりの動作になる。

「あり」を採用する。

サブコマンドなし

引数 説明
なし 新規登録。ユーザ名の入力から開始するCUI起動。
ユーザ名のみ ユーザ名が既存なら削除。ないなら新規登録。
ユーザ名以外もある ユーザ名が既存なら編集。ないなら新規登録。
python3 GitHubUserRegister.py
python3 GitHubUserRegister.py -u "GitHubUsername"
python3 GitHubUserRegister.py -u "GitHubUsername" -p "password" -m "mail@address.com"

-autoフラグ引数があるときは、CUIでなく自動実行される。

python3 GitHubUserRegister.py -auto -u "GitHubUsername" -p "password" -m "mail@address.com"

-tsv引数があるときは、CUIでなく自動実行される。1アカウントだけでなく、複数アカウントを一括処理できる。 -tsv引数があるときは他の引数があっても無視してTSV一括挿入のみ実行される。

python3 GitHubUserRegister.py -tsv "accounts.tsv"

マージ方法をどうするか。

  1. まだないアカウントだけ新規挿入する
  2. 既存ユーザ名ならそのアカウントの他の値を変更する
  3. 既存ユーザ名とそれ以外の値が空値だったらそのアカウントを削除する
python3 GitHubUserRegister.py -tsv "accounts.tsv" -marge "insert,update,delete"

-methodまたは-marge引数にてA,B,C任意の処理を組合せパターンで指定できる。デフォルトは-method "insert"。既存ユーザ名のがあっても無視する。

既存アカウントをすべて削除し、完全にTSVの内容と一致させるdrop-createも用意してもいいが、危険すぎる。

もっと複雑な更新パターンもあるが、難しそうなので却下。

  • 既存ユーザ名ならそのアカウントの他の値を変更する(値が空値のときのみ。update-null
  • 既存ユーザ名ならそのアカウントの他の値を変更する(指定アカウントの指定列の値が指定値のときのみ。)

サブコマンドあり

ヘルプが表示される。

python3 GitHubUserRegister.py

登録する。引数の分だけCUI入力を省ける。既存ユーザ名ならメッセージ通知して終了する。

python3 GitHubUserRegister.py insert -u "GitHubUsername" -p "password" -m "mail@address.com"

削除する。ユーザ名がなければ全ユーザ分削除する。危険なのでコマンドを作らないほうがいいかもしれない。

python3 GitHubUserRegister.py delete -u "GitHubUsername"

変更する。指定したユーザ名に紐づく各データを変更する。パスワード変更したときにDBも変更するときなどに使う。変更しない項目は引数不要。

python3 GitHubUserRegister.py update -u "GitHubUsername" -p "password" -m "mail@address.com"

-autoフラグ引数があるときは、CUIでなく自動実行される。delete -autoが危険すぎる。

python3 GitHubUserRegister.py [insert,delete,update] -auto -u "GitHubUsername" -p "password" -m "mail@address.com"

TSVファイルから一括登録する。

python3 GitHubUserRegister.py tsv "accounts.tsv"
python3 GitHubUserRegister.py tsv "accounts.tsv" -marge "insert,update,delete"

GitHubUserEditor.py

GitHubアカウントを編集するCUI

必要なのか疑問。GitHubUserRegister.pyで足りる。

  • アカウント一覧表示
  • 一覧から選択して編集、削除

ただのDB操作。GitHubAPIも使わないと思う。SQLite3でSQL操作すれば解決できることしかしない。 SQLどころかGitHubUserRegister.pyupdate,deleteコマンドさえも使いたくない人向け。

Username Password MailAddress SSH-File-Path 2FA-Secret 2FA-Recovery-Code残数 2FA-Recovery-Code有効期限
user1 pass1 mail1@addr.com ~/.ssh/github_com_user1.pub 16個1回限り 1年間有効
user2 pass2 mail2@addr.com ~/.ssh/github_com_user2.pub 16個1回限り 1年間有効
user3 pass3 mail3@addr.com ~/.ssh/github_com_user3.pub 16個1回限り 1年間有効

アカウントごとに以下の操作をCUIでする。

余裕があればプロフィールも編集できるか調査。

所感

作り直し。