2015年3月22日日曜日

requestsでurlに同一キーの複数パラメータを付与する方法

pythonのrequestsモジュールはこういうめんどくさい人たちに比べてかなり使い勝手がいい。
でもでも、urlのパラメータをdictで指定する(参考)ため、同一キーのパラメータは指定不可能
だと思っていた。

で、もやもやしている日曜の早朝に、

\  __  /
_ (m) _  ピコーン
   |ミ|
/ `´  \
  ( ゚∀゚)
 ノヽノ |
  < <
ってなって、実際に試してみたら、出来たので、共有がてら。

結論から言うと、配列で渡せばいい。

例)
    query = {
        'hoge': 'hoge1',
        'huga': ['huga1','huga2']
        'fuge': True
    }
    r = requests.get('http://testhost/test.json', params=query)
    orint r.url
    >>u'http://testhost/test.json?hoge=hoge1&huga=huga1&huga=huga2&fuge=True


こんな感じ。
今あるソース全部書き換えたい。。。

2015年2月13日金曜日

Pycharmが素敵すぎる件

Pycharmからnoseを使った単体テストを実行できるので、
日本語の情報がなかったので、備忘録として。

File→setting→tools→Python Integrated Tools→{対象プロジェクト}→Default test runner

ちなみにここからrequirements.txtの場所も指定できる。

また、他のプロジェクトのソースを参照したい場合は

File→setting→project→project Dependencies

から指定出来る


2015年1月12日月曜日

Pythonとスレッド

モジュールの速度改善を行うために、Pythonで行うthread処理について調べることになった。

どうやらJavaみたいにクラスを分割だけではなく、メソッド単位でスレッドかできるらしい。

同時に複数スレッドからlistにpushしたりpopしたりするものも、独自に作成する必要は無く、
いい感じにロックをかけてくれるものもあるらしい

シンプルなものになるとこんな感じ

Pythonって便利。

2014年9月14日日曜日

boot2docker起動時のエラー

最近、仕事で仮想環境にかかわることが多い。
その時に詰まったことを共有する。


ここを参考にして、boot2dockerをインストールして起動すると、エラーが発生した。

 error in run failed to get machine "boot2docker-vm": exec: "%VBOX_MSI_INSTALL_PATH%;C:\\Program Files\\Oracle\\VirtualBox\\VBoxManage.exe": file does not exist

error in run failed to initialize machine "boot2docker-vm": exec: "%VBOX_MSI_INSTALL_PATH%;C:\\Program Files\\Oracle\\VirtualBox\\VBoxManage.exe": file does not exist

 結論から言うと、環境変数:VBOX_INSTALL_PATHを
 "%VBOX_MSI_INSTALL_PATH%;C:\\Program Files\\Oracle\\VirtualBox\\VBoxManage.exe"
から
 "%C:\\Program Files\\Oracle\\VirtualBox\\VBoxManage.exe"
に修正すると回避できた。

 boot2dockerの中身を見てみたが、観光変数が『;』で区切られている場合の考慮がされていなかった。

まだまだ荒いところはあるけど、dockerっていいよね。

2014年3月6日木曜日

seleniumからブラウザを起動するときのオプション情報

1.キャッシュやクッキーをクリアした状態でIEを起動する方法(Ver.2.35から可能)


    DesiredCapabilities ieCap = DesiredCapabilities.internetExplorer();       
    ieCap.setCapability(InternetExplorerDriver.IE_ENSURE_CLEAN_SESSION, true);
    WebDriver driver = new InternetExplorerDriver(ieCap);

  こんな感じ

2.marionetteのFireFoxを起動する方法(Ver.2.34から可能)

   System.setProperty("webdriver.firefox.marionette", "true");
   WebDriver driver = new FirefoxDriver();
  プロファイルやバイナリの設定が必要になることもあるが、そのあたりは
  コンストラクタを変更すればいい。(詳細は過去ログ)

  そもそもマリオネットモードのFireFox環境を構築するにはFireFoxのビルドも
  しなくちゃいけないらしく、そっちのほうが大変なような気がする。

  *そもそもmarionetteって何?って人はここが詳しい
    ようは別筐体にインストールしたFireFoxをソケットでつないで動作させるモード。

2013年4月29日月曜日

WebDriverでのalert(confirm)検知方法

WebDriverでのalertを検知する方法として、
switchToメソッドを使ってalertオブジェクトを取得する方法等が存在した。
しかしながら、この方法ではオブジェクトを取得するまでに一定時間待機してしまい
時間がかかりすぎてしまう。

先人の知恵を元に強制js書き換えを行うのが通例とされてきたが、2.32から
selenium自体がこの方法をラッピングしてくれた。


WebDriver driver = new ChromeDriver();
AlertOverride alertOverride = new AlertOverride(true);
alertOverride.replaceAlertMethod(driver);                //①

 ・
 ・
 ・
if(alertOverride.isAlertPresent(driver)){                                     //②
    String alertMsg = alertOverride.getNextAlert(driver);               //③
}
if(alertOverride.isConfirmationPresent(driver)){                          //④
    String confirmMsg = alertOverride.getNextConfirmation(driver);//⑤
}


①でwindow.alert、confirmを上書きし、内部バッファに溜め込むようにしている
②でalertが発生しているかどうか確認し、③でそのメッセージを取得している。
④、⑤も同様。

Jsの書き換えを行っているため、各画面を開くごとに実行する必要があるところが
注意点。WebDriverぐらい内部に保持して、いちいち引数に指定しなくて
いいようにしてほしいなと思う今日この頃。

alertやconfirmはスクリーンショットで取得できないので、実装ミスによる
alertが表示された場合、この方法をとらないとどんなメッセージが表示されたか
わからない。

JQueryのメッセージボックスを使用していて、alertやconfirmは使用していないという
場合は、あらいざらいこの方法ですくってやればいい。

2013年3月3日日曜日

【JavaFX2】コントローラクラス

コンポーネントのイベントを貼り付けたりコンポーネントにアクセスするために
フィールド変数を保持したり、何かと忙しいコントローラクラス。

それに対する覚書。

 1.コントローラでないとコンポーネントを認識しない
 @FXMLアノテーションをつけることによって、java側から画面のコンポーネントにアクセスするが、
 そもそもこの機能はコントロールクラスでないと動作しないようだ。

 2.フォーム1つにつきコントローラも1つ
  SCENE Buiderを見る限り、どうもそうっぽい。最終的にごちゃごちゃしてくるのではないだろうか。

 3.初期処理はinitializeで
  コンポーネントに対する初期処理は、コントロールクラスにInitializableを実装し、
  initializeメソッドでやるのが流儀のようだ。

 4.コントローラのインスタンス取得方法
  URL file = new File("fxmlファイルパス").toURI().toURL();
  FXMLLoader loder = new FXMLLoader();
   Conroller controller = (Controller) loader.getController()
    こんな感じ。

さくさく十同できますなぁ。
SCENE Buider自体のバグが気になるけど。