Skip to content

Commit aba2721

Browse files
committed
Fix some bugs in set_uservars for 1.12.2
1 parent 9bd1b6c commit aba2721

5 files changed

Lines changed: 28 additions & 7 deletions

File tree

Changes.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
Revision history for the Python package RiveScript.
22

3+
1.12.2 May 31 2016
4+
- Fix a couple of bugs with `set_uservars()`.
5+
36
1.12.1 May 31 2016
47
- Added API functions: `get_global(name)`, `get_variable(name)`, and
58
`set_uservars(user || dict[, dict])` -- the latter is for setting many

python-rivescript.spec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
%global desc A scripting language to make it easy to write responses for a chatterbot.
44

55
Name: python-%{srcname}
6-
Version: 1.12.1
6+
Version: 1.12.2
77
Release: 1%{?dist}
88
Summary: %{sum}
99

rivescript/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
__docformat__ = 'plaintext'
4040

4141
__all__ = ['rivescript']
42-
__version__ = '1.12.1'
42+
__version__ = '1.12.2'
4343

4444
from .rivescript import RiveScript, RiveScriptError, NoMatchError, NoReplyError,\
4545
ObjectError, DeepRecursionError, NoDefaultRandomTopicError, RepliesNotSortedError

rivescript/rivescript.py

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1549,16 +1549,22 @@ def set_uservars(self, user, data=None):
15491549
for key, value in uservars.items():
15501550
self._users[uid][key] = value
15511551

1552-
elif type(user) in [text_type] and type(data) is dict:
1552+
elif type(user) in [text_type, str] and type(data) is dict:
15531553
# Setting variables for a single user.
1554+
if not user in self._users:
1555+
self._users[user] = dict(topic="random")
1556+
15541557
for key, value in data.items():
15551558
self._users[user][key] = value
15561559

15571560
else:
15581561
raise TypeError(
1559-
"set_uservars() may only be called with types (str, dict) or "
1560-
"(dict<str, dict>) but you called it with types ({}, {})".format(
1561-
type(user), type(data),
1562+
"set_uservars() may only be called with types ({str}, dict) or "
1563+
"(dict<{str}, dict>) but you called it with types ({a}, {b})"
1564+
.format(
1565+
str="unicode" if sys.version_info[0] < 3 else "str",
1566+
a=type(user),
1567+
b=type(data),
15621568
),
15631569
)
15641570

@@ -1831,7 +1837,7 @@ def _format_message(self, msg, botreply=False):
18311837

18321838
# Make sure the string is Unicode for Python 2.
18331839
if sys.version_info[0] < 3 and isinstance(msg, str):
1834-
msg = msg.decode('utf8')
1840+
msg = msg.decode()
18351841

18361842
# Lowercase it.
18371843
msg = msg.lower()

tests/test_rivescript.py

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

44
from __future__ import unicode_literals, absolute_import
55

6+
import json
67
import re
78
import unittest
89
from collections import OrderedDict
@@ -753,6 +754,17 @@ def test_set_uservars(self):
753754
# Non-existing users return None, not "undefined"
754755
self.assertEqual(self.rs.get_uservar("fake", "name"), None)
755756

757+
# Test setting vars from exported vars.
758+
exported = self.rs.get_uservars("localuser")
759+
self.assertEqual(self.rs.set_uservars("localuser", exported), None)
760+
761+
# Test setting vars from JSON.
762+
self.assertEqual(self.rs.set_uservars("localuser",
763+
json.loads('{"gender": "ambiguous"}')), None)
764+
765+
# Test setting user variables for users that don't exist yet.
766+
self.assertEqual(self.rs.set_uservars("newbie", {"name": "Newbie"}), None)
767+
756768
# Test calling with (str, None)
757769
with self.assertRaises(TypeError):
758770
self.rs.set_uservars("alice")

0 commit comments

Comments
 (0)