別のフレームワーク..。

仕事の基本概念
仕事の基本概念

昨日、最初のPythonフレームワークをリリースしました。いいえ、別のものではありません。これは世界にあります-別のものです。そして私にとってこれまでのところ最初のもの。そして、私は彼がその種の最初のものであることを認めます。これは、カスタムサーバーを構築するためのフレームワークです。そして、それらは設定を通じて作成されます。うわー、今作成しましょう...






最初は設定がありました

だから、設定。この時点ですでにフレームワークをインストールしているので。そうでない場合は、次のコマンドを使用して簡単に実行できます。





pip3 install idewavecore==0.0.1
      
      



これは、Python 3.6以降、インターネット、およびコンピューターがあることを前提としています





構成自体は次のようになります。





# settings.yml
settings:
  servers: !inject config_dir/servers.yml
  db_connections:
    sqlite:
      host: ~
      username: ~
      password: ~
      # default mysql 3306, postgresql 5432, sqlite don't need port
      port: ~
      # currently allowed: mysql, postgresql, sqlite
      dialect: sqlite
      # supported drivers:
      # mysql: mysqlconnector, pymysql, pyodbc
      # postgresql: psycopg2, pg8000, pygresql
      driver: ~
      # to use with sqlite this should be absolute db path
      # can be empty to keep db in memory (sqlite only)
      db_name: ~
      charset: ~
      
      



!inject



- yaml . , yaml- -.





# servers.yml
sample_server:
  connection:
    host: 1.2.3.4
    port: 1234
    # possible values: tcp, websocket
    connection_type: tcp
  # optional
  proxy:
    host: ~
    port: ~
    # possible values: tcp, websocket
    connection_type: tcp
  options:
    server_name: Sample Server
    is_debug: false
  middlewares: !pipe
    - !fn native.test.mock_middleware
    - !fn native.test.mock_middleware
    - !infinite_loop
        - !fn native.test.mock_middleware
        - !fn native.test.mock_middleware
        - !fn native.test.mock_middleware
        - !router
            ROUTE_1: !fn native.test.mock_middleware
            ROUTE_2: !fn native.test.mock_middleware
            ROUTE_3:
              - !fn native.test.mock_middleware
              - !fn native.test.mock_middleware
              - !fn native.test.mock_middleware
  # optional
  db_connection: sqlite
      
      



.





!pipe



- , . , middlewares ( - ), . - .





!infinite_loop



- , . (, websocket).





!router



- , . , , (route).





, , !fn



- , ( - middleware) . , - - middlewares - . , , :





!fn <__>.<_>







. (middlewares) - . (! !), native



, :





!fn native.test.mock_middleware







, .





Middle where

- , . , - . .





, - , ( - ). :





from idewavecore.session import Storage, ItemFlag


async def sample_middleware(**kwargs):
    global_storage: Storage = kwargs.pop('global_storage')
    server_storage: Storage = kwargs.pop('server_storage')
    session_storage: Storage = kwargs.pop('session_storage')

    session_storage.set_items([
        {
            'key1': {
                'value': 'some_tmp_value'
            }
        },
        {
            'key2': {
                'value': 'some_persistent_value',
                'flags': ItemFlag.PERSISTENT
            }
        },
        {
            'key3': {
                'value': 'some_persistent_constant_value',
                'flags': ItemFlag.PERSISTENT | ItemFlag.FROZEN
            }
        },
        {
            'key4': {
                'value': 'some_constant_value',
                'flags': ItemFlag.FROZEN
            }
        }
    ])

    value_of_key3 = session_storage.get_value('key3')
      
      



(storage). : (global storage), (server storage) (session storage).





, .





.





.





.





( , . . , -. - , .)





...

, - Assembler. , . :





# run.py
import asyncio

from idewavecore import Assembler
from idewavecore.session import Storage

if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    global_storage = Storage()

    assembler = Assembler(
        global_storage=global_storage,
        #    
        config_path='settings.yml'
    )

    servers = assembler.assemble()
    for server in servers:
        server.start()

    loop.run_until_complete(
        asyncio.gather(*[server.get() for server in servers])
    )

    try:
        loop.run_forever()
    except KeyboardInterrupt:
        pass
    finally:
        loop.close()
      
      



- ( , ) , . - , curl, mmo rpg ...





そして今、私の投稿を最後まで読んでくださった皆さんに感謝します。建設的なコメントをいただければ幸いです。私のフレームワークはその種の最初のものではありませんが、このバーにできるだけ近づけたいと思います。





ぜひご参加ください








All Articles