Python

DjangoでLOGGING設定をしているときに、IPythonの補完に不具合が出る場合の対処

Djangoに限ったことではないのですが、PythonのloggingでrootのハンドラをDEBUGにしていると、IPythonの補完を実行した際にparsoという依存ライブラリのログが出てしまい、カーソル位置がずれてしまうことあります。 例えば、Djangoで以下のように settings.…

DjangoのSubqueryとOuterRefを使ってサブクエリを組み立てる

DjangoのORMで、サブクエリを使う方法について。任意のSQLであればrawメソッドを使えばよいのですが、なるべくORMのAPIを使いたい。 DjangoのORMでは任意の位置にサブクエリを使えるわけではないですが、例えば「テーブル単位での問い合わせ結果にサブクエリ…

Djangoのマイグレーションでスキーマ変更とデータ変更を分けたほうがよいか

Djangoのマイグレーションは、1つのマイグレーションで複数のタスクを実行できます。 スキーマを変更する処理のあとに、データのマイグレーションを実行、といったようなものです。 意味のある変更をまとめるのは便利そうに思えるのですが、落とし穴があった…

GoogleAppEngine上で動作しているDjangoアプリをStackdriver Debuggerでデバッグする

AppEngineで動かしてるDjangoアプリをStackdriver Debuggerでデバッグする手順について。 Python 用 Stackdriver Debugger の設定 | Stackdriver Debugger のドキュメント | Google Cloud ドキュメントには、Django 1.Xの話しかなく、手順も良くなかったので…

GoogleAppEngine上でDjangoフレームワークのログをStackdriver Loggingに流す

PythonのloggingモジュールからStackdriverにログを流す手順はドキュメントに書かれている。 Setting Up Stackdriver Logging for Python | Stackdriver Logging | Google Cloud Djangoフレームワークを使っている場合は、Djangoのロギング設定を考慮する必…

Djangoのデータベースルーターのallow_migrateの挙動について

Djangoフレームワークでは、データベースルータークラスを作成して、 settings.DATABASE_ROUTERS に設定することで、モデル毎に使用するデータベースを変えたりできます。 データベースルーターにはいくつかのメソッドを実装しますが、その中の一つ、 allow_…

AWS IoT エンタープライズボタンを試してみる

AWS IoT エンタープライズボタンは、AmazonのDashボタンの汎用のやつ。 IoTボタン www.amazon.co.jp ボタンを押した際にEメール送信、SMS送信、Lambda関数の実行などを設定できる。 ボタンの動作にはWifiネットワークが必須となっている。初期セットアップは…

Python3.7+Django2.1のアプリケーションをGoogleAppEngine/Standard環境にデプロイする

GoogleAppEngineのStandard環境でPython3.7のランタイムがベータ版で利用できるようになったので、試していました。 ドキュメントにはFlaskアプリケーションをデプロイする手順が記載されていましたが、Djangoアプリケーションだと少し設定が追加で必要だっ…

PythonでQRコードのSVGを生成する

PythonでQRコードのSVGを作るには、qrcodeモジュールを使えば簡単でした。 pypi.org Python3.6で試しました。 pip install qrcode SVGとPNG(pymaging-png)はPure Pythonのモジュールだけで生成できるようです。 PILでPNGを生成させることもできるようです。 …

DjangoフレームワークとVue.js (Vuex)を使ってアプリケーションを作る

以前作成した DjangoフレームワークとVue.jsを使ってアプリケーションを作る - 偏った言語信者の垂れ流し の、Vuex対応版です。 よかったらGitHubでStarをつけてください! github.com controllerとしていた部分を、VuexのStoreに書き換え、Vueコンポーネン…

Django REST FrameworkのフィールドでJSONを扱う

DjangoのモデルにTextFieldでJSON文字列を保存しておき、APIをDjango REST Frameworkで提供する例。 JSONデータを保存して、読み込み時にもJSON形式のまま提供したかった。 restframeworkのシリアライザのFieldクラスを継承し、JSONを扱うフィールドを定義し…

PythonでUNIXドメインソケットを使ったHTTPサーバーとクライアントを作る

Pythonでプロセス間通信をしたい、プロトコルはHTTPで、データフォーマットはJSON。なるべく1つのスクリプトファイルでサーバーやクライアントを提供したい。 こんな感じの要件。 元々Flaskが使われてるプロジェクトだったので、Flaskで全部やればいいかーと…

『エキスパートPythonプログラミング 改訂2版』を読みました

『エキスパートPythonプログラミング 改訂2版』のレビューのお手伝いをしたので見本誌をいただきました。 エキスパートPythonプログラミング改訂2版作者: Michal Jaworski,Tarek Ziade,稲田直哉,芝田将,渋川よしき,清水川貴之,森本哲也出版社/メーカー: KAD…

『いちばんやさしいPythonの教本』を読みました

PyQの関連で献本いただいたので『いちばんやさしいPythonの教本』を読みました。前職の同僚が執筆した本です。 いちばんやさしいPythonの教本 人気講師が教える基礎からサーバサイド開発まで (「いちばんやさしい教本」シリーズ)作者: 鈴木たかのり,杉谷弥月…

DjangoフレームワークとVue.jsを使ってアプリケーションを作る

