{ "info": { "author": "Komissarov Andrey", "author_email": "kak.to.tam@mail.ru", "bugtrack_url": null, "classifiers": [ "Operating System :: OS Independent", "Programming Language :: Python :: 3" ], "description": "# KFrame\n\n\u0424\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0434\u043b\u044f \u0443\u0434\u043e\u0431\u043d\u043e\u0439 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c. \n\n\u0412 \u043e\u0431\u0449\u0435\u043c \u0432\u0438\u0434\u0435 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u0437 \u0441\u0435\u0431\u044f \u043e\u0434\u0438\u043d \u043a\u043b\u0430\u0441\u0441 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044f \u0438 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0434\u0435\u0442\u0435\u0439 - \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 \u0438\u043b\u0438 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \n\u0411\u0430\u0437\u043e\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u0434\u043b\u044f \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 \u0438 \u043a\u043b\u0430\u0441\u0441 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044f \u0438\u043c\u0435\u044e\u0442 \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0434\u043b\u044f \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c\u0438 \u043f\u043b\u0430\u0433\u0438\u043d\u0430\u043c\u0438 \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u043f\u043b\u0430\u0433\u0438\u043d\u0430\u043c\u0438. \n\n\u041f\u0440\u0435\u043b\u0435\u0441\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432\u0441\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u044b \u0438\u043c\u0435\u044e\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044f, \u0430 \u0442\u043e\u0442 \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0438\u043c\u0435\u0435\u0442 (\u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438) \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 \u043d\u0430 \u043f\u043b\u0430\u0433\u0438\u043d\u044b \u0438 \u043c\u043e\u0434\u0443\u043b\u0438 \n\n### \u041f\u043b\u0430\u0433\u0438\u043d \n\u041f\u043b\u0430\u0433\u0438\u043d - \u043e\u0431\u044a\u0435\u043a\u0442 \u043a\u043b\u0430\u0441\u0441\u0430 base.Plugin \u0438\u043b\u0438 \u0435\u0433\u043e \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a\u0430 \n\u043f\u043b\u0430\u0433\u0438\u043d \u043e\u0431\u044f\u0437\u0430\u043d \u0438\u043c\u0435\u0442\u044c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442 \u043a\u043b\u0430\u0441\u0441\u0430 base.Parent \u0438\u043b\u0438 \u0435\u0433\u043e \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a\u0430. \n\u041f\u043b\u0430\u0433\u0438\u043d \u0438\u043c\u0435\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0434\u0440\u0443\u0433\u0438\u043c \u043f\u043b\u0430\u0433\u043d\u0430\u043c, \u043c\u043e\u0434\u0443\u043b\u044f\u043c \u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u0443 \u043a\u043b\u0430\u0441\u0441\u0430 base.Parent \u0438\u043b\u0438 \u0435\u0433\u043e \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a\u0430. \n\n### \u041c\u043e\u0434\u0443\u043b\u044c \n\u041c\u043e\u0434\u0443\u043b\u044c - \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442/\u043a\u043b\u0430\u0441\u0441/\u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0441 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f. \n\u041c\u043e\u0434\u0443\u043b\u044c \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u043d \u0438\u043c\u0435\u0442\u044c \u043a\u0430\u043a\u043e\u0439-\u043b\u0438\u0431\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441. \n\u0417\u0430\u0434\u0430\u0447\u0430 \u0440\u043e\u0434\u0438\u043b\u044f \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u0432\u043e\u0434\u0438\u0442 \u043b\u0438\u0448\u044c \u043a \u0445\u0430\u0440\u0435\u043d\u0438\u044e \u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044e \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u043c\u043e\u0434\u0443\u043b\u044e. \n\u041c\u043e\u0434\u0443\u043b\u044c \u0432\u0441\u0435 \u0446\u0435\u043b\u043e \u0437\u0430\u043c\u043a\u043d\u0443\u0442 \u0432 \u0441\u0435\u0431\u0435. \n\n## \u041a\u043e\u043c\u043f\u043b\u0435\u043a\u0442 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 \u0438 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \n\n### \u041f\u043b\u0430\u0433\u0438\u043d\u044b\n\n#### SQL\nSQL - \u041e\u0431\u0435\u0440\u0442\u043a\u0430 \u043d\u0430\u0434 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u043e\u043c MySQL \n\n\u041a\u043e\u043d\u0441\u0442\u0440\u043a\u0443\u0442\u043e\u0440 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0447\u0435\u0442\u044b\u0440\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430: \n* host - \u0445\u043e\u0441\u0442 \u0411\u0414 \n* port - \u043f\u043e\u0440\u0442 \u0411\u0414 \n* user - \u043b\u043e\u0433\u0438\u043d \n* passwd - \u043f\u0430\u0440\u043e\u043b\u044c \n\n\u0422\u0430\u043a \u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c:\n* ddl - \u0441\u043b\u043e\u0432\u0430\u0440\u044c, \u043a\u043b\u044e\u0447 - \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b table_name, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 DDL-\u0441\u043a\u0440\u0438\u043f\u0442 \n* scheme - \u0441\u0445\u0435\u043c\u0430 \u043f\u043e-\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \n\n\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043a\u043b\u0430\u0441\u0441\u0430:\n```python\ndef execute(self, query, commit=False, multi=False) \ndef select_all(self, query, unique_cursor=False) \ndef select(self, query, unique_cursor=False) \n```\n\u041c\u0435\u0442\u043e\u0434 execute - \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0439 \u0441 \u0411\u0414. \n\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043a\u043e\u0440\u0442\u0435\u0436 : \u0424\u043b\u0430\u0433 \u0443\u0441\u043f\u0435\u0445\u0430 \u0438 \u0441\u043f\u0438\u0441\u043e\u043a \u043a\u043e\u0440\u0442\u0435\u0436\u0435\u0439 (\u0437\u0430\u043f\u0438\u0441\u0435\u0439), \u0435\u0441\u043b\u0438 \u0437\u0430\u043f\u0440\u043e\u0441 \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442. \n\n\u041c\u0435\u0442\u043e\u0434 select_all - \u043e\u0431\u043b\u0435\u0433\u0447\u0435\u043d\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f execute, \u0433\u043e\u0434\u043d\u0430\u044f \u043b\u0438\u0448\u044c \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u0411\u0414. \n\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 - \u0441\u043f\u0438\u0441\u043e\u043a \u043a\u043e\u0440\u0442\u0435\u0436\u0435\u0439 (\u0437\u0430\u043f\u0438\u0441\u0435\u0439). \n\u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0432\u0435\u0440\u043d\u0435\u0442 None. \n\n\u041c\u0435\u0442\u043e\u0434 select - \u043e\u0431\u043b\u0435\u0433\u0447\u0435\u043d\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f execute, \u0433\u043e\u0434\u043d\u0430\u044f \u043b\u0438\u0448\u044c \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u0411\u0414. \n\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 - \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043f\u043e \u043a\u043e\u0440\u0442\u0435\u0436\u0443 (\u043f\u043e \u0437\u0430\u043f\u0438\u0441\u0435). \n\u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u043a\u0438\u043d\u0435\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435. \n\n#### Neon \nNeon - \u0412\u0435\u0431-\u0441\u0435\u0440\u0432\u0435\u0440. \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0442\u0430\u043a\u043e\u0433\u043e \u0432\u0435\u0431-\u0441\u0435\u0432\u0435\u0440\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043e\u043d \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u043d\u0435 \u0432 \u0433\u043b\u0430\u0432\u043d\u043e\u043c \u0442\u0440\u0435\u0434\u0435, \u0447\u0442\u043e \u0443\u0434\u043e\u0431\u043d\u043e \u0434\u043b\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, \u0433\u0434\u0435 \u0432\u0435\u0431 \u043d\u0435 \u043f\u0435\u0440\u0432\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430. \n\n\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u0432\u0435\u0431-\u0441\u0435\u0440\u0432\u0435\u0440\u0443 \u0447\u0435\u0440\u0435\u0437 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0432 \u043c\u0435\u0442\u043e\u0434\u0435 init: \n* allowed_hosts - default: {'any'}, - \u0441\u043f\u0438\u0441\u043e\u043a \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 HTTP-\u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 Host \n* only_local_hosts - default: False, - \u0415\u0441\u043b\u0438 True, \u0442\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u044b\u0445 IP \n* believe_x_from_y - default: False, - \u0415\u0441\u043b\u0438 True, \u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 X-From-Y \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u043c IP \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \n* http_port - default: 8080, - \u043f\u043e\u0440\u0442 \u0434\u043b\u044f HTTP \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \n* https_port - default: 8081, - \u043f\u043e\u0440\u0442 \u0434\u043b\u044f HTTPS \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \n* use_ssl - default: False, - \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c SSL \n* ca_cert - default: None, - \u043f\u0443\u0442\u044c \u043a \u0444\u0430\u0439\u043b\u0443 \u0441 \u043a\u043e\u0440\u043d\u0435\u0432\u044b\u043c\u0438 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430\u043c\u0438 \n* ssl_certs - default: {} - \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 ssl: \u0430\u0441\u0441\u043e\u0446\u0438\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u043c\u0430\u0441\u0441\u0438\u0432, \u043a\u043b\u044e\u0447 - \u0438\u043c\u044f \u0445\u043e\u0441\u0442\u0430, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 - \u0441\u043b\u043e\u0432\u0430\u0440\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \n\u041f\u0440\u0438\u043c\u0435\u0440 \u0442\u0430\u043a\u043e\u0439 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438: { \n -- certfile - \u043f\u0443\u0442\u044c \u043a \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u043c\u0443 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0443 \u0432 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0435 PEM \n -- keyfile - \u043f\u0443\u0442\u044c \u043a \u0437\u0430\u043a\u0440\u044b\u0442\u043e\u043c\u0443 \u043a\u043b\u044e\u0447\u0443 \u043e\u0442 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430 \n -- keypassword - \u043f\u0430\u0440\u043e\u043b\u044c \u043e\u0442 \u043a\u043b\u044e\u0447\u0430 (\u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e) \n}\n* max_data_length - default: 4\u041a\u0411, - \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043c\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \n* max_header_count - default: 32, - \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043c\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \n* max_header_length - default: 2\u041a\u0411, - \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043c\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \n* site_directory - default: './var', - \u043f\u0443\u0442\u044c \u043a \u043f\u0430\u043f\u043a\u0435 \u0441 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c\u0438 \u0444\u0430\u0439\u043b\u0430\u043c\u0438 \u0441\u0430\u0439\u0442\u0430 (html/js/css) \n* threading - default: False, - \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u0432 \u043d\u043e\u0432\u043e\u043c \u0442\u0440\u0435\u0434\u0435? \n* use_neon_server - default: False, - \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 ? (\u0432\u044b\u0434\u0430\u0447\u0430 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0444\u0430\u0439\u043b\u043e\u0432/\u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438) \n* response_settings - default: {}, - \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432 \u043e\u0442\u0432\u0435\u0442\u0430 \n -- cache_min - default 120, - \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 'Cache-Control' \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445 \n -- max_response_size - default 2^20, - \u041c\u0430\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u043e\u0442\u0432\u0435\u0442\u0430 \u043d\u0430 \u0437\u0430\u043f\u0440\u043e\u0441 (\u0434\u043b\u044f \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0444\u0430\u0439\u043b\u043e\u0432) \n* single_request_per_socket - default: True, - \u0415\u0441\u043b\u0438 True, \u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u0440\u0438\u043d\u0446\u0438\u043f \"\u043e\u0434\u043d\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 - \u043e\u0434\u0438\u043d \u0437\u0430\u043f\u0440\u043e\u0441\" \n* enable_stats - default: True, - \u0415\u0441\u043b\u0438 True, \u0442\u043e \u043d\u0435\u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0443 \n\n\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u044d\u0442\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430:\n```python\ndef add_site_module(self, module, path: str=None, response_type: str=None) \ndef add_ws_handler(self, handler, path: str=None)\ndef add_middleware(self, target=None, post=None) \n```\n\u041c\u0435\u0442\u043e\u0434 add_site_module \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 module \u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432. \n\u041c\u043e\u0434\u0443\u043b\u044c \u0431\u0443\u0434\u0435\u0442 \u0430\u0441\u0441\u043e\u0446\u0438\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u043e \u0432\u0441\u0435\u043c\u0438 url, \u0443 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0430\u0447\u0430\u043b\u043e \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441 path (\u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0438\u0437 \u0430\u0441\u0441\u043e\u0446\u0438\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0441 \u043d\u0430\u0438\u0431\u043e\u043b\u044c\u0448\u0438\u043c path) \n\u041c\u043e\u0434\u0443\u043b\u0435\u043c \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043b\u044e\u0431\u043e\u0439 \u043e\u0431\u044a\u0435\u043a\u0442, \u043a\u043b\u0430\u0441\u0441 \u0438\u043b\u0438 \u043c\u043e\u0434\u0443\u043b\u044c, \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u044e\u0449\u0438\u0439 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443. \n\u0410 \u0438\u043c\u0435\u043d\u043d\u043e \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043c\u0435\u0442\u043e\u0434\u044b: \n* get(request) - \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043c\u0435\u0442\u043e\u0434\u0430 GET. \n* post(requests) - \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043c\u0435\u0442\u043e\u0434\u0430 POST. \n* head(requests) - \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043c\u0435\u0442\u043e\u0434\u0430 HEAD. \n* put(requests) - \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043c\u0435\u0442\u043e\u0434\u0430 PUT. \n* delete(requests) - \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043c\u0435\u0442\u043e\u0434\u0430 DELETE. \n* options(requests) - \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043c\u0435\u0442\u043e\u0434\u0430 OPTIONS. \n\n\u0415\u0441\u043b\u0438 \u043f\u0440\u0438\u0448\u0435\u043b \u0437\u0430\u043f\u0440\u043e\u0441 \u0441 \u043c\u0435\u0442\u043e\u0434\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043c\u043e\u0434\u0443\u043b\u0435\u043c, \u043a\u043b\u0438\u0435\u043d\u0442\u0443 \u043e\u0440\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f 405. \n\n\u041e\u0431\u044a\u0435\u043a\u0442 requests \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432 \u0441\u0435\u0431\u0435 \u043f\u043e\u043b\u0435 resp - \u043e\u0431\u044a\u0435\u043a\u0442 \u043a\u043b\u0430\u0441\u0441\u0430 Responce \u0438\u043b\u0438 \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a\u0430, \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0438\u0439 \u0437\u0430 \u043e\u0442\u0432\u0435\u0442 \u043a\u043b\u0438\u0435\u043d\u0442\u0443, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d \u0432 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u0430. \n\u0415\u0441\u043b\u0438 response_type \u0431\u044b\u043b \u043f\u0435\u0440\u0435\u0434\u0430\u043d, \u0442\u043e \u043f\u043e\u043b\u0435 \u0440\u0435\u0441\u043f \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430: \n\n| response_type | response class | \n|-----|------| \n| base | Response | \n| static | StaticResponse | \n| rest | RestResponse | \n\n\u041c\u0435\u0442\u043e\u0434 add_ws_handler \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439 \u043f\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443 WebSocket. \n\u0415\u0441\u043b\u0438 path \u043d\u0435 \u0431\u044b\u043b \u043f\u0435\u0440\u0435\u0434\u0430\u043d, \u0431\u0443\u0434\u0435\u0442 \u0432\u0437\u044f\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044f Path \u0443 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430.\n\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043e\u0431\u044f\u0437\u0430\u043d \u0431\u044b\u0442\u044c \u043a\u043b\u0430\u0441\u0441\u043e\u043c kframe.plugins.xeon.WSHandler \u0438\u043b\u0438 \u0435\u0433\u043e \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a\u043e\u043c. \n\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u0432\u0430\u043d, \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0437\u0430\u044f\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u043f\u0443\u0442\u044c \u0438 \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0445\u0435\u0434\u0435\u0440 upgrade \u0441\u043e \u0445\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c 'websocket'. \n\n\u041c\u0435\u0442\u043e\u0434 add_middleware \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 target \u0438\u043b\u0438 post \u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0440\u0435\u0434\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0438\u043b\u0438 \u043f\u043e\u0441\u0442\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0432\u0435\u043d\u043d\u043e, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0432\u044b\u0437\u0432\u0430\u043d\u044b \u043c\u0435\u0436\u0434\u0443 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u043e\u043c \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u0441\u043e\u043a\u0435\u0442\u0430 \u0438 \u0432\u044b\u0437\u043e\u0432\u043e\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0438\u043b\u0438 \u043f\u043e\u0441\u043b\u0435 \u0432\u044b\u0437\u043e\u0432\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e. \n\u041f\u0440\u0435\u0434\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a - \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 (callable), \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0431\u0443\u0434\u0443\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u044b \u0434\u0432\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430: \u0437\u0430\u043f\u0440\u043e\u0441 \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0437\u0430\u043f\u0440\u043e\u0441\u0430. \n\u041f\u043e\u0441\u0442\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a - \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 (callable), \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0431\u0443\u0434\u0443\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u044b \u0442\u0440\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430: \u0437\u0430\u043f\u0440\u043e\u0441, \u043e\u0442\u0432\u0435\u0442 \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0437\u0430\u043f\u0440\u043e\u0441\u0430, \u0441\u0435\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0432\u0448\u0438\u0439 \u043e\u0442\u0432\u0435\u0442. \n\u0412\u0441\u0435 \u043f\u0440\u0435\u0434\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0431\u0443\u0434\u0443\u0442 \u0432\u044b\u0437\u0432\u0430\u043d\u044b \u0432 \u0442\u043e\u0439 \u0436\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u0447\u0442\u043e \u0438 \u0431\u044b\u043b\u0438 \u0437\u0430\u0440\u0435\u0433\u0435\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u044b. \n\u0412\u0441\u0435 \u043f\u043e\u0441\u0442\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0431\u0443\u0434\u0443\u0442 \u0432\u044b\u0437\u0432\u0430\u043d\u044b \u0432 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435, \u0447\u0442\u043e \u0438 \u0431\u044b\u043b\u0438 \u0437\u0430\u0440\u0435\u0433\u0435\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u044b. \n\n#### Xeon \nXeon - \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 WebSocket.\n\n\u041a\u043b\u0430\u0441\u0441 WSHandler \u0438\u043c\u0435\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0432\u0435\u0431-\u0441\u043e\u043a\u0435\u0442\u0430\u043c\u0438:\n```python\ndef on_request(self)\ndef on_validate(self)\ndef on_end(self)\ndef handle_incoming_msg(self, message)\ndef handle_incoming_bin(self, message)\ndef send_message(self, message)\ndef send_binay(self, message)\ndef close(self)\ndef finish(self)\n```\n\n\u041c\u0435\u0442\u043e\u0434 on_request \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u0432\u0430\u043d \u0434\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0441\u043e\u0435\u0434\u043d\u0438\u0435\u043d\u0438\u044f. \n\u041c\u0435\u0442\u043e\u0434 on_validate \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u0432\u0430\u043d \u043f\u043e\u0441\u043b\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0441\u043e\u0435\u0434\u043d\u0438\u0435\u043d\u0438\u044f. \n\u041c\u0435\u0442\u043e\u0434 on_end \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u0432\u0430\u043d \u043f\u0440\u044f\u043c \u043f\u0435\u0440\u0435\u0434 \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u0435\u043c \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f. \n\u041c\u0435\u0442\u043e\u0434\u044b handle_incoming_bin \u0438 handle_incoming_msg \u0431\u0443\u0434\u0443\u0442 \u0432\u044b\u0437\u0432\u0430\u043d\u044b \u043f\u0440\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0431\u0438\u043d\u0430\u0440\u043d\u043e\u0433\u043e \u0438\u043b\u0438 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u0441\u043e\u043e\u0442\u0432. \n\u041c\u0435\u0442\u043e\u0434\u044b send_message \u0438 send_binary \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u0438\u043b\u0438 \u0431\u0438\u043d\u0430\u0440\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u0441\u043e\u043e\u0442\u0432. \n\u041c\u0435\u0442\u043e\u0434 close \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u0432\u0430\u043d \u043a\u0430\u043a \u0441\u0438\u0433\u043d\u0430\u043b \u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u0447\u0442\u043e \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0437\u0430\u043a\u0440\u044b\u0442\u044c \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435. \u0421\u0435\u0440\u0432\u0435\u0440 \u0431\u0443\u0434\u0435\u0442 \u043e\u0436\u0438\u0434\u0430\u0442\u044c \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u044f. \n\u041c\u0435\u0442\u043e\u0434 finish \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0435 \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u0435 \u0441\u043e\u0435\u0434\u0438\u0435\u043d\u0438\u0435. \n\n\n#### Auth \nAuth - \u0414\u043b\u044f \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u0441\u0435\u0441\u0441\u0438\u0439 \n\n\u042d\u0442\u043e\u0442 \u043a\u043b\u0430\u0441\u0441 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044e \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043a\u0443\u043a\u0438 \u0444\u0430\u0439\u043b\u0430. \n\u0418 \u044d\u0442\u043e\u0442 \u043a\u043b\u0430\u0441\u0441 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445. \n\u041b\u043e\u0433\u0438\u043a\u0430 \u0442\u0430\u043a\u043e\u0432\u0430, \u0447\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a\u0443\u043a\u0438 - \u044d\u0442\u043e \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u0432 \u0441\u0435\u0431\u0435 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u044b \u044e\u0437\u0435\u0440\u0430, \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043c\u0435\u0442\u043a\u0438 \u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u043e\u0447\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435. \n\n\u041a\u043b\u0430\u0441\u0441 \u0438\u043c\u0435\u0435\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0432 \u0432\u0438\u0434\u0435 \u0434\u0432\u0443\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432: \n```python\ndef generate_cookie(self, user_id, **kwargs) \ndef valid_cookie(self, cookie, ip=None) \n```\n\n\u041f\u0435\u0440\u0432\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a\u0443\u043a\u0438-\u0444\u0430\u0439\u043b\u0430 \u0438\u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0431\u0430\u0439\u0442\u043e\u0432\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443. \n\u041f\u043e\u043c\u0438\u043c\u043e \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430 \u044e\u0437\u0435\u0440\u0430 (\u0446\u0435\u043b\u043e\u0435 \u0447\u0438\u0441\u043b\u043e) \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u044b: \n* expires - \u0446\u0435\u043b\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0441\u0435\u043a\u0443\u043d\u0434 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u043c \u044d\u0442\u043e\u0442 \u043a\u0443\u043a\u0438 \u0441 \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \n* ip - (\u0441\u0442\u0440\u043e\u043a\u0430) ip-\u0430\u0434\u0440\u0435\u0441 \u043a\u043b\u0438\u0435\u043d\u0442\u0430. \u0415\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u043d, \u0442\u043e \u043f\u0440\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u043a\u043b\u0438\u0435\u043d\u0442 \u0438\u043c\u0435\u0435\u0442 \u0442\u043e\u0442 \u0436\u0435 ip \n\n\u0412\u0442\u043e\u0440\u043e\u0439 \u043c\u0435\u0442\u043e\u0434 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0431\u0430\u0439\u0442\u043e\u0432\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u0438 \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e ip \u0430\u0434\u0440\u0435\u0441 \u043a\u043b\u0438\u0435\u043d\u0442. \n\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u043b\u0438\u0431\u043e \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u044e\u0437\u0435\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442 \u043a\u0443\u043a\u0438, \u043b\u0438\u0431\u043e None, \u0435\u0441\u043b\u0438 \u043a\u0443\u043a\u0438 \u043d\u0435\u0432\u0430\u043b\u0438\u0434\u0435\u043d. \n\u0415\u0441\u043b\u0438 \u0431\u044b\u043b \u043f\u0435\u0440\u0435\u0434\u0430\u043d ip, \u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u0441\u044f, \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0442 \u043b\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u0439 ip \u0438 ip \u043f\u0440\u0438 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043a\u0443\u043a\u0438. \n\n#### Stats \nStats - \u0421\u0431\u043e\u0440 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438 \n\n\u041e\u0431\u044a\u0435\u043a\u0442 \u044d\u0442\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0430\u043a\u043a\u0443\u043c\u0443\u043b\u0438\u0440\u0443\u044e\u0449\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0440\u0430\u0437\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432.\n\n\n\u0418\u043c\u0435\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0432 \u0432\u0438\u0434\u0435 \u0447\u0435\u0442\u044b\u0440\u0435\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432: \n```python\ndef init(self, **kwargs)\ndef init_stat(self, key, type, **kwargs) \ndef add(self, key, value=None) \ndef init_and_add(self, key, type, value=None, **kwargs)\ndef get(self, key) \ndef export(self, extension=False) \n```\n\ninit \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b:\n* add_neon_handler - default False - \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u041d\u0435\u043e\u043d \u0440\u0443\u0447\u043a\u0443 \u0432\u044b\u0434\u0430\u0447\u0438 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438 \n* neon_handler_cfg - default {} - \u043d\u0430\u0431\u043e\u0440 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0434\u043b\u044f \u043c\u043e\u0434\u0443\u043b\u044f \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u043d\u0435\u043e\u043d\u0430. \n\u041f\u0440\u0438\u043c\u0435\u0440: \n -- only_local_hosts - default True - \u0432\u044b\u0434\u0430\u0447\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0441 \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u044b\u0445 IP (127.0.0.1, 192.168.*.* \u0438\u0442\u0434) \n -- stat_url - default '/{parent.name}-admin/stats' - url, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 \n\ninit_stat - \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u0442 \u043e \u043d\u0430\u0447\u0430\u043b\u0435 \u0441\u0431\u043e\u0440\u0430 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438 \u0441 \u043a\u043b\u044e\u0447\u043e\u043c key \u0438 \u0442\u0438\u043f\u0430 type \n\u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0442\u0438\u043f\u043e\u0432: \n* aver - \u0441\u0440\u0435\u0434\u043d\u0435\u0435 \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 500 \u0437\u0430\u043c\u0435\u0440\u043e\u0432. (\u043c\u043e\u0436\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0432 count \u0432 kwargs) \n* single - \u0438\u043c\u0435\u0435\u0442 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \n* inc - \u0441\u0447\u0435\u0442\u0447\u0438\u043a. (\u043c\u043e\u0436\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043d\u0430\u0448 \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0430, \u043f\u0435\u0440\u0435\u0434\u0430\u0432 increment \u0432 kwargs)\n* sum - \u0441\u0443\u043c\u043c\u0430\u0442\u043e\u0440. \n* event - \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0441 \u0438\u0445 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u043c\u0435\u0442\u043a\u0430\u043c\u0438, \u0430\u0432\u0442\u0440\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0443\u0434\u0430\u043b\u044f\u0435\u0442 \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u0435 (\u043f\u043e\u043b\u0435 limit) \n* event_counter - \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u043a\u043e\u043b-\u0432\u043e \u0441\u043e\u0431\u044b\u0442\u044b\u0439 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u0435\u0434\u0448\u0438\u0445 \u0432 \u043a\u0430\u0436\u0434\u0443\u044e \u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u0441 \u0438\u0445 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u043c\u0435\u0442\u043a\u0430\u043c\u0438, \u0430\u0432\u0442\u0440\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0443\u0434\u0430\u043b\u044f\u0435\u0442 \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u0435 (\u043f\u043e\u043b\u0435 limit) \n\n\u0422\u0430\u043a \u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u0440\u0430\u0437\u0443 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043f\u0435\u0440\u0435\u0434\u0430\u0432 default \u0432 kwargs. \n\u041c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u0434\u0430\u0442\u044c \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0435 \u043f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0432 desc \u0432 kwargs. \n\n\u041c\u0435\u0442\u043e\u0434 add \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0437\u0430\u043c\u0435\u0440 value \u0432 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0443 c \u043a\u043b\u044e\u0447\u043e\u043c key. \n\u0414\u043b\u044f \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0430 \u043c\u043e\u0436\u043d\u043e \u043d\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \n\n\u041c\u0435\u0442\u043e\u0434 init_and_add \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043a\u0430\u043a \u043c\u0435\u0442\u043e\u0434 add \u043d\u043e, \u0435\u0441\u043b\u0438 \u0441\u0431\u043e\u0440 \u0441\u0442\u0438\u0442\u0438\u0441\u0442\u0438\u043a\u0438 \u0441 \u0442\u0430\u043a\u0438\u043c \u043a\u043b\u044e\u0441\u043e\u043c \u0435\u0449\u0435 \u043d\u0435 \u0438\u043d\u0438\u0447\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d, \u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u0432\u0430\u043d \u043c\u0435\u0442\u043e\u0434 init_stat \n\n\u041c\u0435\u0442\u043e\u0434 get \u0432\u0435\u0440\u043d\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0438\u0435 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u043a\u043b\u044e\u0447\u0430 key, \u043b\u0438\u0431\u043e None, \u0435\u0441\u043b\u0438 \u043d\u0435\u0442 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438 \u043f\u043e \u043a\u043b\u044e\u0447\u0443. \n(aver \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u043d \u043d\u0435 \u0431\u0443\u0434\u0435\u0442)\n\n\u041c\u0435\u0442\u043e\u0434 export \u0432\u0435\u0440\u043d\u0435\u0442 dict, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0432\u0441\u044f \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430. \n(aver \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u043d) \n\u0415\u0441\u043b\u0438 \u0431\u044b\u043b \u043f\u043e\u0434\u043d\u044f\u0442 \u0444\u043b\u0430\u0433 extension, \u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a\u0430\u0436\u043e\u0439 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u043f\u0440\u043e\u0432\u043e\u0436\u0434\u0430\u0442\u044c\u0441\u044f \u043f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u0435\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u044b\u043c \u043f\u0440\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438. \n\n#### Mchunk \nMchunk - \u0425\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0441\u0435\u043a\u0440\u0435\u0442\u043e\u0432 \n\n\u041b\u043e\u0433\u0438\u043a\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0442\u0430\u043a\u043e\u0432\u0430, \u0447\u0442\u043e \u043e\u043d \u043d\u0435 \u0445\u0440\u0430\u043d\u0438\u0442 \u0432\u0430\u0436\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u0430 \u0445\u0440\u0430\u043d\u0438\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043a\u0430\u043a \u0438\u0445 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c. \n\u0410 \u0438\u043c\u0435\u043d\u043d\u043e: \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u043c\u0430\u0441\u043a\u0430, \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0441\u043b\u0443\u0447\u0430\u043d\u043d\u043e, \u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 XOR \u043c\u0430\u0441\u043a\u0438 \u0438 \u0432\u0430\u0436\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445. \n\n\u041c\u0435\u0442\u043e\u0434\u044b \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u044d\u0442\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430: \n```python\ndef set(self,data) \ndef mask(self) \ndef unmask(self) \ndef get(self) \n```\n\nset \u0437\u0430\u0434\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0434\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c, \u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0434\u043b\u044f \u043d\u0438\u0445 \u043c\u0430\u0441\u043a\u0443 \nmask - \u043c\u0430\u0441\u043a\u0438\u0440\u0443\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435. \nunmask - \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435. \nget - \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438, \u043d\u0435 \u043c\u0435\u043d\u044f\u044f \u0438\u0445. \n\n\u041c\u0435\u0442\u043e\u0434\u044b set, mask, unmask \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u044b \u0432 \u0441\u0442\u0438\u043b\u0435 ORM - \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u044d\u0442\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430. \n\u0422\u0430\u043a\u0436\u0435 \u043a\u043b\u0430\u0441\u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u044b\u043c \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u043e\u043c \n\n#### Cache \nCache - \u0412\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 c \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u043a\u0441\u043e\u0439 \u043e\u0447\u0438\u0441\u0442\u0438 \u043f\u0440\u043e\u0442\u0443\u0445\u0448\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \n\u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b:\n* auto_clean_in_new_thread - default: False - \u0415\u0441\u043b\u0438 True, \u0442\u043e \u0441\u043e\u0437\u0434\u0430\u0441\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u0439 \u0442\u0440\u0435\u0434 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0442\u0443\u0445\u043b\u043e\u0441\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \n* timeout - default: 1.0 - \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438. \u0418\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f, \u0435\u0441\u043b\u0438 auto_clean_in_new_thread == False \n* save_file - default: \"cache.json\" - \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430 \u0434\u043b\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \n* autosave - default: False - \u0435\u0441\u043b\u0438 True, \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0444\u0430\u0439\u043b. \u0418\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f, \u0435\u0441\u043b\u0438 auto_clean_in_new_thread == False \n\n#### Eventer \nEventer - \u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \n\u041a\u0430\u043a \u043a\u044d\u0448, \u043d\u043e \u043e\u0434\u0438\u043d \u0442\u0440\u0435\u0434, \u0438 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438 \u0437\u0430\u043f\u0438\u0441\u0438, \u0438 \u0447\u0442\u0435\u043d\u0438\u044f - \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b \n\n#### Planner \nPlanner - \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0437\u0430\u0434\u0430\u0447\u0438 \u043f\u043e \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u044e \n\u0421\u043f\u0438\u0441\u043e\u043a \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043f\u043b\u0430\u0433\u0438\u043d\u0430: \nenable_stats (bool), default = False - \u0444\u043b\u0430\u0433 \u0430\u0433\u0440\u0435\u0433\u0430\u0446\u0438\u0438 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438 \u0432 \u043f\u043b\u0430\u0433\u0438\u043d\u0435 stats \nadd_neon_handler (bool), default = False - \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 REST API \u0432 Neon \nneon_handler_cfg (dict), default = {} - \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043c\u043e\u0434\u0443\u043b\u044f \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f neon \n\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043c\u043e\u0434\u0443\u043b\u044f \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f: \n-- only_local_hosts (bool), default = True - \u0444\u043b\u0430\u0433 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u044b\u0445 \u0430\u0434\u0440\u0435\u0441\u043e\u0432 \n-- stat_url (str), default = '/%s-admin/planner' % parent.name - \u043d\u0430\u0447\u0430\u043b\u043e url, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043c\u043e\u0434\u0443\u043b\u044c \u0431\u0443\u0434\u0435\u0442 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \n\n\u041a\u0430\u0436\u0434\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430\u0431\u043e\u0440\u043e\u043c \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432:\n* key (str) - \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043b\u044e\u0447/\u0438\u043c\u044f \u0437\u0430\u0434\u0430\u0447\u0438 \n* target (function) - \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u0430 \n\u0418 \u043d\u0430\u0431\u043e\u0440\u043e\u043c \u0432\u0442\u043e\u0440\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432:\n* enable (bool), default = True - \u0444\u043b\u0430\u0433 \u0443\u0447\u0430\u0441\u0442\u0443\u0435\u0442 \u043b\u0438 \u0437\u0430\u0434\u0430\u0447\u0430 \u0432 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 (\u0438 \u0441\u043e\u043e\u0442\u0432 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430) \n* hours (int), default = 0 - \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u043c\u0435\u0436\u0434\u0443 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043c\u0438 \u0432 \u0447\u0430\u0441\u0430\u0445 (\u0441\u0443\u043c\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441 \u0437\u043d\u0430\u0447\u0435\u043d\u044f\u043c\u0438 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0430 \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u0435\u0434\u0438\u043d\u0438\u0446\u0430\u0445 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f) \n* min (int), default = 0 - \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u043c\u0435\u0436\u0434\u0443 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043c\u0438 \u0432 \u043c\u0438\u043d\u0443\u0442\u0430\u0445 (\u0441\u0443\u043c\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441 \u0437\u043d\u0430\u0447\u0435\u043d\u044f\u043c\u0438 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0430 \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u0435\u0434\u0438\u043d\u0438\u0446\u0430\u0445 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f) \n* sec (int), default = 0 - \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u043c\u0435\u0436\u0434\u0443 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043c\u0438 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445 (\u0441\u0443\u043c\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441 \u0437\u043d\u0430\u0447\u0435\u043d\u044f\u043c\u0438 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0430 \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u0435\u0434\u0438\u043d\u0438\u0446\u0430\u0445 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f) \n* shedule - \u0441\u043f\u0438\u0441\u043e\u043a \u043a\u043e\u0440\u0442\u0435\u0436\u0435\u0439 ('HH:MM:SS', 'HH:MM:SS'), default ('00:00:00','23:59:59') - \u0420\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u0432 (\u0441, \u043f\u043e) \n* calendar - { 'allowed' or 'disallowed': { month as key [1..12] => set of days [1..31] }} \n\tdefault {} (\u0432\u0441\u0435\u0433\u0434\u0430 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u043e) - \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u0434\u043d\u0438, \u043a\u043e\u0433\u0434\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0438\u043b\u0438 \u043d\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c. \u041c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0438\u0437 \u0434\u0432\u0443\u0445 \u043a\u043b\u044e\u0447\u0435\u0439 {allowed/disallowed} \n* weekdays - {0,..,6} - \u0441\u043f\u0438\u0441\u043e\u043a \u043d\u043e\u043c\u0435\u0440\u043e\u0432 \u0434\u043d\u0435\u0439 \u043d\u0435\u0434\u0435\u043b\u0438, \u043a\u043e\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0443. \u041f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a = 0, \u0412\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435 = 6. \n* offset (int), default = 0 - \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u0439 \u043e\u0442\u0441\u0442\u0443\u043f \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445 \n* args (list), , default = [] - \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \n* kwargs (dict), default = {} - \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \n* threading (bool), default = False . \u0435\u0441\u043b\u0438 True \u0438\u043b\u0438 'thread', \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0432 \u043d\u043e\u0432\u043e\u043c \u043f\u043e\u0442\u043e\u043a\u0435, \u0435\u0441\u043b\u0438 'process', \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442 \u0432 \u043d\u043e\u0432\u043e\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435. \n* after (int), default = None . \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u043c\u0435\u0442\u043a\u0430, \u0440\u0430\u043d\u044c\u0448\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 (None - \u0431\u0435\u0437 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f) \n* times (int), default = None . \u043a\u043e\u043b-\u0432\u043e \u0440\u0430\u0437, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f (None - \u0431\u0435\u0437 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f) \n* max_parallel_copies (int), default = None - \u043c\u0430\u043a\u0441\u0438\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b-\u0432\u043e \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 (None - \u0431\u0435\u0437 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f) \n\n\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u0438\u043c\u0435\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u0442\u043e\u0434\u043e\u0432:\n```python\ndef registrate(self, **task)\ndef update_task(self, key, **task)\ndef delete_task(self, key):\ndef get_task(self, key):\ndef run_task(self, key, set_after=False):\ndef get_running_tasks(self):\ndef get_shedule(self):\ndef get_next_task(self):\n```\nregistrate \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0437\u0430\u0434\u0430\u0447\u0443. \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 True \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0443\u0441\u043f\u0435\u0445\u0430; \nupdate_task \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u0437\u0430\u0434\u0430\u0447\u0443 \u0438\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043d\u043e\u0432\u0443\u044e. \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 True \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0443\u0441\u043f\u0435\u0445\u0430; \ndelete_task \u0443\u0434\u0430\u043b\u044f\u0435\u0442 \u0437\u0430\u0434\u0430\u0447\u0443, \u0435\u0441\u043b\u0438 \u0442\u0430\u043a\u0430\u044f \u0438\u043c\u0435\u043b\u0430\u0441\u044c; \nget_task \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u043b\u043e\u0432\u0430\u0440\u044c, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u0432\u0441\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0437\u0430\u0434\u0430\u0447\u0435, \u0438\u043b\u0438 None \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0435\u0443\u0434\u0430\u0447\u0438; \nget_running_tasks \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0437\u0430\u0434\u0430\u0447, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f, \u0438 \u043a\u043e\u0433\u0434\u0430 \u043e\u043d\u0438 \u0431\u044b\u043b\u0438 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u044b; \nget_shedule \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0437\u0430\u0434\u0430\u0447, \u0432\u0440\u0435\u043c\u044f, \u043a\u043e\u0433\u0434\u0430 \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u044b, \u0438, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0435\u043a\u0443\u043d\u0434 \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0434\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430; \nget_next_task \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u0435\u043d get_shedule, \u043d\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0442\u043e\u043b\u044c\u043a\u043e \u043e \u043f\u0435\u0440\u0432\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435. \n\n## \u041c\u043e\u0434\u0443\u043b\u0438\n\n#### Crypto \nCrypto - \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043a\u0440\u0438\u043f\u0442\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \n\u0418\u043c\u0435\u0435\u0442 \u0432 \u0441\u0435\u0431\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b: \n* \u0445\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \n* \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043e\u0431\u0449\u0435\u0433\u043e \u0441\u0435\u043a\u0440\u0435\u0442\u0430 \n* \u043f\u043e\u0434\u043f\u0438\u0441\u0438 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043f\u043e\u0434\u043f\u0438\u0441\u0438 \n* \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f \n\n\u0422\u0430\u043a\u0436\u0435 \u0438\u043c\u0435\u044e\u0442\u0441\u044f \u0432\u0442\u043e\u0440\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0442\u0430\u043a\u0438\u0435, \u043a\u0430\u043a \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u044d\u0444\u0438\u043c\u0435\u0440\u043d\u043e\u0439 \u043f\u0430\u0440\u044b \u043a\u043b\u044e\u0447\u0435\u0439 \u0438\u043b\u0438 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0433\u043e \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u044e\u0449\u0435\u0433\u043e \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u0434\u043b\u044f \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \n\n#### Art \nArt - \u042f\u0437\u044b\u043a \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0447\u043d\u0435\u0435 JSON \n\n\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043c\u043e\u0434\u0443\u043b\u044f:\n```python\ndef marshal(data, mask=None, random=True) \ndef unmarshal(data=None, fd=None, mask=None) \n```\n\n\u041c\u0435\u0442\u043e\u0434 marshal - \u043c\u0430\u0440\u0448\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u043e\u0431\u044a\u0435\u043a\u0442 \u0432 \u0431\u0430\u0439\u0442\u043e\u0432\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443. \n\u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0430 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0442\u0430\u043a\u043e\u0432\u0430, \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043d\u0435\u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e \u043c\u0430\u0440\u0448\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u043d\u043e \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u044b\u043c. \n\u0424\u043b\u0430\u0433 random \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043b\u0438 \u0440\u0430\u043d\u0434\u043e\u0432 \u0432 \u043d\u0435\u043e\u0431\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e\u0441\u0442\u044f\u0445. \n\u0415\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0431\u0430\u0439\u0442\u043e\u0432\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u043a\u0430\u043a \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 mask, \u043a \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u043c\u0443 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d XOR \u0441 \u044d\u0442\u043e\u0439 \u043c\u0430\u0441\u043a\u043e\u0439. \n\n\u041c\u0435\u0442\u043e\u0434 unmarshal - \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442 \u0438\u0437 \u0431\u0430\u0439\u0442\u043e\u0432\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438. \n\u0414\u0430\u043d\u043d\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u043a\u0430\u043a \u0441\u0442\u0440\u043e\u043a\u043e\u0439, \u0442\u0430\u043a \u0438 \u043f\u043e\u0442\u043e\u043a\u043e\u043c \u0434\u0430\u043d\u043d\u044b\u0445 (\u0444\u0430\u0439\u043b/\u0441\u043e\u043a\u0435\u0442). \n\u0415\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0431\u0430\u0439\u0442\u043e\u0432\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u043a\u0430\u043a \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 mask, \u043a \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u043c\u0443 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d XOR \u0441 \u044d\u0442\u043e\u0439 \u043c\u0430\u0441\u043a\u043e\u0439. \n\n#### JScheme \nJScheme - \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432. \n\u0421\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432\u0441\u0435\u0433\u043e \u043e\u0434\u043d\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e: \n```python \ndef apply(obj, scheme) \n``` \nobj - \u0438\u043c\u0435\u044e\u0449\u0438\u0439\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0438 \u043f\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u043c \nscheme - \u043f\u0440\u0430\u0432\u0438\u043b\u0430, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442. \n\u041f\u0440\u0438\u043d\u0446\u0438\u043f \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043f\u0440\u0430\u0432\u0438\u043b \u043f\u043e\u0445\u043e\u0436 \u043d\u0430 JSON-scheme. \n\n## \u041f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440: \n\n### \u0432\u0435\u0431-\u0441\u0435\u0440\u0432\u0438\u0441 \n\nmain.py: \n```python\n#!/usr/bin/env python3\nfrom kframe.base.parent import Parent\nfrom kframe.plugins.neon import Neon\nParent(name='TestApp').add_plugin(target=Neon, kwargs={\n\t'site_directory': '.',\n\t'use_neon_server': True,\n\t'http_port': 8080,\n}).init().start()\n# open http://127.0.0.1:8080\n```\n\n\u0437\u0430\u043f\u0443\u0441\u043a: \n`$ ./main.py --stdout --debug` \n\n### \u043a\u0440\u043e\u043d-\u0441\u0435\u0440\u0432\u0438\u0441 \n\nmain.py: \n```python\n#!/usr/bin/env python3\nimport time\nfrom kframe.base.parent import Parent\nfrom kframe.plugins.planner import Planner\np = Parent(name='TestApp').add_plugin(target=Planner).init()\np.planner.registrate(key='Task-1', target=lambda: print(time.ctime()), sec=5)\np.start() # Here program will stop and wait for end of Planner, who will work untill get SIGINT\np.stop()\n```\n\n\u0437\u0430\u043f\u0443\u0441\u043a: \n`$ ./main.py --stdout --debug` \n\n## \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430\n\n\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u0443\u0442\u0438\u043b\u0438\u0442\u0443 pip: \n```bash\n$ pip install git+https://github.com/moff4/kframe.git \n``` \n\u0438\u043b\u0438 \u0447\u0435\u0440\u0435\u0437 \u0440\u0443\u0447\u043d\u0443\u044e \u0441\u0431\u043e\u0440\u043a\u0443: \n```bash\n$ python3 setup.py build \n$ python3 setup.py install \n```\n\n## \u0417\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \n* pygost - \u041a\u0440\u0438\u043f\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \n* mysql-connector - \u0434\u0440\u0430\u0439\u0432\u0435\u0440 MySQL \n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/moff4/kframe", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "kframe", "package_url": "https://pypi.org/project/kframe/", "platform": "", "project_url": "https://pypi.org/project/kframe/", "project_urls": { "Homepage": "https://github.com/moff4/kframe" }, "release_url": "https://pypi.org/project/kframe/3.5.1/", "requires_dist": [ "pygost", "mysql-connector" ], "requires_python": "", "summary": "Framework for simple web service with it's own web-server Neon", "version": "3.5.1" }, "last_serial": 5308312, "releases": { "2.4.3": [ { "comment_text": "", "digests": { "md5": "eb669d36438d194852dc6651582ea125", "sha256": "205bb18ec3090190914938ec8e09532fea8e798e6cfbb8f8a73c47d2e6af6a3a" }, "downloads": -1, "filename": "kframe-2.4.3-py3.7.egg", "has_sig": false, "md5_digest": "eb669d36438d194852dc6651582ea125", "packagetype": "bdist_egg", "python_version": "3.7", "requires_python": null, "size": 111923, "upload_time": "2019-02-22T10:19:54", "url": "https://files.pythonhosted.org/packages/b2/32/558606cf99155f37daceb3e8a44372f6dbb21b8d49bcf29466662f47a241/kframe-2.4.3-py3.7.egg" } ], "2.4.4": [ { "comment_text": "", "digests": { "md5": "52ddc2d2b1af81bca4d12cc3587d1644", "sha256": "80763db33371484b1600f2ce7a96bdf8aa042adeee0b8f8089a7f5ed36a6a0eb" }, "downloads": -1, "filename": "kframe-2.4.4-py3.7.egg", "has_sig": false, "md5_digest": "52ddc2d2b1af81bca4d12cc3587d1644", "packagetype": "bdist_egg", "python_version": "3.7", "requires_python": null, "size": 113877, "upload_time": "2019-02-22T10:30:50", "url": "https://files.pythonhosted.org/packages/47/e7/6bce9bfcb6067834b1ceca5b6a9ab90fb8504310cc58e5e76b17f93e9bd7/kframe-2.4.4-py3.7.egg" } ], "2.4.5": [ { "comment_text": "", "digests": { "md5": "6869a1ab8fc794c9f4486fca0ef47d56", "sha256": "8bd638ff3a0d500f0b41498d0d9804fd3735285f4b06162864041c51e1a6271f" }, "downloads": -1, "filename": "kframe-2.4.5-py3.5.egg", "has_sig": false, "md5_digest": "6869a1ab8fc794c9f4486fca0ef47d56", "packagetype": "bdist_egg", "python_version": "3.5", "requires_python": null, "size": 115396, "upload_time": "2019-02-23T17:48:41", "url": "https://files.pythonhosted.org/packages/a5/09/806db2e62d05c016b8451a797039f0f7929f4804324426606b5ebd2fa3fa/kframe-2.4.5-py3.5.egg" }, { "comment_text": "", "digests": { "md5": "1dfe6f524ad7893589cd3f0ee4138fb6", "sha256": "ed6985c422ee18db64efbebd37fc04eb5c26a9f4ab9a01064b6a676ca278abab" }, "downloads": -1, "filename": "kframe-2.4.5-py3.7.egg", "has_sig": false, "md5_digest": "1dfe6f524ad7893589cd3f0ee4138fb6", "packagetype": "bdist_egg", "python_version": "3.7", "requires_python": null, "size": 113993, "upload_time": "2019-02-22T10:42:16", "url": "https://files.pythonhosted.org/packages/3e/df/864095af8e0fc19fb7f058bda86dfd281dd60e94823fa81f82b13c26da9a/kframe-2.4.5-py3.7.egg" } ], "2.5.0": [ { "comment_text": "", "digests": { "md5": "d49dbcf2ffd2517a6c11f2b4c66a3b4e", "sha256": "cd2ec6eb9950090fb50de6f946b0a862d427b259f26408717df6a4d2458c5e93" }, "downloads": -1, "filename": "kframe-2.5.0-py3.6.egg", "has_sig": false, "md5_digest": "d49dbcf2ffd2517a6c11f2b4c66a3b4e", "packagetype": "bdist_egg", "python_version": "3.6", "requires_python": null, "size": 114854, "upload_time": "2019-02-24T16:23:56", "url": "https://files.pythonhosted.org/packages/c6/6d/5bfa218d174bf5a01a2a54f523e73c773c5fd80faf7da904d480b91e317c/kframe-2.5.0-py3.6.egg" } ], "2.6.1": [ { "comment_text": "", "digests": { "md5": "f54908d135af1af78c5ec743aca7c418", "sha256": "611b563cf6b7f7ebc668a4d63e931c6696ff3128b6a01994cfcb0bbbb2012b06" }, "downloads": -1, "filename": "kframe-2.6.1-py3.6.egg", "has_sig": false, "md5_digest": "f54908d135af1af78c5ec743aca7c418", "packagetype": "bdist_egg", "python_version": "3.6", "requires_python": null, "size": 125425, "upload_time": "2019-02-25T19:33:48", "url": "https://files.pythonhosted.org/packages/e7/3b/c6d4b5eaafde38fb891d6375020eff58f2ae69e17bb05d7d95ebf29e5d05/kframe-2.6.1-py3.6.egg" } ], "2.6.2": [ { "comment_text": "", "digests": { "md5": "c3449a8c430a6e9a34e713cb78eff0a1", "sha256": "488dc5fe1b2712602d29946935838c5a3b6060882f27f602ebd52fb243b4f8b9" }, "downloads": -1, "filename": "kframe-2.6.2-py3.5.egg", "has_sig": false, "md5_digest": "c3449a8c430a6e9a34e713cb78eff0a1", "packagetype": "bdist_egg", "python_version": "3.5", "requires_python": null, "size": 130674, "upload_time": "2019-02-25T22:12:36", "url": "https://files.pythonhosted.org/packages/dc/17/b96d92547a3a869228c37c35aa21ba720cb78672f36de18b4fcdbafec29a/kframe-2.6.2-py3.5.egg" }, { "comment_text": "", "digests": { "md5": "033b7038b5716cf4b6aee1b1250bed43", "sha256": "5c21bdb12cac10de306c11364772ef0b616a03e793e13b6e91493af3a3ac2eef" }, "downloads": -1, "filename": "kframe-2.6.2-py3.6.egg", "has_sig": false, "md5_digest": "033b7038b5716cf4b6aee1b1250bed43", "packagetype": "bdist_egg", "python_version": "3.6", "requires_python": null, "size": 125502, "upload_time": "2019-02-25T22:09:10", "url": "https://files.pythonhosted.org/packages/b2/27/2de09e506c9960209d1481e91ced9a446da6acaf4f055d31781160fe2930/kframe-2.6.2-py3.6.egg" }, { "comment_text": "", "digests": { "md5": "35ad16cad091ca1b275b7d30f3cdfffa", "sha256": "530e7b10602250b442fa862d6b4179862ac9dde6393a1efa8c974fc8321c3050" }, "downloads": -1, "filename": "kframe-2.6.2-py3.7.egg", "has_sig": false, "md5_digest": "35ad16cad091ca1b275b7d30f3cdfffa", "packagetype": "bdist_egg", "python_version": "3.7", "requires_python": null, "size": 129116, "upload_time": "2019-02-28T13:36:38", "url": "https://files.pythonhosted.org/packages/2e/fe/4bd6e6c5e3c4760c62c8f50c7c79866f78a7d68fa6ea9d93ffbed6c413c4/kframe-2.6.2-py3.7.egg" } ], "2.6.3": [ { "comment_text": "", "digests": { "md5": "a86605c5e0f918ef8286d6deaa793a66", "sha256": "ee120a97e7c739687b3d5507dc7b2ce50eecae4ae56c9d3dc190242b46a1253f" }, "downloads": -1, "filename": "kframe-2.6.3-py3.6.egg", "has_sig": false, "md5_digest": "a86605c5e0f918ef8286d6deaa793a66", "packagetype": "bdist_egg", "python_version": "3.6", "requires_python": null, "size": 125509, "upload_time": "2019-03-01T23:02:58", "url": "https://files.pythonhosted.org/packages/05/31/90ff0334227bc8850c9dc71c63f97f83701b060c9dcddb4f06e5f56de08f/kframe-2.6.3-py3.6.egg" }, { "comment_text": "", "digests": { "md5": "43c70f15c057723d66c3edc95a9f12bf", "sha256": "9fb3efc5018cb7b9ee84dc5608ccc45a2031b2f14a5ab404c1c65ed0a06f0f80" }, "downloads": -1, "filename": "kframe-2.6.3-py3.7.egg", "has_sig": false, "md5_digest": "43c70f15c057723d66c3edc95a9f12bf", "packagetype": "bdist_egg", "python_version": "3.7", "requires_python": null, "size": 125771, "upload_time": "2019-03-02T11:41:11", "url": "https://files.pythonhosted.org/packages/87/f8/25d1329ff7bc26e23687a27183b3716b9c9fb3795f16592b383c848c2cd3/kframe-2.6.3-py3.7.egg" } ], "2.6.4": [ { "comment_text": "", "digests": { "md5": "f76b0fcd1b9848d87ed18dc65817af18", "sha256": "f87ba51144537feb318c2889d7d1a2ef89e34379d29a1ad4ea1ab778d5547bd4" }, "downloads": -1, "filename": "kframe-2.6.4-py3.6.egg", "has_sig": false, "md5_digest": "f76b0fcd1b9848d87ed18dc65817af18", "packagetype": "bdist_egg", "python_version": "3.6", "requires_python": null, "size": 125503, "upload_time": "2019-03-02T14:18:47", "url": "https://files.pythonhosted.org/packages/04/6c/1e931802cd405eecbe4960226bb95e7cbc1cac2e5781538790ca6f3394cb/kframe-2.6.4-py3.6.egg" } ], "2.7.0": [ { "comment_text": "", "digests": { "md5": "f38fbb9a53c49c9218031a837c078cf0", "sha256": "13c512a51a188f63f7d37684d5fd22d72226dbf3173f66e0b6e6cfc12f837511" }, "downloads": -1, "filename": "kframe-2.7.0-py3.5.egg", "has_sig": false, "md5_digest": "f38fbb9a53c49c9218031a837c078cf0", "packagetype": "bdist_egg", "python_version": "3.5", "requires_python": null, "size": 133230, "upload_time": "2019-03-08T22:41:37", "url": "https://files.pythonhosted.org/packages/12/39/176d101f5b7605b0e53b97cd71e0fc352236b546d7ea6170c1b0a17ba18d/kframe-2.7.0-py3.5.egg" }, { "comment_text": "", "digests": { "md5": "21c71af99f28f4459b13e35cc1b09168", "sha256": "b6656be72945222990b88b5a05d1bf0beb4a6f5c2e65b14e12d2dc71baf256b5" }, "downloads": -1, "filename": "kframe-2.7.0-py3.6.egg", "has_sig": false, "md5_digest": "21c71af99f28f4459b13e35cc1b09168", "packagetype": "bdist_egg", "python_version": "3.6", "requires_python": null, "size": 128024, "upload_time": "2019-03-05T22:50:17", "url": "https://files.pythonhosted.org/packages/8e/b9/53c93bcba7606ac2e6b4c9b2d78394d6e124e7852371a70dbcc96d771735/kframe-2.7.0-py3.6.egg" } ], "2.7.1": [ { "comment_text": "", "digests": { "md5": "81ea6d24232725f663ea5c0617f4d9b7", "sha256": "0fc117aa337edc7d428d9b7745d8767fe5969daef987228d37262e71680d1e16" }, "downloads": -1, "filename": "kframe-2.7.1-py3.5.egg", "has_sig": false, "md5_digest": "81ea6d24232725f663ea5c0617f4d9b7", "packagetype": "bdist_egg", "python_version": "3.5", "requires_python": null, "size": 133232, "upload_time": "2019-03-08T22:58:29", "url": "https://files.pythonhosted.org/packages/0e/e3/ccaa520d6cdb0ab6e984d7488aef432355334c2c01f0bc97f4cd18867df3/kframe-2.7.1-py3.5.egg" }, { "comment_text": "", "digests": { "md5": "34a4526b18c818af680cf8bbcb753929", "sha256": "7f93bcc8a513fa7c54fa4caecab05b2227fd7fa24e0a37f7939ee889d8dc9980" }, "downloads": -1, "filename": "kframe-2.7.1-py3.6.egg", "has_sig": false, "md5_digest": "34a4526b18c818af680cf8bbcb753929", "packagetype": "bdist_egg", "python_version": "3.6", "requires_python": null, "size": 128027, "upload_time": "2019-03-08T22:57:58", "url": "https://files.pythonhosted.org/packages/fe/96/93e221a875c703fec49731f624e5b85af1b4ba17a2e04f643408be8491d3/kframe-2.7.1-py3.6.egg" }, { "comment_text": "", "digests": { "md5": "afd442974221355babaf10184030b61c", "sha256": "d3dbbd364419bc4d819fb62113ea169b5e650ef840b40c42b605a6558bfb39ba" }, "downloads": -1, "filename": "kframe-2.7.1-py3.7.egg", "has_sig": false, "md5_digest": "afd442974221355babaf10184030b61c", "packagetype": "bdist_egg", "python_version": "3.7", "requires_python": null, "size": 128287, "upload_time": "2019-03-09T00:18:15", "url": "https://files.pythonhosted.org/packages/4e/48/e0d7aaea270748d7dd151e6ea572755b87baf67a6975da4a57243f467117/kframe-2.7.1-py3.7.egg" } ], "2.7.2": [ { "comment_text": "", "digests": { "md5": "398df19be8b528a20a7859ee971bdca8", "sha256": "3fae4cf006d4d698048de9fd5ad16f06ab833427b6b6468ff6fe9ef227d80d8a" }, "downloads": -1, "filename": "kframe-2.7.2-py3.6.egg", "has_sig": false, "md5_digest": "398df19be8b528a20a7859ee971bdca8", "packagetype": "bdist_egg", "python_version": "3.6", "requires_python": null, "size": 128719, "upload_time": "2019-03-10T00:50:40", "url": "https://files.pythonhosted.org/packages/c4/d6/8ab8e822863885a014dffd154bc2afccac22a021cf1470241271385db9a6/kframe-2.7.2-py3.6.egg" } ], "2.7.3": [ { "comment_text": "", "digests": { "md5": "401398f8ac3a35d69c39498b085b717a", "sha256": "931820fb4e2011e8afdcef9672078dce20dbe73f2262ce4ad6de91f3fd8b3f37" }, "downloads": -1, "filename": "kframe-2.7.3-py3.5.egg", "has_sig": false, "md5_digest": "401398f8ac3a35d69c39498b085b717a", "packagetype": "bdist_egg", "python_version": "3.5", "requires_python": null, "size": 134006, "upload_time": "2019-03-14T23:12:46", "url": "https://files.pythonhosted.org/packages/26/70/63bfc97277a79a735143825e644d34b1c6ac01da7d559a2b415ae460a6eb/kframe-2.7.3-py3.5.egg" } ], "2.7.4": [ { "comment_text": "", "digests": { "md5": "0a2f49db05810e88cfc27a7341c823ad", "sha256": "8d2869a6680d8a35a09bdd59cb1c18956a44f6f3997abe187d0fca21613a8ef1" }, "downloads": -1, "filename": "kframe-2.7.4-py3.7.egg", "has_sig": false, "md5_digest": "0a2f49db05810e88cfc27a7341c823ad", "packagetype": "bdist_egg", "python_version": "3.7", "requires_python": null, "size": 129376, "upload_time": "2019-03-15T08:17:59", "url": "https://files.pythonhosted.org/packages/ca/a0/da57194582737be678b70241d432a6d17094b07c554046cd99dc8e950fb2/kframe-2.7.4-py3.7.egg" } ], "2.8.1": [ { "comment_text": "", "digests": { "md5": "5743ce1e63df8e8f1696dd1585212e34", "sha256": "5130cfd9a9a642492a47afb5e11f6f6e3e3edebc06c5d7337003021c387670fd" }, "downloads": -1, "filename": "kframe-2.8.1-py3.5.egg", "has_sig": false, "md5_digest": "5743ce1e63df8e8f1696dd1585212e34", "packagetype": "bdist_egg", "python_version": "3.5", "requires_python": null, "size": 144445, "upload_time": "2019-03-21T14:44:43", "url": "https://files.pythonhosted.org/packages/06/cb/5c3c4d580dbf53aa989a398964a5cea74089486b2d0468aaf7c04875be2e/kframe-2.8.1-py3.5.egg" } ], "3.0": [ { "comment_text": "", "digests": { "md5": "414be308426fc96fbc6858221f488b50", "sha256": "b7cb98d9759034b494d1955dc4e6088302cad72e1b07f64ca1377a2f3e7c13b6" }, "downloads": -1, "filename": "kframe-3.0-py3.6.egg", "has_sig": false, "md5_digest": "414be308426fc96fbc6858221f488b50", "packagetype": "bdist_egg", "python_version": "3.6", "requires_python": null, "size": 138359, "upload_time": "2019-03-26T20:59:59", "url": "https://files.pythonhosted.org/packages/be/38/ae6ba474d2d302005bb089da17c1064a0a2b867b9716c14cee9e9013163c/kframe-3.0-py3.6.egg" } ], "3.5.1": [ { "comment_text": "", "digests": { "md5": "c17bac3c4f73417683a704e2b67c545e", "sha256": "287ba5f9bf82cc9c0e9100b2f0f6cd2c6760869102aecc8c7452f155e01747b8" }, "downloads": -1, "filename": "kframe-3.5.1-py3-none-any.whl", "has_sig": false, "md5_digest": "c17bac3c4f73417683a704e2b67c545e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 69172, "upload_time": "2019-05-23T16:46:20", "url": "https://files.pythonhosted.org/packages/16/7e/353d01523914ae703c24c73c9bc4ed6b6631fc7e62b8dd216c32f38826d6/kframe-3.5.1-py3-none-any.whl" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "c17bac3c4f73417683a704e2b67c545e", "sha256": "287ba5f9bf82cc9c0e9100b2f0f6cd2c6760869102aecc8c7452f155e01747b8" }, "downloads": -1, "filename": "kframe-3.5.1-py3-none-any.whl", "has_sig": false, "md5_digest": "c17bac3c4f73417683a704e2b67c545e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 69172, "upload_time": "2019-05-23T16:46:20", "url": "https://files.pythonhosted.org/packages/16/7e/353d01523914ae703c24c73c9bc4ed6b6631fc7e62b8dd216c32f38826d6/kframe-3.5.1-py3-none-any.whl" } ] }