8000 build fixing, sync with appinsights needed · rsliang/botbuilder-python@1a448d8 · GitHub
[go: up one dir, main page]

Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 1a448d8

Browse files
committed
build fixing, sync with appinsights needed
1 parent a4f3966 commit 1a448d8

19 files changed

+70
-111
lines changed

libraries/botbuilder-core/botbuilder/core/bot_state.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,11 @@ def create_property(self, name:str) -> StatePropertyAccessor:
6363
raise TypeError('BotState.create_property(): BotState cannot be None or empty.')
6464
return BotStatePropertyAccessor(self, name)
6565

66+
def get(self, turn_context: TurnContext) -> Dict[str, object]:
67+
cached = turn_context.turn_state.get(self._context_service_key)
68+
69+
return getattr(cached, 'state', None)
70+
6671

6772
async def load(self, turn_context: TurnContext, force: bool = False) -> None:
6873
"""

libraries/botbuilder-core/botbuilder/core/memory_storage.py

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ async def read(self, keys: List[str]):
2525
try:
2626
for key in keys:
2727
if key in self.memory:
28-
data[key] = self.memory[key]
28+
data[key] = deepcopy(self.memory[key])
2929
except TypeError as e:
3030
raise e
3131

@@ -35,33 +35,36 @@ async def write(self, changes: Dict[str, StoreItem]):
3535
try:
3636
# iterate over the changes
3737
for (key, change) in changes.items():
38+
#import pdb; pdb.set_trace()
3839
new_value = change
3940
old_state = None
40-
old_state_etag = ""
41+
old_state_etag = None
4142

4243
# Check if the a matching key already exists in self.memory
4344
# If it exists then we want to cache its original value from memory
4445
if key in self.memory:
4546
old_state = self.memory[key]
46-
if "eTag" in old_state:
47-
old_state_etag = old_state["eTag"]
47+
if not isinstance(old_state, StoreItem):
48+
if "eTag" in old_state:
49+
old_state_etag = old_state["eTag"]
50+
elif old_state.e_tag:
51+
old_state_etag = old_state.e_tag
4852

49-
new_state = new_value
53+
new_state = deepcopy(new_value)
5054

5155
# Set ETag if applicable
5256
if isinstance(new_value, StoreItem):
53-
new_store_item = new_value
54-
if not old_state_etag is StoreItem:
55-
if not new_store_item is "*" and new_store_item.e_tag != old_state_etag:
56-
raise Exception("Etag conflict.\nOriginal: %s\r\nCurrent: {%s}" % \
57-
(new_store_item.e_tag, old_state_etag) )
57+
if old_state_etag is not None and new_value.e_tag != "*" and new_value.e_tag < old_state_etag:
58+
raise KeyError("Etag conflict.\nOriginal: %s\r\nCurrent: %s" % \
59+
(new_value.e_tag, old_state_etag) )
5860
new_state.e_tag = str(self._e_tag)
5961
self._e_tag += 1
6062
self.memory[key] = new_state
6163

6264
except Exception as e:
6365
raise e
6466

67+
#TODO: Check if needed, if not remove
6568
def __should_write_changes(self, old_value: StoreItem, new_value: StoreItem) -> bool:
6669
"""
6770
Helper method that compares two StoreItems and their e_tags and returns True if the new_value should overwrite

libraries/botbuilder-core/tests/__init__.py

Lines changed: 0 additions & 10 deletions
This file was deleted.

libraries/botbuilder-core/tests/test_bot_state.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
from botbuilder.core.adapters import TestAdapter
88
from botbuilder.schema import Activity
99

10-
from .test_utilities import TestUtilities
10+
from test_utilities import TestUtilities
1111

1212
RECEIVED_MESSAGE = Activity(type='message',
1313
text='received')
@@ -287,8 +287,8 @@ async def test_LoadSetSaveTwice(self):
287287
property_b2 = user_state2.create_property("property-b")
288288

289289
await user_state2.load(context)
290-
await property_a.set(context, "hello-2")
291-
await property_b.set(context, "world-2")
290+
await property_a2.set(context, "hello-2")
291+
await property_b2.set(context, "world-2")
292292
await user_state2.save_changes(context)
293293

294294
# Assert 2
@@ -326,8 +326,8 @@ async def test_LoadSaveDelete(self):
326326
property_b2 = user_state2.create_property("property-b")
327327

