成果物
GitHub.Upload.ByPython.Add.Database.Create.refactoring.GitHubApi.201703280740
開発環境
- Linux Mint 17.3 MATE 32bit
- SQLite 3.8.2
- Python 3.4.3
前回まで
http://ytyaru.hatenablog.com/entry/2017/10/09/000000
- GitHubAPIをHTTP要求する処理を共通化したい
今回
GitHubAPI部分を大幅に改修した。全体的に影響を受けている。インタフェースも変更された。
よくよく考えたら何もかも未完成なのでリファクタリングどころでは済まなかった。
課題
- HTTP要求の共通化
- ./database/src/license/insert/command/miscellaneous/Licenses.py
- 共通化できていない
- GitHub.Apis.sqlite3にLicenseAPIが入っていなかったから。いずれ追加して修正する
- 共通化できていない
- ./database/src/license/insert/command/miscellaneous/Licenses.py
問題
- HTTP要求の共通化により、コードが見づらくなった
- いちいち
GitHub.Apis.sqlite3
に問い合わせる必要が生じるようになった
バグ
初回DB作成時、GitHub.Accounts.sqliteにあるユーザごとにリポジトリ情報を取得することができない。
症状
- ユーザごとのDBファイルは生成されるが、データ内容がすべて起動引数で指定したユーザのリポジトリ情報になってしまう
原因
./dataset/src/Data.py
の下記コードにより、ユーザが指定できていなかったため。
以下のように./dataset/src/Create.py
でユーザごとにリポジトリDBを生成しようとする。self.data.set_username(account['Username'])
でユーザを指定しているが、これが設定できない。
Create.py
def __LoopAccounts(self, db, db_path): if not(os.path.isfile(db_path)): db['Creator'](db_path) self.data.load_db() default_user = self.data.get_username() try: for account in self.data.db_account['Accounts'].find(): print(account['Username']) db_path_new = db_path.replace("{user}", account['Username']) if not(os.path.isfile(db_path_new)): shutil.copyfile(db_path, db_path_new) self.data.set_username(account['Username']) print('{0}のリポジトリDBに挿入します------------------------------'.format(self.data.get_username())) print(db_path_new) self.data.db_repo = dataset.connect('sqlite:///' + db_path_new) db['Inserter'](db_path_new)
Data.py
def set_username(self, username): if None is not self.db_account['Accounts'].find_one(Username=username): self.user_name = username
AccountsDBを作成しようとしているので、まだAccountsテーブルは存在しない。if文にはじかれてユーザ名を指定できない。その結果、起動時に指定したユーザ名のままリポジトリ情報を取得し、ほかのユーザのDBにそのデータを入れてしまっている。
対策
初回時、アカウント登録CUIを表示し、DBに登録するようにする。
楽をしようとして今回のset_username()
を急造したが、有効なユーザ名を確実に入力させるためには、そのための処理を実装せねばならなかった。新たに機能を作らねばならないため大変。今すぐにはできない。
そもそもset_username()
はカプセル化的によろしくない。以下のような確認がとれたら有効なアカウントであると判断したい。
そのためには、それらの機能をイチから作る必要がある。
自力で対処
以下の対処を自力で行えば使える。しかし、それが面倒すぎてこのGitHubアップローダを使う気になれない。
- GitHubアカウント作成
- 有効なアカウント情報を自分で用意する
- AccessToken作成
- 必要なscopeが付いていること(repo, delete_repo)
GitHub.Accounts.sqlite3
の形式にあわせて登録する
- AccessToken作成
- SSH鍵
これまではずっとこのDBが存在することを前提にしてきたが、そもそもこれを作るのが大変。
初めてGitHubを使った時、これらの概念把握とセットアップにどれだけ苦労したことか。情弱にはハードルが高すぎる。
自動化不可
アカウント作成だけはGitHubのサイトでやるしかない。自動化できない。
しかも事前にメールアカウントの作成と、登録後、メール応答で有効アドレス確認をせねばならない。それだけで面倒だし情弱には(ry
所感
最近はずっとそうかもしれないが、今回も欠陥がある状態でのアップとなる。とりあえず、忘れないように、気づいた問題はすべて書き残しておく。