2012-10-01から1ヶ月間の記事一覧

paramikoを使ってsftp

pythonでsftpでファイルを転送したり取得したりするのに、paramikoを使えるということで、いろいろ試してみました。 いろいろといっても、リモートサーバのファイル一覧をprintしたり、ファイルを転送したり、取得したりしてみただけです。 # coding=utf-8 i…

Djangoのモデルに数値フィールドの範囲を定義する

models.IntegerFieldのvalidatorsにValidatorのインスタンスをリストで渡す 以下のモデルのModelFormは1以上、100以下の場合は正しい値として扱う class Person(models.Model): name = models.CharField(max_length=100) age = models.IntegerField(validato…

DjangoでImageFieldに画像が設定されていないことをテストする

ImageFieldに画像が設定されていないことをテストで確認したい場合はどうするか 以下の例の通り、画像を設定していないImageFieldはNoneではないので、TestCaseのassertIsNoneなどでは正しくテストできない >>> p = Person.objects.get(pk=1) >>> p.profile_…

リモートサーバーのdjangoプロジェクトのmanage.pyタスクをローカルから動かす

昨日の課題 Pycharmからsyncdbとかtestとかのmanage.pyのTaskを実行できる機能があるんだけど、それがうまく動かない。 runserverが動かせてるんだから頑張ればできそうな気がするけど今後の課題。 相変わらずRun manage.py Taskから動かすことはできてない…

VirtualBox+ubuntu上に作成したDjangoプロジェクトをローカルのPyCharmで編集する

「Python プロフェッショナルプログラミング」にはVirtualBox上にubuntu serverをインストールし、pythonの開発環境を作成する手順が詳しく書いてあります。 Pythonプロフェッショナルプログラミング作者: ビープラウド出版社/メーカー: 秀和システム発売日:…

Pythonでfeedparserを使ってRSSを読む

簡単にfeedからエントリを取得できます。 import feedparser rss_url = "http://d.hatena.ne.jp/yuheiomori0718/rss" feed = feedparser.parse(rss_url) for e in feed.entries: print e.title 実行結果 [python][ruby]pythonで10進数からn進数に基数変換 [p…

pythonで10進数からn進数に基数変換

rubyではNumeric#to_sに基数nを渡すとn進数での文字列表現を返してくれます。1000000を2〜36進数で出力するコードruby (2 .. 36).each do |e| p 10000000.to_s(e) end # => "100110001001011010000000" # => "200211001102101" # => "212021122000" # => "10…

datetimeをLast-ModifiedやIf-Modified-Sinceの書式に変換

from datetime import datetime d = datetime.now() s = datetime.strftime(d, '%a, %d %b %Y %H:%M:%S GMT') print s # = >Wed, 24 Oct 2012 21:34:50 GMT 受け取った文字列をdatetimeに戻す場合はstrptime d = datetime.strptime(s, '%a, %d %b %Y %H:%M:%…

pythonでNクイーン問題

先週は秋季の応用情報処理技術者試験がありましたね。午後試験のアルゴリズム問題としてNクイーン問題がとりあげられていたので、紹介されていた処理をそのままpythonで書いてみました。 出題では配列の添字が1から始まってましたが、そこは0からに変えてあ…

DjangoでアップロードファイルをS3に置くときの設定メモ

適当にImageFieldを持つmodelを作るmodels.py class Image(models.Model): file = models.ImageField(upload_to='img/%Y%m%d') memo = models.CharField(max_length=255) S3に置くためにdjango-storagesを使う たぶん以下が最小限の設定settings.py DEFAULT_…

Djangoのunique_together制約のエラーメッセージをカスタマイズする

unique_error_messageをオーバーライドする class Foo(models.Model): driver = models.CharField(max_length=20) restaurant = models.CharField( max_length=30) age = models.IntegerField() class Meta: unique_together = (("driver", "restaurant"),) …

PILで画像の切り抜き

もともと1500x1500くらいある画像の一部を切り抜き # coding=utf-8 import Image pic = Image.open('sake.jpg') # 切り抜き(left, upper right, lower) pic.crop((450, 516, 1011, 872)).save('crop_sake.jpg')

PILで画像のリサイズ

もともと1500x1500くらいの画像を300x300にリサイズ # coding=utf-8 import Image pic = Image.open('sake.jpg') # リサイズ (width, height) pic.resize((300, 300), Image.ANTIALIAS).save('300sake.jpg')

hg diffの結果をlessでカラー表示

git使ってたときは、git diffが1ページずつ表示されたと思うんだけど、hg diffだと一気に最後まで表示されてしまって使いづらい パイプでlessに渡すとカラーじゃなくなってしまう 以下を追記したら希望通りの動きになった。~/.hgrc [pager] pager = LESS='FS…

django-pistonで304を返す

django-pistonで返すレスポンスはpiston.utils.rcに定義されていて以下のような使い方をする。 def read(self, request, *args, **kwargs): if not self.has_model(): return rc.NOT_IMPLEMENTED pkfield = self.model._meta.pk.name if pkfield in kwargs: …

DjangoのテストクライアントにHTTPヘッダを設定する

djangoでPOSTやGETのテストするときに、HTTPヘッダを設定する方法のメモ パラメータとは別に**付きの辞書で渡す from django.test.client import Client c = Client() response = c.post( '/books/', {'title': 'Code Reading'}, **{'HTTP_AUTHORIZATION': '…

git add -pをhgで

gitだと、git add -pを使うことによって、ローカルに加えた修正をhunk単位で選んでコミット対象にすることができますね わりと便利です同じようなことをmercurialでやりたくて、どうやるんだと思い、調べました。 RecordExtensionというのを使うようです。 ~…

pyapnsでnotifyしたときのエラー

ドキュメントを見るとpyapnsのnotify関数はdevice_tokenを文字列でも配列でも渡せることになっています https://github.com/samuraisam/pyapnsところが文字列で渡すと正常に通知ができて、配列で渡すとエラーになるというのにちょっとはまったのでメモを残し…

herokuでswigに依存したライブラリを使う

djangoアプリをherokuにアップしたときにこんなエラーがでました unable to execute swig: No such file or directory error: command 'swig' failed with exit status 1requirements.txtに書いてある、以下のライブラリをインストールするときにswigがない…

git stashをmercurialで使いたい

hg

最近かかわる案件で使われるvcsが、なぜかgit->hg->git->hgと交互にやってきます。今回も法則は変わらず。先週はgitメインでしたが、今週からまたhgメインになりました。「あー、gitだったらできるのに」みたいなことの一つに、git stashがありまして、拡張…

datetimeとエポックタイムの変換

メモ # coding=utf-8 import time from datetime import datetime def datetime_to_epoch(d): return int(time.mktime(d.timetuple())) def epoch_to_datetime(epoch): return datetime(*time.localtime(epoch)[:6]) now = datetime.now() # => 2012-10-10 2…

.hgignoreのグローバル設定

.hgignoreを各リポジトリに置くんじゃなくて、全体に効かせたい場合どうするかホームディレクトリに.hgignoreを置くだけでは効かない ホームディレクトリの.hgrcに以下の設定を追記する~/.hgrc [ui] ignore = ~/.hgignore

git mergeでコミットしない方法のメモ

git mergeはマージ後にcommitまでやってしまう ソースのマージだけやって、commitは手動でやりたい場合はどうするのか調べた 方法1 $ git merge --no-commit --no-ff $BRANCH Automatic merge went well; stopped before committing as requested参考 http:/…

Django on herokuでsendgridを使ってメール送信する

昨日django-registrationを使ってユーザー登録するサンプルを作ってたんですが、メール送信の部分はgmailを使ってました。 今日はherokuにアップすることを考えて、herokuのアドオン sendgridを使ってメール送信を試してみました。 メール送信するアプリのリ…

django-registrationのメモ

djangoでユーザー登録するライブラリとしてはdjango-registrationが一番ポピュラーみたいなので、さわってみました。 とりあえず動かしてみたってだけなので、使ったことのある人にとってはこのエントリから得るものは多分ないです。 1. インストール pip in…

django-pistonでAPIにBasic認証をかける

昨日django-pistonで簡単なAPIを作る方法を試してみました。 今日はそのAPIにbasic認証をかけてみます。簡単です。 まず認証されるユーザーが必要です。django.contrib.auth.models.Userです。 なければpython manage.py createsuperuserで作りましょう。 続…

django-pistonでシンプルなAPIを作ってみる

最近django-tastypieをちょいちょい触っていたのですが、同じような目的のライブラリにdjango-pistonというのがあると知りました。このサイトによるとtastypieとpistonで人気を二分しているように見えます。 http://www.djangopackages.com/grids/g/rest/ 一…

knockout.jsで入力チェック

このあいだ作ってみたknockout.jsを使ったTodoアプリなんですが、全く入力チェックをかけてないので、空文字でTodoが作れてしまうという問題がありました。 knockout.jsで入力チェックってどうやるのが普通なんだろうか、と思ってググってみたところKnockout…

kickstrapのdebug表示について

この間作ったtodoアプリの場合、knockout.jsに依存したtodoというappsを作りました。 config.ksはこうです knockout.min.js, //http://netdna.getkickstrap.com/Kickstrap/apps/knockout/knockout.min.js todo.js,todo.css kickstrap.lessの@appsはtodoのみ…

kickstrapでkickstrap.lessのコンパイル結果をキャッシュする

kickstrap.lessに以下のような部分がありますので、@importのコメントを外すだけです @import "Kickstrap/extras/caching.less"; // Cache Kickstrap (Makes your site faster) // Use "clearCache()" in the console to update. localStrageにコンパイル結…