328328
await user_state2.load(context)
329-
await property_a.set(context, "hello-2")
330-
await property_b.delete(context)
329+
await property_a2.set(context, "hello-2")
330+
await property_b2.delete(context)
331331
await user_state2.save_changes(context)
332332

333333
# Assert 2

libraries/botbuilder-core/tests/test_conversation_state.py

Lines changed: 3 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33

44
import aiounittest
55

6-
from botbuilder.core import TurnContext, MemoryStorage, TestAdapter, ConversationState
6+
from botbuilder.core import TurnContext, MemoryStorage, ConversationState
7+
from botbuilder.core.adapters import TestAdapter
78
from botbuilder.schema import Activity, ConversationAccount
89

910
RECEIVED_MESSAGE = Activity(type='message',
@@ -21,46 +22,13 @@
2122
conversation=ConversationAccount(id='convo'))
2223

2324

24-
class TestConversationState:
25+
class TestConversationState(aiounittest.AsyncTestCase):
2526
storage = MemoryStorage()
2627
adapter = TestAdapter()
2728
context = TurnContext(adapter, RECEIVED_MESSAGE)
2829
middleware = ConversationState(storage)
2930

3031

31-
async def test_should_load_and_save_state_from_storage(self):
32-
key = None
33-
34-
async def next_middleware():
35-
nonlocal key
36-
key = self.middleware.get_storage_key(self.context)
37-
state = await self.middleware.get(self.context)
38-
assert state is not None, 'State not loaded'
39-
assert key is not None, 'Key not found'
40-
state.test = 'foo'
41-
42-
await self.middleware.on_process_request(self.context, next_middleware)
43-
44-
items = await self.storage.read([key])
45-
assert key in items, 'Saved state not found in storage.'
46-
assert items[key].test == 'foo', 'Missing test value in stored state.'
47-
48-
49-
async def test_should_ignore_any_activities_that_are_not_endOfConversation(self):
50-
key = None
51-
52-
async def next_middleware():
53-
nonlocal key
54-
key = self.middleware.get_storage_key(self.context)
55-
state = await self.middleware.get(self.context)
56-
assert state.test == 'foo', 'invalid initial state'
57-
await self.context.send_activity(Activity(type='message', text='foo'))
58-
59-
await self.middleware.on_process_request(self.context, next_middleware)
60-
items = await self.storage.read([key])
61-
assert hasattr(items[key], 'test'), 'state cleared and should not have been'
62-
63-
6432
async def test_should_reject_with_error_if_channel_id_is_missing(self):
6533
context = TurnContext(self.adapter, MISSING_CHANNEL_ID)
6634

libraries/botbuilder-core/tests/test_memory_storage.py

Lines changed: 16 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88

99
class SimpleStoreItem(StoreItem):
10-
def __init__(self, counter=1, e_tag='0'):
10+
def __init__(self, counter=1, e_tag='*'):
1111
super(SimpleStoreItem, self).__init__()
1212
self.counter = counter
1313
self.e_tag = e_tag
@@ -41,33 +41,20 @@ async def test_memory_storage_read_should_return_data_with_valid_key(self):
4141
assert data['user'].counter == 1
4242
assert len(data.keys()) == 1
4343
assert storage._e_tag == 1
44-
assert int(data['user'].e_tag) == 1
44+
assert int(data['user'].e_tag) == 0
4545

4646

4747
async def test_memory_storage_write_should_add_new_value(self):
4848
storage = MemoryStorage()
49-
await storage.write({'user': SimpleStoreItem(counter=1)})
49+
aux = {'user': SimpleStoreItem(counter=1)}
50+
await storage.write(aux)
5051

5152
data = await storage.read(['user'])
5253
assert 'user' in data
5354
assert data['user'].counter == 1
54-
55+
5556

56-
async def test_memory_storage_write_should_overwrite_cached_value_with_valid_newer_e_tag(self):
57-
storage = MemoryStorage()
58-
await storage.write({'user': SimpleStoreItem()})
59-
data = await storage.read(['user'])
60-
61-
try:
62-
await storage.write({'user': SimpleStoreItem(counter=2, e_tag='2')})
63-
data = await storage.read(['user'])
64-
assert data['user'].counter == 2
65-
assert int(data['user'].e_tag) == 2
66-
except Exception as e:
67-
raise e
68-
69-
70-
async def test_memory_storage_write_should_overwrite_when_new_e_tag_is_an_asterisk(self):
57+
async def test_memory_storage_write_should_overwrite_when_new_e_tag_is_an_asterisk_1(self):
7158
storage = MemoryStorage()
7259
await storage.write({'user': SimpleStoreItem(e_tag='1')})
7360

