タイトルの通りですが、2019年1月末にチェンマイに行ってました。
チェンマイはご飯もうまいし治安もよい、観光名所も多い、さらにショッピングモールが多い上に遅くまでやっているという、一日中いろんなことして遊べる最高の観光地です。
良いとこだったよ!の紹介をしたいので、自分の記録も兼ねてまとめてみました。
続きを読むFile "/usr/local/lib/python3.6/site-packages/django/db/backends/mysql/base.py", line 15, in <module> import MySQLdb as Database ModuleNotFoundError: No module named 'MySQLdb'
使っているsettingファイルに、以下のコードブロックを挿入する。
import pymysql pymysql.install_as_MySQLdb()
Python3系でMySQLに接続するときに出るエラーとのこと。
ログが ModuleNotFoundError
を出すので、問題の本質を見失う…
Modelから取得したレコードをシリアライズするSerializerでは、入出力するkey(カラム)名が異なる場合、sourceオプションで入力元のカラム名を指定すればよい。
しかし、dictを整形したりvalidationしたいがためだけにSerializerを使う場合、これが逆にする必要があるようだった。
言い換えると、プロパティ名に入力key名、sourceオプションに出力key名を指定すれば実現可能。
from rest_framework import serializers class TestSerializer(serializers.Serializer): user_name = serializers.CharField(source='name') user_age = serializers.IntegerField(source='age')
data = { 'user_name': 'たろう', 'user_age': 24 } serializer = TestSerializer(data=data) serializer.is_valid() >>> True serializer.data >>> {'user_name': 'たろう', 'user_age': 24} serializer.validated_data >>> OrderedDict([('name', 'たろう'), ('age', 24)])
serializer.data
じゃなくて serializer.validated_data
を使うのも忘れずに。
serializer.data
は source -> property で
serializer.validated_data
は property -> source
になると考えると覚えやすい。
ちなみにエラーになるデータはこんな感じです。
data = { 'name': 'たろう', 'age': 24 } serializer = TestSerializer(data=data) serializer.is_valid() >>> False serializer.errors >>> {'user_name': [ErrorDetail(string='この項目は必須です。', code='required')], 'user_age': [ErrorDetail(string='この項目は必須です。', code='required')]}
この使い方の是非はしらない!
fail()
のようなメソッドが用意されているかと思ったけれど、ないっぽい。
https://stackoverflow.com/questions/42176642/in-jest-how-can-i-make-a-test-fail
StackOverflowおじさんたちは、テストを失敗させたいところで
throw new Error('failed');
としたり
expect(true).toBe(false);
としたりの力業に頼れと仰せだった。
Python慣れしていると微妙に不便。
throw
が一番現実的かな。
基本的なことなんだけど、この手のエラーに関する日本語の情報が少なかったので書き残し。
pythonでディレクトリを作るときは __init__.py
が必須。当たり前の話だけど初心者なのでちょっとハマった。
( __init__.py
がなくても動く場合があるからややこしいんだけど)
ない状態だと、同じ構成の名前空間が同一パッケージ内にあると衝突する。
例えば、
root_dir ├ package_name_A │ ├ views.py │ └ tests.py └ package_name_B ├ views.py └ tests.py
を
root_dir ├ package_name_A │ ├ views.py │ └ tests │ └ tests.py └ package_name_B ├ views.py └ tests └ tests.py
にしたいとき、それぞれの tests/
に __init__.py
を置かないと、
____________ ERROR collecting root_dir/package_name_A/tests/tests.py ____________ import file mismatch: imported module 'tests' has this __file__ attribute: C:\Users\user\Desktop\dir\root_dir\package_name_B\tests which is not the same as the test file we want to collect: C:\Users\user\Desktop\dir\root_dir\package_name_A\tests\tests.py HINT: remove __pycache__ / .pyc files and/or use a unique basename for your test file modules generated xml file: C:\Users\user\Desktop\dir\junit.xml
になる。
tests/tests.py
が2つあるので衝突する。
もしこれが
root_dir ├ package_name_A │ ├ views.py │ └ tests.py └ package_name_B ├ views.py └ tests └ tests.py
だったら問題なく動く。
ちょっと不思議。
8/3追記
一部プランで使用できるようになってました。
GitHub Proの人が作ったリポジトリ+Privateで確認。
一方GitHub Free+Privateはまだ未対応でした。ほかはよくわかりません。情報求む。
2/15ごろからGitHubにDraft pull requestという機能が追加されました。
WIPを付けたPRを立てなくてもいい!と期待の機能でしたが、
いざ使おうと思ったらそんなボタンがどこにも存在しない。
よく見ると、全リポジトリに対して開かれた機能じゃなかったようです。
Pull Requestのヘルプページ
https://help.github.com/articles/about-pull-requests/#draft-pull-requests
によると、
Draft pull requests are available in public repositories with GitHub Free and GitHub Pro, and in public and private repositories with GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server.
とのこと。
日本語でまとめると、利用可否は下記のようになっていると書いてあります。
GitHub Proかつプライベートリポジトリでもダメとは。悲しみ…
自分の業務では恩恵に預かれませんでした。
対象リポジトリの拡張を待ちます。頑張ってGitHub先生…
1. 再初期化
2. ようこそ画面でID登録
3. AppStoreからEl Capitanインストール
4. Mojaveをインストール
※一度El Capitanを挟んだのは、10.7から直接Mojaveにバージョンアップできないため。
Mojaveに直接アップデートできるのは10.8以降。
Apple公式でのQAを見るに、10.8.5以前のMacOSはSSL周りが死んでるらしい。おそらくこれが原因
https://discussionsjapan.apple.com/thread/110210266?answerId=101111151122#101111151122
とりあえずMacは困ったら初期化