summaryrefslogtreecommitdiff
path: root/python-dff.spec
diff options
context:
space:
mode:
authorCoprDistGit <infra@openeuler.org>2023-05-15 09:20:26 +0000
committerCoprDistGit <infra@openeuler.org>2023-05-15 09:20:26 +0000
commit37f6c3bd260d151cfe2c39b1c8bab29d7eca49c2 (patch)
treeec35ee96d2254a8c8246255b5749e6e555283663 /python-dff.spec
parent8737f531285b88225b81f095cd28bf4fba3db5d8 (diff)
automatic import of python-dff
Diffstat (limited to 'python-dff.spec')
-rw-r--r--python-dff.spec729
1 files changed, 729 insertions, 0 deletions
diff --git a/python-dff.spec b/python-dff.spec
new file mode 100644
index 0000000..626b6cf
--- /dev/null
+++ b/python-dff.spec
@@ -0,0 +1,729 @@
+%global _empty_manifest_terminate_build 0
+Name: python-dff
+Version: 0.4.1
+Release: 1
+Summary: The Dialog Flow Framework (DFF) allows you to write conversational services.
+License: Apache Software License
+URL: https://github.com/deeppavlov/dialog_flow_framework
+Source0: https://mirrors.nju.edu.cn/pypi/web/packages/67/fa/cea1867b0eee11054d44eaa2dd733061f92af82699c1934e04d8eaa3d731/dff-0.4.1.tar.gz
+BuildArch: noarch
+
+Requires: python3-pydantic
+Requires: python3-nest-asyncio
+Requires: python3-typing-extensions
+Requires: python3-pydantic
+Requires: python3-nest-asyncio
+Requires: python3-typing-extensions
+Requires: python3-bump2version
+Requires: python3-build
+Requires: python3-twine
+Requires: python3-pytelegrambotapi
+Requires: python3-motor
+Requires: python3-pydata-sphinx-theme
+Requires: python3-sphinx-favicon
+Requires: python3-cryptography
+Requires: python3-sqlalchemy[asyncio]
+Requires: python3-sqlalchemy[asyncio]
+Requires: python3-telethon
+Requires: python3-sphinxcontrib-katex
+Requires: python3-pytest
+Requires: python3-pytest-asyncio
+Requires: python3-mypy
+Requires: python3-pytest-cov
+Requires: python3-sphinxcontrib-httpdomain
+Requires: python3-uvicorn
+Requires: python3-ydb
+Requires: python3-idna
+Requires: python3-anyio
+Requires: python3-requests
+Requires: python3-websockets
+Requires: python3-build
+Requires: python3-typing-extensions
+Requires: python3-nest-asyncio
+Requires: python3-jupytext
+Requires: python3-h11
+Requires: python3-aiofiles
+Requires: python3-nbsphinx
+Requires: python3-flake8
+Requires: python3-pydantic
+Requires: python3-aiosqlite
+Requires: python3-black
+Requires: python3-sphinxcontrib-apidoc
+Requires: python3-starlette
+Requires: python3-jupyter
+Requires: python3-sphinx-gallery
+Requires: python3-sphinx-autodoc-typehints
+Requires: python3-six
+Requires: python3-flask[async]
+Requires: python3-sphinx
+Requires: python3-psutil
+Requires: python3-aioredis
+Requires: python3-sphinx-copybutton
+Requires: python3-asyncpg
+Requires: python3-isort
+Requires: python3-asyncmy
+Requires: python3-click
+Requires: python3-twine
+Requires: python3-fastapi
+Requires: python3-sniffio
+Requires: python3-bump2version
+Requires: python3-sphinxcontrib-apidoc
+Requires: python3-sphinx-copybutton
+Requires: python3-requests
+Requires: python3-sphinxcontrib-httpdomain
+Requires: python3-pydata-sphinx-theme
+Requires: python3-jupyter
+Requires: python3-sphinx-favicon
+Requires: python3-jupytext
+Requires: python3-sphinxcontrib-katex
+Requires: python3-nbsphinx
+Requires: python3-sphinx-gallery
+Requires: python3-sphinx-autodoc-typehints
+Requires: python3-sphinx
+Requires: python3-pytelegrambotapi
+Requires: python3-asyncpg
+Requires: python3-motor
+Requires: python3-asyncmy
+Requires: python3-typing-extensions
+Requires: python3-nest-asyncio
+Requires: python3-sqlalchemy[asyncio]
+Requires: python3-sqlalchemy[asyncio]
+Requires: python3-cryptography
+Requires: python3-aiofiles
+Requires: python3-six
+Requires: python3-pydantic
+Requires: python3-aiosqlite
+Requires: python3-aioredis
+Requires: python3-ydb
+Requires: python3-aiofiles
+Requires: python3-motor
+Requires: python3-cryptography
+Requires: python3-sqlalchemy[asyncio]
+Requires: python3-asyncmy
+Requires: python3-aiofiles
+Requires: python3-asyncpg
+Requires: python3-sqlalchemy[asyncio]
+Requires: python3-aioredis
+Requires: python3-aiosqlite
+Requires: python3-sqlalchemy[asyncio]
+Requires: python3-sqlalchemy[asyncio]
+Requires: python3-pytelegrambotapi
+Requires: python3-pytelegrambotapi
+Requires: python3-motor
+Requires: python3-sqlalchemy[asyncio]
+Requires: python3-sqlalchemy[asyncio]
+Requires: python3-cryptography
+Requires: python3-telethon
+Requires: python3-pytest
+Requires: python3-pytest-asyncio
+Requires: python3-pytest-cov
+Requires: python3-ydb
+Requires: python3-uvicorn
+Requires: python3-idna
+Requires: python3-anyio
+Requires: python3-requests
+Requires: python3-websockets
+Requires: python3-typing-extensions
+Requires: python3-nest-asyncio
+Requires: python3-h11
+Requires: python3-aiofiles
+Requires: python3-flake8
+Requires: python3-pydantic
+Requires: python3-aiosqlite
+Requires: python3-black
+Requires: python3-starlette
+Requires: python3-six
+Requires: python3-flask[async]
+Requires: python3-psutil
+Requires: python3-aioredis
+Requires: python3-asyncpg
+Requires: python3-isort
+Requires: python3-asyncmy
+Requires: python3-click
+Requires: python3-fastapi
+Requires: python3-sniffio
+Requires: python3-telethon
+Requires: python3-pytest
+Requires: python3-pytest-asyncio
+Requires: python3-pytest-cov
+Requires: python3-uvicorn
+Requires: python3-idna
+Requires: python3-anyio
+Requires: python3-requests
+Requires: python3-websockets
+Requires: python3-h11
+Requires: python3-flake8
+Requires: python3-black
+Requires: python3-starlette
+Requires: python3-flask[async]
+Requires: python3-psutil
+Requires: python3-isort
+Requires: python3-click
+Requires: python3-fastapi
+Requires: python3-sniffio
+Requires: python3-pytelegrambotapi
+Requires: python3-motor
+Requires: python3-sqlalchemy[asyncio]
+Requires: python3-sqlalchemy[asyncio]
+Requires: python3-cryptography
+Requires: python3-telethon
+Requires: python3-pytest
+Requires: python3-pytest-asyncio
+Requires: python3-pytest-cov
+Requires: python3-ydb
+Requires: python3-uvicorn
+Requires: python3-idna
+Requires: python3-anyio
+Requires: python3-requests
+Requires: python3-websockets
+Requires: python3-typing-extensions
+Requires: python3-nest-asyncio
+Requires: python3-h11
+Requires: python3-aiofiles
+Requires: python3-flake8
+Requires: python3-pydantic
+Requires: python3-aiosqlite
+Requires: python3-black
+Requires: python3-starlette
+Requires: python3-six
+Requires: python3-flask[async]
+Requires: python3-psutil
+Requires: python3-aioredis
+Requires: python3-asyncpg
+Requires: python3-isort
+Requires: python3-asyncmy
+Requires: python3-click
+Requires: python3-fastapi
+Requires: python3-sniffio
+Requires: python3-ydb
+Requires: python3-six
+
+%description
+
+# Dialog Flow Framework
+
+The Dialog Flow Framework (DFF) allows you to write conversational services.
+The service is written by defining a special dialog graph that describes the behavior of the dialog service.
+The dialog graph contains the dialog script. DFF offers a specialized language (DSL) for quickly writing dialog graphs.
+You can use it in services such as writing skills for Amazon Alexa, etc., chatbots for social networks, website call centers, etc.
+
+[![Documentation Status](https://github.com/deeppavlov/dialog_flow_framework/workflows/build_and_publish_docs/badge.svg)](https://deeppavlov.github.io/dialog_flow_framework)
+[![Codestyle](https://github.com/deeppavlov/dialog_flow_framework/workflows/codestyle/badge.svg)](https://github.com/deeppavlov/dialog_flow_framework/actions/workflows/codestyle.yml)
+[![Tests](https://github.com/deeppavlov/dialog_flow_framework/workflows/test_coverage/badge.svg)](https://github.com/deeppavlov/dialog_flow_framework/actions/workflows/test_coverage.yml)
+[![License Apache 2.0](https://img.shields.io/badge/license-Apache%202.0-blue.svg)](https://github.com/deeppavlov/dialog_flow_framework/blob/master/LICENSE)
+![Python 3.7, 3.8, 3.9](https://img.shields.io/badge/python-3.7%20%7C%203.8%20%7C%203.9-green.svg)
+[![PyPI](https://img.shields.io/pypi/v/dff)](https://pypi.org/project/dff/)
+[![Downloads](https://pepy.tech/badge/dff)](https://pepy.tech/project/dff)
+
+# Quick Start
+## Installation
+
+DFF can be installed via pip:
+
+```bash
+pip install dff
+```
+
+The above command will set the minimum dependencies to start working with DFF.
+The installation process allows the user to choose from different packages based on their dependencies, which are:
+```bash
+pip install dff[core] # minimal dependencies (by default)
+pip install dff[json] # dependencies for using JSON
+pip install dff[pickle] # dependencies for using Pickle
+pip install dff[redis] # dependencies for using Redis
+pip install dff[mongodb] # dependencies for using MongoDB
+pip install dff[mysql] # dependencies for using MySQL
+pip install dff[postgresql] # dependencies for using PostgreSQL
+pip install dff[sqlite] # dependencies for using SQLite
+pip install dff[ydb] # dependencies for using Yandex Database
+pip install dff[telegram] # dependencies for using Telegram
+pip install dff[full] # full dependencies including all options above
+pip install dff[tests] # dependencies for running tests
+pip install dff[test_full] # full dependencies for running all tests (all options above)
+pip install dff[tutorials] # dependencies for running tutorials (all options above)
+pip install dff[devel] # dependencies for development
+pip install dff[doc] # dependencies for documentation
+pip install dff[devel_full] # full dependencies for development (all options above)
+```
+
+For example, if you are going to use one of the database backends,
+you can specify the corresponding requirements yourself. Multiple dependencies can be installed at once, e.g.
+```bash
+pip install dff[postgresql, mysql]
+```
+
+## Basic example
+
+```python
+from dff.script import GLOBAL, TRANSITIONS, RESPONSE, Context, Message
+from dff.pipeline import Pipeline
+import dff.script.conditions.std_conditions as cnd
+from typing import Tuple
+
+# create a dialog script
+script = {
+GLOBAL: {
+TRANSITIONS: {
+("flow", "node_hi"): cnd.exact_match(Message(text="Hi")),
+("flow", "node_ok"): cnd.true()
+}
+},
+"flow": {
+"node_hi": {RESPONSE: Message(text="Hi!!!")},
+"node_ok": {RESPONSE: Message(text="Okey")},
+},
+}
+
+# init pipeline
+pipeline = Pipeline.from_script(script, start_label=("flow", "node_hi"))
+
+
+# handler requests
+def turn_handler(in_request: Message, pipeline: Pipeline) -> Tuple[Message, Context]:
+# Pass the next request of user into pipeline and it returns updated context with actor response
+ctx = pipeline(in_request, 0)
+# Get last actor response from the context
+out_response = ctx.last_response
+# The next condition branching needs for testing
+return out_response, ctx
+
+
+while True:
+in_request = input("type your answer: ")
+out_response, ctx = turn_handler(Message(text=in_request), pipeline)
+print(out_response.text)
+```
+
+When you run this code, you get similar output:
+```
+type your answer: hi
+Okey
+type your answer: Hi
+Hi!!!
+type your answer: ok
+Okey
+type your answer: ok
+Okey
+```
+
+To get more advanced examples, take a look at
+[tutorials](https://github.com/deeppavlov/dialog_flow_framework/tree/dev/tutorials) on GitHub.
+
+# Context Storages
+## Description
+
+Context Storages allow you to save and retrieve user dialogue states
+(in the form of a `Context` object) using various database backends.
+
+The following backends are currently supported:
+* [JSON](https://www.json.org/json-en.html)
+* [pickle](https://docs.python.org/3/library/pickle.html)
+* [shelve](https://docs.python.org/3/library/shelve.html)
+* [SQLite](https://www.sqlite.org/index.html)
+* [PostgreSQL](https://www.postgresql.org/)
+* [MySQL](https://www.mysql.com/)
+* [MongoDB](https://www.mongodb.com/)
+* [Redis](https://redis.io/)
+* [Yandex DataBase](https://ydb.tech/)
+
+Aside from this, we offer some interfaces for saving data to your local file system.
+These are not meant to be used in production, but can be helpful for prototyping your application.
+
+## Basic example
+
+```python
+from dff.script import Context
+from dff.pipeline import Pipeline
+from dff.context_storages import SQLContextStorage
+from .script import some_df_script
+
+db = SQLContextStorage("postgresql+asyncpg://user:password@host:port/dbname")
+
+pipeline = Pipeline.from_script(some_df_script, start_label=("root", "start"), fallback_label=("root", "fallback"))
+
+
+def handle_request(request):
+user_id = request.args["user_id"]
+new_context = pipeline(request, user_id)
+return new_context.last_response
+
+```
+
+To get more advanced examples, take a look at
+[tutorials](https://github.com/deeppavlov/dialog_flow_framework/tree/dev/tutorials/context_storages) on GitHub.
+
+# Contributing to the Dialog Flow Framework
+
+Please refer to [CONTRIBUTING.md](https://github.com/deeppavlov/dialog_flow_framework/blob/dev/CONTRIBUTING.md).
+
+
+%package -n python3-dff
+Summary: The Dialog Flow Framework (DFF) allows you to write conversational services.
+Provides: python-dff
+BuildRequires: python3-devel
+BuildRequires: python3-setuptools
+BuildRequires: python3-pip
+%description -n python3-dff
+
+# Dialog Flow Framework
+
+The Dialog Flow Framework (DFF) allows you to write conversational services.
+The service is written by defining a special dialog graph that describes the behavior of the dialog service.
+The dialog graph contains the dialog script. DFF offers a specialized language (DSL) for quickly writing dialog graphs.
+You can use it in services such as writing skills for Amazon Alexa, etc., chatbots for social networks, website call centers, etc.
+
+[![Documentation Status](https://github.com/deeppavlov/dialog_flow_framework/workflows/build_and_publish_docs/badge.svg)](https://deeppavlov.github.io/dialog_flow_framework)
+[![Codestyle](https://github.com/deeppavlov/dialog_flow_framework/workflows/codestyle/badge.svg)](https://github.com/deeppavlov/dialog_flow_framework/actions/workflows/codestyle.yml)
+[![Tests](https://github.com/deeppavlov/dialog_flow_framework/workflows/test_coverage/badge.svg)](https://github.com/deeppavlov/dialog_flow_framework/actions/workflows/test_coverage.yml)
+[![License Apache 2.0](https://img.shields.io/badge/license-Apache%202.0-blue.svg)](https://github.com/deeppavlov/dialog_flow_framework/blob/master/LICENSE)
+![Python 3.7, 3.8, 3.9](https://img.shields.io/badge/python-3.7%20%7C%203.8%20%7C%203.9-green.svg)
+[![PyPI](https://img.shields.io/pypi/v/dff)](https://pypi.org/project/dff/)
+[![Downloads](https://pepy.tech/badge/dff)](https://pepy.tech/project/dff)
+
+# Quick Start
+## Installation
+
+DFF can be installed via pip:
+
+```bash
+pip install dff
+```
+
+The above command will set the minimum dependencies to start working with DFF.
+The installation process allows the user to choose from different packages based on their dependencies, which are:
+```bash
+pip install dff[core] # minimal dependencies (by default)
+pip install dff[json] # dependencies for using JSON
+pip install dff[pickle] # dependencies for using Pickle
+pip install dff[redis] # dependencies for using Redis
+pip install dff[mongodb] # dependencies for using MongoDB
+pip install dff[mysql] # dependencies for using MySQL
+pip install dff[postgresql] # dependencies for using PostgreSQL
+pip install dff[sqlite] # dependencies for using SQLite
+pip install dff[ydb] # dependencies for using Yandex Database
+pip install dff[telegram] # dependencies for using Telegram
+pip install dff[full] # full dependencies including all options above
+pip install dff[tests] # dependencies for running tests
+pip install dff[test_full] # full dependencies for running all tests (all options above)
+pip install dff[tutorials] # dependencies for running tutorials (all options above)
+pip install dff[devel] # dependencies for development
+pip install dff[doc] # dependencies for documentation
+pip install dff[devel_full] # full dependencies for development (all options above)
+```
+
+For example, if you are going to use one of the database backends,
+you can specify the corresponding requirements yourself. Multiple dependencies can be installed at once, e.g.
+```bash
+pip install dff[postgresql, mysql]
+```
+
+## Basic example
+
+```python
+from dff.script import GLOBAL, TRANSITIONS, RESPONSE, Context, Message
+from dff.pipeline import Pipeline
+import dff.script.conditions.std_conditions as cnd
+from typing import Tuple
+
+# create a dialog script
+script = {
+GLOBAL: {
+TRANSITIONS: {
+("flow", "node_hi"): cnd.exact_match(Message(text="Hi")),
+("flow", "node_ok"): cnd.true()
+}
+},
+"flow": {
+"node_hi": {RESPONSE: Message(text="Hi!!!")},
+"node_ok": {RESPONSE: Message(text="Okey")},
+},
+}
+
+# init pipeline
+pipeline = Pipeline.from_script(script, start_label=("flow", "node_hi"))
+
+
+# handler requests
+def turn_handler(in_request: Message, pipeline: Pipeline) -> Tuple[Message, Context]:
+# Pass the next request of user into pipeline and it returns updated context with actor response
+ctx = pipeline(in_request, 0)
+# Get last actor response from the context
+out_response = ctx.last_response
+# The next condition branching needs for testing
+return out_response, ctx
+
+
+while True:
+in_request = input("type your answer: ")
+out_response, ctx = turn_handler(Message(text=in_request), pipeline)
+print(out_response.text)
+```
+
+When you run this code, you get similar output:
+```
+type your answer: hi
+Okey
+type your answer: Hi
+Hi!!!
+type your answer: ok
+Okey
+type your answer: ok
+Okey
+```
+
+To get more advanced examples, take a look at
+[tutorials](https://github.com/deeppavlov/dialog_flow_framework/tree/dev/tutorials) on GitHub.
+
+# Context Storages
+## Description
+
+Context Storages allow you to save and retrieve user dialogue states
+(in the form of a `Context` object) using various database backends.
+
+The following backends are currently supported:
+* [JSON](https://www.json.org/json-en.html)
+* [pickle](https://docs.python.org/3/library/pickle.html)
+* [shelve](https://docs.python.org/3/library/shelve.html)
+* [SQLite](https://www.sqlite.org/index.html)
+* [PostgreSQL](https://www.postgresql.org/)
+* [MySQL](https://www.mysql.com/)
+* [MongoDB](https://www.mongodb.com/)
+* [Redis](https://redis.io/)
+* [Yandex DataBase](https://ydb.tech/)
+
+Aside from this, we offer some interfaces for saving data to your local file system.
+These are not meant to be used in production, but can be helpful for prototyping your application.
+
+## Basic example
+
+```python
+from dff.script import Context
+from dff.pipeline import Pipeline
+from dff.context_storages import SQLContextStorage
+from .script import some_df_script
+
+db = SQLContextStorage("postgresql+asyncpg://user:password@host:port/dbname")
+
+pipeline = Pipeline.from_script(some_df_script, start_label=("root", "start"), fallback_label=("root", "fallback"))
+
+
+def handle_request(request):
+user_id = request.args["user_id"]
+new_context = pipeline(request, user_id)
+return new_context.last_response
+
+```
+
+To get more advanced examples, take a look at
+[tutorials](https://github.com/deeppavlov/dialog_flow_framework/tree/dev/tutorials/context_storages) on GitHub.
+
+# Contributing to the Dialog Flow Framework
+
+Please refer to [CONTRIBUTING.md](https://github.com/deeppavlov/dialog_flow_framework/blob/dev/CONTRIBUTING.md).
+
+
+%package help
+Summary: Development documents and examples for dff
+Provides: python3-dff-doc
+%description help
+
+# Dialog Flow Framework
+
+The Dialog Flow Framework (DFF) allows you to write conversational services.
+The service is written by defining a special dialog graph that describes the behavior of the dialog service.
+The dialog graph contains the dialog script. DFF offers a specialized language (DSL) for quickly writing dialog graphs.
+You can use it in services such as writing skills for Amazon Alexa, etc., chatbots for social networks, website call centers, etc.
+
+[![Documentation Status](https://github.com/deeppavlov/dialog_flow_framework/workflows/build_and_publish_docs/badge.svg)](https://deeppavlov.github.io/dialog_flow_framework)
+[![Codestyle](https://github.com/deeppavlov/dialog_flow_framework/workflows/codestyle/badge.svg)](https://github.com/deeppavlov/dialog_flow_framework/actions/workflows/codestyle.yml)
+[![Tests](https://github.com/deeppavlov/dialog_flow_framework/workflows/test_coverage/badge.svg)](https://github.com/deeppavlov/dialog_flow_framework/actions/workflows/test_coverage.yml)
+[![License Apache 2.0](https://img.shields.io/badge/license-Apache%202.0-blue.svg)](https://github.com/deeppavlov/dialog_flow_framework/blob/master/LICENSE)
+![Python 3.7, 3.8, 3.9](https://img.shields.io/badge/python-3.7%20%7C%203.8%20%7C%203.9-green.svg)
+[![PyPI](https://img.shields.io/pypi/v/dff)](https://pypi.org/project/dff/)
+[![Downloads](https://pepy.tech/badge/dff)](https://pepy.tech/project/dff)
+
+# Quick Start
+## Installation
+
+DFF can be installed via pip:
+
+```bash
+pip install dff
+```
+
+The above command will set the minimum dependencies to start working with DFF.
+The installation process allows the user to choose from different packages based on their dependencies, which are:
+```bash
+pip install dff[core] # minimal dependencies (by default)
+pip install dff[json] # dependencies for using JSON
+pip install dff[pickle] # dependencies for using Pickle
+pip install dff[redis] # dependencies for using Redis
+pip install dff[mongodb] # dependencies for using MongoDB
+pip install dff[mysql] # dependencies for using MySQL
+pip install dff[postgresql] # dependencies for using PostgreSQL
+pip install dff[sqlite] # dependencies for using SQLite
+pip install dff[ydb] # dependencies for using Yandex Database
+pip install dff[telegram] # dependencies for using Telegram
+pip install dff[full] # full dependencies including all options above
+pip install dff[tests] # dependencies for running tests
+pip install dff[test_full] # full dependencies for running all tests (all options above)
+pip install dff[tutorials] # dependencies for running tutorials (all options above)
+pip install dff[devel] # dependencies for development
+pip install dff[doc] # dependencies for documentation
+pip install dff[devel_full] # full dependencies for development (all options above)
+```
+
+For example, if you are going to use one of the database backends,
+you can specify the corresponding requirements yourself. Multiple dependencies can be installed at once, e.g.
+```bash
+pip install dff[postgresql, mysql]
+```
+
+## Basic example
+
+```python
+from dff.script import GLOBAL, TRANSITIONS, RESPONSE, Context, Message
+from dff.pipeline import Pipeline
+import dff.script.conditions.std_conditions as cnd
+from typing import Tuple
+
+# create a dialog script
+script = {
+GLOBAL: {
+TRANSITIONS: {
+("flow", "node_hi"): cnd.exact_match(Message(text="Hi")),
+("flow", "node_ok"): cnd.true()
+}
+},
+"flow": {
+"node_hi": {RESPONSE: Message(text="Hi!!!")},
+"node_ok": {RESPONSE: Message(text="Okey")},
+},
+}
+
+# init pipeline
+pipeline = Pipeline.from_script(script, start_label=("flow", "node_hi"))
+
+
+# handler requests
+def turn_handler(in_request: Message, pipeline: Pipeline) -> Tuple[Message, Context]:
+# Pass the next request of user into pipeline and it returns updated context with actor response
+ctx = pipeline(in_request, 0)
+# Get last actor response from the context
+out_response = ctx.last_response
+# The next condition branching needs for testing
+return out_response, ctx
+
+
+while True:
+in_request = input("type your answer: ")
+out_response, ctx = turn_handler(Message(text=in_request), pipeline)
+print(out_response.text)
+```
+
+When you run this code, you get similar output:
+```
+type your answer: hi
+Okey
+type your answer: Hi
+Hi!!!
+type your answer: ok
+Okey
+type your answer: ok
+Okey
+```
+
+To get more advanced examples, take a look at
+[tutorials](https://github.com/deeppavlov/dialog_flow_framework/tree/dev/tutorials) on GitHub.
+
+# Context Storages
+## Description
+
+Context Storages allow you to save and retrieve user dialogue states
+(in the form of a `Context` object) using various database backends.
+
+The following backends are currently supported:
+* [JSON](https://www.json.org/json-en.html)
+* [pickle](https://docs.python.org/3/library/pickle.html)
+* [shelve](https://docs.python.org/3/library/shelve.html)
+* [SQLite](https://www.sqlite.org/index.html)
+* [PostgreSQL](https://www.postgresql.org/)
+* [MySQL](https://www.mysql.com/)
+* [MongoDB](https://www.mongodb.com/)
+* [Redis](https://redis.io/)
+* [Yandex DataBase](https://ydb.tech/)
+
+Aside from this, we offer some interfaces for saving data to your local file system.
+These are not meant to be used in production, but can be helpful for prototyping your application.
+
+## Basic example
+
+```python
+from dff.script import Context
+from dff.pipeline import Pipeline
+from dff.context_storages import SQLContextStorage
+from .script import some_df_script
+
+db = SQLContextStorage("postgresql+asyncpg://user:password@host:port/dbname")
+
+pipeline = Pipeline.from_script(some_df_script, start_label=("root", "start"), fallback_label=("root", "fallback"))
+
+
+def handle_request(request):
+user_id = request.args["user_id"]
+new_context = pipeline(request, user_id)
+return new_context.last_response
+
+```
+
+To get more advanced examples, take a look at
+[tutorials](https://github.com/deeppavlov/dialog_flow_framework/tree/dev/tutorials/context_storages) on GitHub.
+
+# Contributing to the Dialog Flow Framework
+
+Please refer to [CONTRIBUTING.md](https://github.com/deeppavlov/dialog_flow_framework/blob/dev/CONTRIBUTING.md).
+
+
+%prep
+%autosetup -n dff-0.4.1
+
+%build
+%py3_build
+
+%install
+%py3_install
+install -d -m755 %{buildroot}/%{_pkgdocdir}
+if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi
+if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi
+if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi
+if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi
+pushd %{buildroot}
+if [ -d usr/lib ]; then
+ find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/lib64 ]; then
+ find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/bin ]; then
+ find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/sbin ]; then
+ find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+touch doclist.lst
+if [ -d usr/share/man ]; then
+ find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst
+fi
+popd
+mv %{buildroot}/filelist.lst .
+mv %{buildroot}/doclist.lst .
+
+%files -n python3-dff -f filelist.lst
+%dir %{python3_sitelib}/*
+
+%files help -f doclist.lst
+%{_docdir}/*
+
+%changelog
+* Mon May 15 2023 Python_Bot <Python_Bot@openeuler.org> - 0.4.1-1
+- Package Spec generated