示例#1
0
def test_save_user_object_by_yandex_to_user_unauthorized(alice_message):
    connector = DialogConnector(Repeater(), alice_native_state='user')
    uo = {'count': 1, 'name': 'Alex'}
    response = Response(text='привет', user_object=uo)
    output = connector.standardize_output(source=SOURCES.ALICE, original_message=alice_message, response=response)
    assert output['user_state_update'] == {'count': 1, 'name': 'Alex'}
    assert output['application_state'] == {'count': 1, 'name': 'Alex'}
示例#2
0
def test_alice_response(alice_message):
    connector = DialogConnector(Repeater())
    response = Response(text='привет', suggests=['тебе тоже'])
    output = connector.standardize_output(source=SOURCES.ALICE, original_message=alice_message, response=response)
    assert not output['response'].get('end_session')
    assert output['response']['text'] == 'привет'
    assert 'voice' not in output['response'] or output['response']['voice'] == 'привет'
    assert output['response']['buttons'] == [{'title': 'тебе тоже', 'hide': True}]
示例#3
0
def test_save_user_object_by_yandex(alice_message):
    connector = DialogConnector(Repeater(), alice_native_state=True)
    uo = {
        'session': {'count': 1},
        'user': {'name': 'Alex'}
    }
    response = Response(text='привет', user_object=uo)
    output = connector.standardize_output(source=SOURCES.ALICE, original_message=alice_message, response=response)
    assert output['session_state'] == {'count': 1}
    assert output['user_state_update'] == {'name': 'Alex'}
示例#4
0
def test_load_user_object_by_yandex(ans, uo, auth, alice_message):
    connector = DialogConnector(Repeater(), alice_native_state=ans)
    if auth:
        alice_message['session']['user'] = {'user_id': '123'}
    alice_message['state'] = {
        'session': {
            'value': 10
        },
        'user': {
            'value': 42,
        },
        'application': {
            'value': 50,
        }
    }
    ctx = connector.make_context(message=alice_message, source=SOURCES.ALICE)
    assert ctx.user_object == uo
示例#5
0
from dialogic.dialog_connector import DialogConnector
from dialogic.server.flask_server import FlaskServer
from dialogic.storage.message_logging import MongoMessageLogger

from dm import make_dm
import scenarios  # noqa

import logging
logging.basicConfig(level=logging.DEBUG)

dm = make_dm()
connector = DialogConnector(
    dialog_manager=dm,
    log_storage=MongoMessageLogger(),  # requires MONGODB_URI env variable
    alice_native_state='session',  # use built-in session state in Alice
)
server = FlaskServer(connector=connector)

handler = connector.serverless_alice_handler

if __name__ == '__main__':
    server.parse_args_and_run()
示例#6
0
文件: main.py 项目: avidale/dialogic
from dialogic.dialog_connector import DialogConnector
from dialogic.dialog_manager import TurnDialogManager
from dialogic.server.flask_server import FlaskServer
from dialogic.cascade import DialogTurn, Cascade

csc = Cascade()


@csc.add_handler(priority=10, regexp='(hello|hi|привет|здравствуй)')
def hello(turn: DialogTurn):
    turn.response_text = 'Hello! This is the only conditional phrase I have.'


@csc.add_handler(priority=1)
def fallback(turn: DialogTurn):
    turn.response_text = 'Hi! Sorry, I do not understand you.'
    turn.suggests.append('hello')


dm = TurnDialogManager(cascade=csc)
connector = DialogConnector(dialog_manager=dm)
server = FlaskServer(connector=connector)

if __name__ == '__main__':
    server.parse_args_and_run()