@@ -76,7 +63,7 @@ async def test_memory_storage_write_should_overwrite_when_new_e_tag_is_an_asteri
7663
assert data['user'].counter == 10
7764

7865

79-
async def test_memory_storage_write_should_overwrite_when_new_e_tag_is_an_asterisk(self):
66+
async def test_memory_storage_write_should_overwrite_when_new_e_tag_is_an_asterisk_2(self):
8067
storage = MemoryStorage()
8168
await storage.write({'user': SimpleStoreItem(e_tag='1')})
8269

@@ -87,13 +74,18 @@ async def test_memory_storage_write_should_overwrite_when_new_e_tag_is_an_asteri
8774

8875
async def test_memory_storage_write_should_raise_a_key_error_with_older_e_tag(self):
8976
storage = MemoryStorage()
90-
await storage.write({'user': SimpleStoreItem(e_tag='1')})
77+
first_item = SimpleStoreItem(e_tag='0')
78+
79+
await storage.write({'user': first_item})
80+
81+
updated_item = (await storage.read(['user']))['user']
82+
updated_item.counter += 1
83+
await storage.write({'user': first_item})
9184

92-
await storage.read(['user'])
9385
try:
94-
await storage.write({'user': SimpleStoreItem()})
86+
await storage.write({'user': first_item})
9587
await storage.read(['user'])
96-
except KeyError as e:
88+
except KeyError as _:
9789
pass
9890
else:
9991
raise AssertionError("test_memory_storage_read_should_raise_a_key_error_with_invalid_e_tag(): should have "

libraries/botbuilder-core/tests/test_message_factory.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# Copyright (c) Microsoft Corporation. All rights reserved.
22
# Licensed under the MIT License.
3+
import aiounittest
34

45
from typing import List
56
from botbuilder.core import MessageFactory

libraries/botbuilder-core/tests/test_test_adapter.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33

44
import aiounittest
55
from botbuilder.schema import Activity, ConversationReference
6-
from botbuilder.core import TurnContext, TestAdapter
6+
from botbuilder.core import TurnContext
7+
from botbuilder.core.adapters import TestAdapter
78
from datetime import datetime
89

910
RECEIVED_MESSAGE = Activity(type='message', text='received')

libraries/botbuilder-core/tests/test_user_state.py

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33

44
import aiounittest
55

6-
from botbuilder.core import TurnContext, MemoryStorage, StoreItem, TestAdapter, UserState
6+
from botbuilder.core import TurnContext, MemoryStorage, StoreItem, UserState
7+
from botbuilder.core.adapters import TestAdapter
78
from botbuilder.schema import Activity, ChannelAccount
89

910
RECEIVED_MESSAGE = Activity(type='message',
@@ -22,22 +23,24 @@ class TestUserState(aiounittest.AsyncTestCase):
2223
storage = MemoryStorage()
2324
adapter = TestAdapter()
2425
context = TurnContext(adapter, RECEIVED_MESSAGE)
25-
middleware = UserState(storage)
26+
user_state = UserState(storage)
2627

2728

2829
async def test_should_load_and_save_state_from_storage(self):
30+
await self.user_state.load(self.context)
31+
key = self.user_state.get_storage_key(self.context)
32+
state = self.user_state.get(self.context)
2933

30-
async def next_middleware():
31-
state = await self.middleware.get(self.context)
32-
assert isinstance(state, StoreItem), 'State not loaded'
33-
state.test = 'foo'
34+
assert state is not None, 'State not loaded'
35+
assert key, 'Key not found'
36+
37+
state['test'] = 'foo'
38+
await self.user_state.save_changes(self.context)
3439

35-
await self.middleware.on_process_request(self.context, next_middleware)
36-
key = self.middleware.get_storage_key(self.context)
37-
assert type(key) == str, 'Key not found'
3840
items = await self.storage.read([key])
41+
3942
assert key in items, 'Saved state not found in storage'
40-
assert items[key].test == 'foo', 'Missing test value in stored state.'
43+
assert items[key]['test'] == 'foo', 'Missing saved value in stored storage'
4144

4245

4346
async def test_should_reject_with_error_if_channel_id_is_missing(self):
@@ -47,7 +50,7 @@ async def next_middleware():
4750
assert False, 'Should not have called next_middleware'
4851

4952
try:
50-
await self.middleware.on_process_request(context, next_middleware)
53+
await self.user_state.on_process_request(context, next_middleware)
5154
except AttributeError:
5255
pass
5356
else:
@@ -61,7 +64,7 @@ async def next_middleware():
6164
assert False, 'Should not have called next_middleware'
6265

6366
try:
64-
await self.middleware.on_process_re 10000 quest(context, next_middleware)
67+
await self.user_state.on_process_request(context, next_middleware)
6568
except AttributeError:
6669
pass
6770
else:

libraries/botbuilder-dialogs/tests/__init__.py

Lines changed: 0 additions & 2 deletions
This file was deleted.

libraries/botbuilder-dialogs/tests/choices/__init__.py

Whitespace-only changes.

libraries/botbuilder-dialogs/tests/test_number_prompt.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# Copyright (c) Microsoft Corporation. All rights reserved.
22
# Licensed under the MIT License.
33
import aiounittest
4-
from botbuilder.dialogs.prompts import NumberPrompt
4+
from botbuilder.dialogs.prompts import NumberPrompt
55

66
class NumberPromptTests(aiounittest.AsyncTestCase):
77
def test_empty_should_fail(self):

libraries/botbuilder-dialogs/tests/test_prompt_validator_context.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,18 +10,18 @@
1010

1111
class PromptValidatorContextTests(aiounittest.AsyncTestCase):
1212
async def test_prompt_validator_context_end(self):
13-
storage = MemoryStorage();
13+
storage = MemoryStorage()
1414
conv = ConversationState(storage)
1515
accessor = conv.create_property("dialogstate")
16-
ds = DialogSet(accessor);
16+
ds = DialogSet(accessor)
1717
self.assertNotEqual(ds, None)
1818
# TODO: Add TestFlow
1919

2020
def test_prompt_validator_context_retry_end(self):
21-
storage = MemoryStorage();
21+
storage = MemoryStorage()
2222
conv = ConversationState(storage)
2323
accessor = conv.create_property("dialogstate")
24-
ds = DialogSet(accessor);
24+
ds = DialogSet(accessor)
2525
self.assertNotEqual(ds, None)
2626
# TODO: Add TestFlow
2727

libraries/botframework-connector/tests/__init__.py

Lines changed: 0 additions & 2 deletions
This file was deleted.

libraries/botframework-connector/tests/test_attachments.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
from botframework.connector import ConnectorClient
99
from botframework.connector.auth import MicrosoftAppCredentials
1010

11-
from .authentication_stub import MicrosoftTokenAuthenticationStub
11+
from authentication_stub import MicrosoftTokenAuthenticationStub
1212

1313
SERVICE_URL = 'https://slack.botframework.com'
1414
CHANNEL_ID = 'slack'

libraries/botframework-connector/tests/test_attachments_async.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
from botframework.connector.aio import ConnectorClient
1010
from botframework.connector.auth import MicrosoftAppCredentials
1111

12-
from .authentication_stub import MicrosoftTokenAuthenticationStub
12+
from authentication_stub import MicrosoftTokenAuthenticationStub
1313

1414
SERVICE_URL = 'https://slack.botframework.com'
1515
CHANNEL_ID = 'slack'

libraries/botframework-connector/tests/test_conversations.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from botframework.connector import ConnectorClient
66
from botframework.connector.auth import MicrosoftAppCredentials
77

8-
from .authentication_stub import MicrosoftTokenAuthenticationStub
8+
from authentication_stub import MicrosoftTokenAuthenticationStub
99

1010
SERVICE_URL = 'https://slack.botframework.com'
1111
CHANNEL_ID = 'slack'

libraries/botframework-connector/tests/test_conversations_async.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from botframework.connector.aio import ConnectorClient
77
from botframework.connector.auth import MicrosoftAppCredentials
88

9-
from .authentication_stub import MicrosoftTokenAuthenticationStub
9+
from authentication_stub import MicrosoftTokenAuthenticationStub
1010

1111
SERVICE_URL = 'https://slack.botframework.com'
1212
CHANNEL_ID = 'slack'

0 commit comments

Comments
 (0)
0