DjangoフレームワークとVue.jsでアプリケーションを作る例として、テキストを編集保存するシンプルなノートアプリケーションを作ってみました。 github.com Djangoのサーバーサイドレンダリングを使いつつ、Vueを組み合わせる一例として参考になればよいかな…

モデルクラスを継承してメソッドを追加する(proxyを使う場合)

この記事は Django Advent Calendar 2017 の7日目の記事です。 Djangoのモデルクラスを継承した場合、Metaに特に指定が無ければ、マルチテーブル継承となり、migrateを実行すると2つのテーブルができます。 モデルを継承して単一のテーブルにする方法は2つあ…

Djangoフレームワーク組込みのドキュメントジェネレータ(django.contrib.admindocs)の紹介

この記事は Django Advent Calendar 2017 の6日目の記事です。 tell-kさんの記事 を読んでいて、「そういえばDjangoには組込みのドキュメントジェネレータがあるんで紹介しておこう」と思ったので書くことにしました。 タイトルの通り、 django.contrib.admi…

Django1.10以降のDeferredAttributeとフィールドへのアクセス

Djangoのモデルクラスにフィールドやメソッドを定義しておいて、さらに属性値を代入していて、この値を取得するコードを書く場合。 メソッドのほうはgetattrでとればいいのだけど、同様にDjangoのフィールドのほうはget_fieldでフィールドを取得しないといけ…

API.AIのコンテキストを使ってChatOps環境を作る

2017/10/12 追記: API.AIのサービス名はDialogflowに変わりました。 API.AIのContextsとWebhookでChatOps環境を作ってみます。 https://docs.api.ai/docs/concept-contextsdocs.api.ai 今回は、SlackのChatbotとやりとりし、「管理者モード開始」から「管理…

API.AIを試す

2017/10/12 追記: API.AIのサービス名はDialogflowに変わりました。 Slackのbotなどを作るときに、API.AIを使うと面白いか便利かもねという話を聞いたので試しています。 api.ai API.AIってどういうものか API.AIの概要は公式ドキュメントの説明がわかりやす…

bpmappers 0.9

bpmappersのバージョン0.9を公開しました。 pypi.python.org リポジトリはbeproud organization以下にありますが、権限を頂いて引き続きメンテナンスしています。 以前のバージョンでは、django.utilsにあったSortedDictとMultiValueDictをコピーして使って…

django-ftpserver 0.5.0

django-ftpserverのバージョンを0.5.0に上げました。 pypi.python.org pyftpdlibのFileSystemにDjangoのStorageAPIをつなげる機能を追加してみました。 StorageAPIとつなげると、面白そうだなーというのは前から考えてたんですが、StorageAPI側の機能が足り…

プログラミング学習サービスPyQの紹介

PyQというプログラミング学習サービスの紹介と宣伝です。 ↓ これ ↓ 以前、私が勤務していた株式会社ビープラウドが開発しています。 ビープラウドは、Python言語が得意でシステム開発をやってる会社です。connpassというイベントサイトの開発、運営もやって…

Kerberos認証とPython

Windowsで認証にActiveDirectoryを使っている環境だと、シングルサインオン(SSO)などやるときにKerberos認証を使いたいこともあるだろうということで調べていました。 他の認証方法はNTLMがあるけど、非推奨のようなのでKerberosのほうを調べることに。 Kerb…

AWS LambdaをPython3.6とChaliceで試す

AWS LambdaがようやくPython3に対応したそうなので試してました。 AWS Lambda Supports Python 3.6 Lambdaを使う際、Pythonランタイムだとchaliceというフレームワークを使うと楽なのですが、Python3サポートに合わせてchaliceもバージョンが上がっていまし…

Travis CIのmatrixでtoxを実行する

Djangoフレームワークに依存するPythonのモジュールを作っていると、複数のPythonバージョンと複数のDjangoバージョンでテストコードを実行する必要があります。 手元で実行する場合はtoxを使うのですが、CIツールでもテストを実行したいです。 Welcome to t…

Django 1.11がリリースされましたね

Djangoフレームワークの1.11がリリースされましたね。 Django 1.11 released | Weblog | Django 1.11はLTS(Long Term Support)バージョンです。メンテナンス期限はリリースから3年後までなので、2020年4月までになります。 1つ前のバージョン1.10のメンテナ…

SphinxでPDFをビルドするためのDockerイメージを作った

Sphinxでlatexpdfjaコマンドを使ってPDFをビルドするには、latexのインストールされた環境が必要になります。 Ubuntuだとtexlive-fullパッケージで必要なパッケージをインストールできるっぽいというのを把握しました。 texlive-fullは依存パッケージがたく…

dogpile.cacheでpickleシリアライズせずにRedisに値を保存する

Python用のキャッシュフレームワークでdogpile.cacheというモジュールがあります。 Welcome to dogpile.cache’s documentation! — dogpile.cache 0.6.2 documentation Redisに保存するバックエンドも提供されているんですが、そのまま使うと値はpickleシリア…

ThriftPy+gunicorn_thriftでRPCサーバーを動かす

ThriftPyを使って作ったサーバーを動かすのに、thriftpy本体が持ってるサーバークラスを使ってもいいのだけど、タイムアウト処理やマルチプロセス動作だとかやるのが少し面倒だなーと考えてました。 githubでサーバークラスを差し替えるpull requestを出して…