Python

GoogleAppEngine/Pythonでparamikoを使ってSSH接続

GoogleAppEngineでsocketが使えるようになったのは1年ぐらい前だった気がしますが、使ったことなかったので試してました。 Sockets Python API Overview | Python | Google Cloud Platform まだプレビューリリースですね。 socketを使えるのならparamikoでSS…

GoogleAppEngine/PythonからGoogleCloudStorageを使う

AppEngineで動かすアプリを作っていて、Blobstoreを使おうかなーと思って久しぶりにドキュメントを見たら、CloudStorageを使うことが推奨されていたので、試してた。 https://developers.google.com/appengine/docs/python/googlecloudstorageclient/?hl=ja …

rst2pdfでblockdiagを有効にする

rst2pdfはreStructuredTextからPDFを生成してくれるツールです。 blockdiagディレクティブを入力ファイルに書いても、そのままでは動作しません。 rst2pdfの拡張の仕組みを使うことでblockdiagを有効にできます。 試したバージョンは、Python 2.7、rst2pdf 0…

python-ldapとpython3-ldapについて

PythonからLDAPサーバーを操作するために使うクライアントライブラリについて。 python-ldapとpython3-ldapというのがある。 最初はpython3-ldapのほうはフォークか何かだと思っていたのだけど、コードを読むと全く別物でした。 それぞれについて特徴を整理…

Funkloadのテストコードの書き方について

fl-run-benchコマンドで実行するテストコードの書き方についてメモ。 Cyclesの値はCU(ConcurrentUser)の数 durationに設定した秒数の間、テストを繰り返し実行する レポートにでるSUCCESSやERRORの数はテストを繰り返し実行したときの結果を集計したもの デ…

FunkLoadでJSONをPOSTする

FunkLoadでJSONをPOSTする方法を調べたのでメモ。 FunkLoadでJSONを送信するテストコード funkload.utils.Dataを使うと、Content-Typeを指定してデータ列を送信できる。 test_Simple.py # coding: utf8 import unittest import json from funkload.FunkLoadT…

PythonでParquetフォーマットを扱ってみたいので調べていた

ParquetフォーマットをPythonから扱ってみたいので調べていた。 GitHub - jcrobak/parquet-python: python implementation of the parquet columnar file format. githubにあったものを見つけたけど、まだバグが結構あるっぽい。書き込みなども実装されてな…

Pythonの研修サービスを始めました

勤務先でPythonの研修サービスを始めることになりました。 BeProud Python Training (Pythonプログラミング研修) 私も講師の一人です。受託開発の業務でも5年以上Pythonを使っているので、ノウハウは蓄積されてます。 よろしくお願いします!

Apache Sparkを試す

CDH5の環境を手元に作ったので、Apache Sparkを使ってみる。 依存はHDFSのみ。Masterが1台でWorkerが複数台の構成なのかな。 ClouderaManagerで設定して起動するとWebUIがデフォルトでは18080ポートになっていた。 Pythonから使う場合はpysparkコマンドとな…

Djangoのタイムゾーンサポートの動作について

