Torskel-トルネードのルーチンを簡素化

私はしばしば竜巻で小さなサーバーを作成する必要があります。 プロジェクトによっては、redisを使用した作業のサポートが必要な場合とそうでない場合があります。 その他では、ReactJSをレンダリングする必要があります。 そして、すべてログが必要です。 最初に、ローカルpypiリポジトリを上げ、pythonパッケージで成果を収集し、人生を楽しみました。 パッケージをインストールし、そこからクラスをインポートし、継承してコードをさらに楽しくカットするだけで十分でした。



そして、考えが浮上しました-そして、彼らのベストプラクティスを人々と共有しないことですか? そこで、トルスケルパッケージを紹介します。



彼はPython 3.5+の友達にすぎないことをすぐに言わなければなりません。なぜなら彼はasync / awaitを最大限に使用しているからです。



これは竜巻のラッパーで、ボックスから基本的な機能を取得できます。



ライブラリのインストール-pip install torskel



Redisを使用した非同期操作



デフォルトではオフです。use_redisオプションをTrueに設定し、 pip install aioredis



を有効にする必要があります。



使用例:



 import asyncio from torskel.torskel_app import TorskelServer from torskel.torskel_handler import TorskelHandler import tornado.web from tornado.options import options options.define('use_redis', default=True, help='use redis', type=bool) class RedisApplication(TorskelServer): def __init__(self, handlers, **settings): super().__init__(handlers, **settings) self.greeting = 'Hello redis!' class RedisHandler(TorskelHandler): async def get(self): my_key = self.get_hash_str('my_key') await self.set_redis_exp_val(my_key, self.application.greeting, 3000, convert_to_json=False) res = await self.get_redis_val(my_key, from_json=False) self.write(res) await self.del_redis_val(my_key) self.finish() redis_app = RedisApplication(handlers=[(r"/", RedisHandler)]) if __name__ == '__main__': redis_app.listen(8888) loop = asyncio.get_event_loop() redis_app.init_with_loop(loop) loop.run_forever() tornado.ioloop.IOLoop.instance().start()
      
      





利用可能なオプションとデフォルト値のリスト:



大根を使用するかどうかを決定します



 use_redis=False
      
      





デフォルトでは、ソケットファイルを介した接続



 use_redis_socket=True
      
      





接続プールの作成-最小5、最大10



 redis_min_con=5 redis_max_con=10
      
      





大根に入る方法は?



 redis_host='127.0.0.1' redis_port=6379 redis_socket='/var/run/redis/redis.sock'
      
      





認可設定



 redis_psw=''    redis_db=1
      
      





ログをメールに送信します



次のオプションで構成されます。



 options.define('use_mail_logging', default=False, help='SMTP log handler', type=bool) options.define("log_mail_subj", default='', type=str) options.define("log_mail_from", default='', type=str) options.define("log_mail_to", default=[], type=list) options.define("log_mail_host", default='', type=str) options.define("log_mail_user", default='', type=str) options.define("log_mail_psw", default='', type=str)
      
      





ここでは特別な説明は必要ないと思います。オプションの名前はそれ自体を物語っています。



HTTPリクエスト



標準の竜巻AsyncHttpClientの単なるラッパー



 import tornado.web from torskel.torskel_app import TorskelServer from torskel.torskel_handler i mport TorskelHandler class HelloHttpHandler(TorskelHandler): async def get(self): res = await self.http_request_get('http://example.com') self.write(res) self.finish() hello_http_app = TorskelServer(handlers=[(r"/", HelloHttpHandler)]) if __name__ == '__main__': hello_http_app.listen(8888) tornado.ioloop.IOLoop.instance().start()
      
      





ReactJSサポート



use_reactjsオプションによって有効になります。 また、pip install jinja2を実行する必要があります。ここでは、js-developer、npm、webpack / gulp、およびその他のバベルのセットがすでに必要です。



レンダリングは、 react_render



関数によって行われます。 HTMLテンプレートには、次の行でスクリプトを含めることを前提としています



  <script src = "{{assets ['main'] ['js']}}"> </ script> 


この瞬間はかなり薄いので、将来的には完成させる予定です。



 import tornado.web import os from tornado.web import url from tornado.options import options, define from torskel.torskel_app import TorskelServer from torskel.torskel_handler import TorskelHandler settings = {} options.define('use_reactjs', default=True, help='use reactjs', type=bool) options.define("react_assets_file", default='webpack-assets.json', type=str) class MainHandler(TorskelHandler): def get(self): self.react_render('index.html') self.finish() handlers = [ url(r"/", MainHandler, name="IndexPage"), ] class HelloReactApplication(TorskelServer): def __init__(self, handlers, **settings): super().__init__(handlers, **settings) hello_react = HelloReactApplication(handlers, root_dir=os.path.dirname(__file__), **settings) if __name__ == "__main__": hello_react.listen(options.port) tornado.ioloop.IOLoop.current().start()
      
      





これは、ライブラリのアルファ版です。 さまざまなデータベースに接続プールを作成するためのサポートを追加する計画があります。



PS



githubへのリンク

github.com/frostspb/torskel



All Articles