示例#7
0
def test_image_api():
    token = '1234'
    skill_id = '5678'
    default_image_id = '9101112'
    manager = YandexImageAPI(token=token,
                             skill_id=skill_id,
                             default_image_id=default_image_id)

    # test updating
    with patch('requests.get') as mock:
        mock.return_value.json = lambda: {
            'images': [
                {
                    'id': 'tree',
                    'origUrl': 'trees.com/tree.jpg',
                    'size': 100500,
                    'createdAt': 'today'
                },
                {
                    'id': 'snake',
                    'size': 100500,
                    'createdAt': 'yesterday'
                },
            ],
            'total':
            2
        }
        manager.update_images()
        assert mock.called
        args = mock.call_args[1]
        assert args[
            'url'] == 'https://dialogs.yandex.net/api/v1/skills/{}/images'.format(
                skill_id)
        assert args['headers'] == {'Authorization': 'OAuth 1234'}

        assert len(manager.url2image) == 1
        assert len(manager.id2image) == 2

    # test usage without upload
    with patch('requests.post') as mock:
        assert manager.get_image_id_by_url('trees.com/tree.jpg') == 'tree'
        assert manager.get_image_id_by_url(
            'trees.com/pine.jpg') == default_image_id
        assert not mock.called

    # test adding an existing image
    with patch('requests.post') as mock:
        image = manager.add_image(url='trees.com/tree.jpg')
        assert not mock.called
        assert image.id == 'tree'

    # test uploading an image
    with patch('requests.post') as mock:
        oak_url = 'trees.com/oak.jpg'
        mock.return_value.json = lambda: {
            'image': {
                'id': 'oak',
                'origUrl': oak_url,
                'size': 100500,
                'createdAt': 'right_now'
            }
        }
        image = manager.add_image(url=oak_url)
        assert mock.called
        assert mock.call_args[1][
            'url'] == 'https://dialogs.yandex.net/api/v1/skills/{}/images'.format(
                skill_id)
        assert image.origUrl == oak_url
        assert image.id == 'oak'

        assert len(manager.id2image) == 3
        assert len(manager.url2image) == 2

    # test uploading an image on the fly
    manager.upload_just_in_time = True
    with patch('requests.post') as mock:
        maple_url = 'trees.com/maple.jpg'
        mock.return_value.ok = True
        mock.return_value.json = lambda: {
            'image': {
                'id': 'maple',
                'origUrl': maple_url,
                'size': 100500,
                'createdAt': 'right_now'
            }
        }
        assert manager.get_image_id_by_url(maple_url) == 'maple'
        assert mock.called

        assert len(manager.id2image) == 4
        assert len(manager.url2image) == 3

    # test removing an image
    with patch('requests.delete') as mock:
        mock.return_value.ok = True
        mock.return_value.json = lambda: {'result': 'ok'}

        manager.delete_image('maple')
        assert mock.called
        assert mock.call_args[1][
            'url'] == 'https://dialogs.yandex.net/api/v1/skills/{}/images/maple'.format(
                skill_id)

        assert len(manager.id2image) == 3
        assert len(manager.url2image) == 2

    # test automatic conversion of urls to ids
    connector = DialogConnector(dialog_manager=None, image_manager=manager)
    response = dialogic.dialog.Response('this is an oak',
                                        image_url='trees.com/oak.jpg')
    result = connector.standardize_output(source=dialogic.SOURCES.ALICE,
                                          original_message={'version': '1.0'},
                                          response=response)
    assert result['response']['card'] == {
        'type': 'BigImage',
        'image_id': 'oak',
        'description': 'this is an oak',
    }
示例#8
0
def test_user_objects():
    connector = DialogConnector(Repeater())
    assert connector.get_user_object('user_1') == {}
    connector.set_user_object('user_1', {'name': 'alex'})
    assert connector.get_user_object('user_2') == {}
    assert connector.get_user_object('user_1') == {'name': 'alex'}
示例#9
0
def test_alice_input(alice_message):
    connector = DialogConnector(Repeater())
    ctx = connector.make_context(message=alice_message, source=SOURCES.ALICE)
    assert ctx.user_id == 'alice__user-id-1'
    assert ctx.message_text == 'привет'
    assert ctx.metadata['new_session']