Djangoのタイムゾーンサポートについてメモ。settings.USE_TZをTrueにすると有効になる。 試したのはPython 2.7, Django 1.6.2。 Django1.6だと、プロジェクト新規作成時のsettings.pyでUSE_TZはTrueに設定されている。(ドキュメントではデフォルトでは無効…

tox.iniで他のセクションの値を参照する

タイトルのとおり。tox.iniで他のセクションの値を参照する方法について。 githubでいろんなリポジトリ眺めてるときに書いてる人がいたので知った。 ドキュメントにも書かれている。 Substitution for values from other sections こんな感じに書ける。 [tox…

django-ftpserverを公開しました

昔作ったunboxftpdを名前変えてリファクタリングし、django-ftpserverとして公開しました。 django-ftpserver 0.3.5 : Python Package Index Djangoアプリケーションとして追加すると、FTPサーバーを起動するコマンドが追加されます。 ユーザー認証はDjango…

SQLAlchemyでサブクエリとJOINを使ってみる

「SQLAlchemyでJOINの順番とかいじれるんだっけー?」というような話がきっかけでどうやるのか調べてた。 サブクエリもJOINも簡単に使えていいですねえ。 spam.py from sqlalchemy import Table, Column, Integer, String, MetaData, ForeignKey from sqlalc…

Celeryでタスクをプリフェッチする数を変更する

celerydのメインプロセスは、タスクのメッセージをブローカーから受け取った後、ワーカープロセスに処理を実行させる。 メッセージをブローカーから受け取る際、実行中のものとは別に、事前にメッセージを取得(プリフェッチ)するようになっている。 全てのワ…

Pythonのsmtpdモジュールで開発用のメールサーバーを用意してUpstartで動かす

PythonのsmtpdモジュールはSMTPサーバーを実装するためのクラスを提供するが、コードを書かなくても利用できる。 開発用のメールサーバー(実際にメールを配送せず、内容をファイルに出力)として使うにはDebuggingServerクラスを使う。 20.13. smtpd — SMTP …

Celeryでキュー名を指定してタスクをルーティングする

2つ以上のホストでcelerydを起動し、タスクを処理させるホストを明示的に指定したい場合には、キュー名を指定することで実現できる。 Routing Tasks — Celery 3.1.23 documentation 試したバージョンは、Python 2.7、Celery 3.1.8、BrokerはRabbitMQ。 ワー…

UbuntuでPythonからcx_Oracleモジュールを使ってOracle Database 11gに接続する

Oracle Databaseを使うのは初めて。最新版は12cだけど、11gがまだ結構使われてるっぽい。 PythonからOracleに接続する場合はいくつか方法があるけど、今回はcx_Oracleを使うことにする。 試した環境は、Ubuntu 12.04、Python 2.7。 cx_Oracle cx_Oracleは9i…

Djangoでフォームセットを使って複数のレコードを一括編集する

1つのモデルの複数レコードを編集するのなら、ModelFormのフォームセットを生成するといいのだけど、modelformset_factoryという関数があるのでそちらを使用してみる。 ドキュメントに載っていないのでバージョンアップで動かなくなる可能性あり。 modelform…

DjangoでSOAPウェブサービスを実装する

PythonでSOAPを扱う場合、いくつかサードパーティモジュールがあるのだけど、久しぶりに調べてみたら、Spyneというのがそこそこ活発に開発されてるようだ。 spyne - RPC that doesn't break your back. どうやら、 soaplib の開発を停止して rpclib というモ…

django-edamameというライブラリを公開しました

django-edamameはDjangoで複数のビュー関数、ビュークラスをまとめる機能を提供します。 django-edamame 0.1 : Python Package Index このアイデア自体は数年前から持っていて、実装コードではちょくちょく使ってた。 複数のビューをまとめて似たような機能…

Djangoでサイトの利用者ごとに翻訳の言語設定を切り替える

Djangoで、サイトの利用者ごとに言語設定を切り替えたい。 DjangoはセッションやCOOKIEの値を参照して、どの言語に翻訳するかを決める仕組みをミドルウェアで提供している。 言語設定の検出メカニズム - 翻訳 ― Django 1.4 documentation フォームから送信さ…

Djangoでモデルクラスを差し替え可能にする

Django1.5からdjango.contrib.authのユーザーモデル(User)を差し替えることが可能になっているが、この機能を実現しているのがMetaサブクラスのswappableオプション。 このオプションを使うと、settingsの設定でモデルクラスを差し替える機能をアプリケーシ…

Djangoのログ出力をFluentdで集める

Djangoのログ出力をFluentdで集める方法について。 ログレベルがERRORやWARNINGのものはSentryを使うのが便利だと思うけど、それ以外のINFOやDEBUGはSentryに入れるには数が多すぎるのでどうするか考えてて、最初はローカルのファイルに書き出していた。 け…

Django1.6のsettings.pyと管理サイト

Django1.6から、startprojectで作成されるデフォルトのsettings.pyの内容がずいぶん変わってスッキリしました。 以下インラインでコメント。 """ Django settings for myproject project. For more information on this file, see https://docs.djangoprojec…

GoogleAppEngine(PythonSDK)のndb雑感

GoogleAppEngineで動かす予定の、ちょっとしたデータベースアプリケーション(簡単なCRUD)を作るのにgoogle.appengine.ext.ndbを試しに使ってみてます。 少し使ってみて感じたことなど。 dbと比べて、APIの設計がよりDataStoreを効率よく使う方に向いてる(get…

bpmappersのテスト実行をDjango1.6に対応させました

bpmappersのv0.7はDjango1.6で動作することを確認済み。 この機会にtoxのtestenvをちょっと書きなおしてみました。 次のバージョン以降は、Python2.5のサポートは切ろうと思います(tox+virtualenv+pipのバージョンを合わせるのが面倒) 代わりに、Python2.6、…

Bottleでファイルをダウンロードさせる

メモ。bottleを使ってContent-typeを設定してファイルをダウンロードさせる。 Webブラウザでファイルをダウンロードして保存させるには、Content-Typeヘッダにapplication/octet-streamを指定する。 ファイル名を指定する場合はContent-Dispositionヘッダを…

Bottleとpeeweeを使ってゲストブックアプリケーションを作ってみた

Python用のWebフレームワークであるBottleと、O/Rマッパーのpeeweeを使って、Python Professional Programmingの2章のゲストブックアプリケーションを作ってみた。 試したバージョンは、Python2.7、Python3.3、Bottle0.11.6、peewee2.1.5。 ソースコード gue…

Sentryをインストールして実行してみる

複数台あるアプリケーションサーバーのエラーログを集めて見たり、メール通知するのだとSentryは結構使いやすそう。 http://sentry.readthedocs.org/en/latest/ とりあえず、動かしてみる。 インストール virtualenvでeasy_installのオプション指定にてイン…

Django REST frameworkとbpmappersを組み合わせて使う

DjangoでREST APIを簡単につくるためのライブラリは、django-tastypie以外にDjango REST framework(以下rest_framework)というのもある。 Django REST framework これとbpmappersを組み合わせて使う方法を調べたのでまとめる。 rest_frameworkモジュールのソ…