Ejemplo n.º 1
0
 def setup_new_decision_tree(self, MSISDN, **kwargs):
     decision_tree = TraversedDecisionTree()
     yaml_template = self.yaml_template
     decision_tree.load_yaml_template(yaml_template)
     self.set_data_url(decision_tree.get_data_source())
     self.set_post_url(decision_tree.get_post_source())
     if self.data_url.get('url'):
         raise ValueError("This is broken. Sorry. :-(")
     else:
         decision_tree.load_dummy_data()
     return decision_tree
Ejemplo n.º 2
0
 def setup_new_decision_tree(self, MSISDN, **kwargs):
     decision_tree = TraversedDecisionTree()
     yaml_template = self.yaml_template
     decision_tree.load_yaml_template(yaml_template)
     self.set_data_url(decision_tree.get_data_source())
     self.set_post_url(decision_tree.get_post_source())
     if self.data_url.get('url'):
         json_data = self.call_for_json(MSISDN)
         try:
             decision_tree.load_json_data(json_data)
         except Exception, e:
             log.msg(e)
             log.err(e)
Ejemplo n.º 3
0
    def test_session_decision_tree(self):
        sess1 = VumiSession()
        sess2 = VumiSession()
        sess3 = VumiSession()
        dt1 = TemplatedDecisionTree()
        dt2 = PopulatedDecisionTree()
        dt3 = TraversedDecisionTree()
        sess1.set_decision_tree(dt1)
        sess2.set_decision_tree(dt2)
        sess3.set_decision_tree(dt3)
        # baby steps
        self.assertEquals(sess1.get_decision_tree(), dt1)
        self.assertEquals(sess2.get_decision_tree(), dt2)
        self.assertEquals(sess3.get_decision_tree(), dt3)
        # the new TraversedDecisionTree should not be completed
        self.assertFalse(dt3.is_completed())

        test_yaml = '''
        __data__:
            url:
            username:
            password:
            json: >
                {
                    "users": [
                        {
                            "name": "Simon",
                            "items": [
                                {
                                    "name": "alpha",
                                    "stuff": 0,
                                    "things": 0,
                                    "timestamp": 0,
                                    "id": "1.1"
                                },
                                {
                                    "name": "beta",
                                    "stuff": 0,
                                    "things": 0,
                                    "timestamp": 0,
                                    "id": "1.2"
                                }
                            ],
                            "timestamp": "1234567890",
                            "id": "1"
                        },
                        {
                            "name": "David",
                            "items": [],
                            "timestamp": "1234567890",
                            "id": "2"
                        }
                    ],
                    "msisdn": "12345"
                }

        __start__:
            display:
                english: "Hello."
                swahili: "Salamu."
            next: users

        users:
            question:
                english: "Who are you?"
                swahili: "Ninyi ni nani?"
            options: name
            next: items

        items:
            question:
                english: "Which item?"
                swahili: "Ambayo kitu?"
            options: name
            next: stuff
            new:
                name:
                stuff: 0
                things: 0
                timestamp: 0
                id:

        stuff:
            question:
                english: "How much stuff?"
                swahili: "Kiasi gani stuff?"
            validate: integer
            next: things

        things:
            question:
                english: "How many things?"
                swahili: "Mambo mangapi?"
            validate: integer
            next: timestamp

        timestamp:
            question:
                english: "Which day was it?"
                swahili: "Siku ambayo ilikuwa ni?"
            options:
                  - display:
                        english: "Today"
                        swahili: "Leo"
                    default: today
                    next: __finish__
                  - display:
                        english: "Yesterday"
                        swahili: "Jana"
                    default: yesterday
                    next: __finish__
                  - display:
                        english: "An earlier day"
                        swahili: "Mapema siku ya"
                    next:
                        question:
                            english: "Which day was it [dd/mm/yyyy]?"
                            swahili: "Kuwaambia ambayo siku [dd/mm/yyyy]?"
                        validate: date
                        next: __finish__

        __finish__:
            display:
                english: "Thank you and goodbye."
                swahili: "Asante na kwaheri."
        '''

        # just check the load operations don't blow up
        self.assertEquals(dt1.load_yaml_template(test_yaml), None)
        self.assertEquals(dt2.load_yaml_template(test_yaml), None)
        self.assertEquals(dt2.load_dummy_data(), None)
        self.assertEquals(dt3.load_yaml_template(test_yaml), None)
        self.assertEquals(dt3.load_dummy_data(), None)

        # simple backtracking test
        before = dt3.dumps()
        dt3.start()
        dt3.go_back()
        self.assertEquals(before, dt3.dumps())
        #dt3.set_language("swahili")

        # a fake interaction
        self.assertEquals(dt3.start(), 'Hello.')
        self.assertEquals(dt3.question(), 'Who are you?\n1. Simon\n2. David')
        dt3.answer(1)
        self.assertEquals(dt3.question(), 'Which item?\n1. alpha\n2. beta')
        dt3.answer(1)
        self.assertEquals(dt3.question(), 'How much stuff?')
        dt3.answer(42)
        self.assertEquals(dt3.question(), 'How many things?')
        dt3.answer(23)
        dt3.go_up()
        self.assertEquals(dt3.question(), 'Which item?\n1. alpha\n2. beta')
        dt3.answer(2)
        self.assertEquals(dt3.question(), 'How much stuff?')
        dt3.answer(22)
        self.assertEquals(dt3.question(), 'How many things?')
        dt3.answer(222)
        self.assertEquals(
            dt3.question(),
            'Which day was it?\n1. Today\n2. Yesterday\n3. An earlier day')
        dt3.answer(3)
        self.assertEquals(dt3.question(), 'Which day was it [dd/mm/yyyy]?')
        dt3.answer("03/03/2011")
        self.assertEquals(dt3.finish(), 'Thank you and goodbye.')
        #print dt3.dumps(level=2, serialize=yaml.dump)

        test_yaml = '''
        __data__:
            url:
            username:
            password:
            json: >
                {
                    "users": [
                        {
                            "name": "Simon",
                            "items": [
                                {   "name": "one"},
                                {   "name": "two"},
                                {   "name": "three"},
                                {   "name": "four"},
                                {   "name": "five"},
                                {   "name": "six"},
                                {   "name": "seven"},
                                {   "name": "eight"},
                                {   "name": "nine"},
                                {   "name": "ten"},
                                {   "name": "eleven"},
                                {   "name": "twelve"},
                                {   "name":
                                    "something that uses up lots of characters"
                                    },
                                {   "name": "and use up more characters"},
                                {
                                    "name": "alpha",
                                    "stuff": 0,
                                    "things": 0,
                                    "timestamp": 0,
                                    "id": "1.1"
                                },
                                {
                                    "name": "beta",
                                    "stuff": 0,
                                    "things": 0,
                                    "timestamp": 0,
                                    "id": "1.2"
                                }
                            ],
                            "timestamp": "1234567890",
                            "id": "1"
                        },
                        {
                            "name": "David",
                            "items": [],
                            "timestamp": "1234567890",
                            "id": "2"
                        }
                    ],
                    "msisdn": "12345"
                }

        __start__:
            display:
                english: "Hello."
                swahili: "Salamu."
            next: users

        users:
            question:
                english: "Who are you?"
                swahili: "Ninyi ni nani?"
            options: name
            next: items

        items:
            question:
                english: "Which item?"
                swahili: "Ambayo kitu?"
            options: name
            more:
                english: "more items ..."
                swahili: "zaidi ya vitu ..."
            next: stuff
            new:
                name:
                stuff: 0
                things: 0
                timestamp: 0
                id:

        stuff:
            question:
                english: "How much stuff?"
                swahili: "Kiasi gani stuff?"
            validate: integer
            next: things

        things:
            question:
                english: "How many things?"
                swahili: "Mambo mangapi?"
            validate: integer
            next: timestamp

        timestamp:
            question:
                english: "Which day was it?"
                swahili: "Siku ambayo ilikuwa ni?"
            options:
                  - display:
                        english: "Today"
                        swahili: "Leo"
                    default: today
                    next: __finish__
                  - display:
                        english: "Yesterday"
                        swahili: "Jana"
                    default: yesterday
                    next: __finish__
                  - display:
                        english: "An earlier day"
                        swahili: "Mapema siku ya"
                    next:
                        question:
                            english: "Which day was it [dd/mm/yyyy]?"
                            swahili: "Kuwaambia ambayo siku [dd/mm/yyyy]?"
                        validate: date
                        next: __finish__

        __finish__:
            display:
                english: "Thank you and goodbye."
                swahili: "Asante na kwaheri."
        '''

        sc = SessionConsumer(None)

        r_server = sc.r_server
        r_server.flushall()

        sc.set_yaml_template(test_yaml)
        sc.del_session("12345")
        sess4 = sc.get_session("12345")
        dt4 = sess4.get_decision_tree()
        #dt4.echo_on()
        #sc.gsdt("12345").set_language("swahili")
        self.assertEquals(dt4.start(), "Hello.")
        self.assertEquals(dt4.question(), "Who are you?\n1. Simon\n2. David")
        sess4.save()
        sess4 = None
        # after persisting to redis, retrieve afresh
        sess4 = sc.get_session("12345")
        dt4 = sess4.get_decision_tree()
        dt4.answer(4)
        self.assertEquals(dt4.question(), "Who are you?\n1. Simon\n2. David")
        sess4.save()
        sess4 = None
        # after persisting to redis, retrieve afresh
        sess4 = sc.get_session("12345")
        dt4 = sess4.get_decision_tree()
        dt4.answer(1)
        self.assertEquals(
            dt4.question(),
            "Which item?\n1. one\n2. two\n3. three\n4. four\n5. five\n6."
            " six\n7. seven\n8. eight\n9. nine\n0. more items ...")
        sess4.save()
        sess4 = None
        # after persisting to redis, retrieve afresh
        sess4 = sc.get_session("12345")
        dt4 = sess4.get_decision_tree()
        dt4.answer(0)
        self.assertEquals(
            dt4.question(),
            "Which item?\n1. ten\n2. eleven\n3. twelve\n4. something that"
            " uses up lots of characters\n5. and use up more"
            " characters\n0. more items ...")
        sess4.save()
        sess4 = None
        # after persisting to redis, retrieve afresh
        sess4 = sc.get_session("12345")
        dt4 = sess4.get_decision_tree()
        dt4.answer(0)
        self.assertEquals(dt4.question(), "Which item?\n1. alpha\n2. beta")
        sess4.save()
        sess4 = None
        # after persisting to redis, retrieve afresh
        sess4 = sc.get_session("12345")
        dt4 = sess4.get_decision_tree()
        dt4.answer(1)
        self.assertEquals(dt4.question(), "How much stuff?")
        sess4.save()
        sess4 = None
        # after persisting to redis, retrieve afresh
        sess4 = sc.get_session("12345")
        dt4 = sess4.get_decision_tree()
        dt4.answer(42)
        self.assertEquals(dt4.question(), "How many things?")
        sess4.save()
        sess4 = None
        # after persisting to redis, retrieve afresh
        sess4 = sc.get_session("12345")
        dt4 = sess4.get_decision_tree()
        dt4.answer(23)

        self.assertEquals(
            dt4.question(),
            "Which day was it?\n1. Today\n2. Yesterday\n3. An earlier day")
        sess4.save()
        sess4 = None
        # after persisting to redis, retrieve afresh
        sess4 = sc.get_session("12345")
        dt4 = sess4.get_decision_tree()
        dt4.answer('earlier')
        self.assertEquals(
            dt4.question(),
            "Which day was it?\n1. Today\n2. Yesterday\n3. An earlier day")
        sess4.save()
        sess4 = None
        # after persisting to redis, retrieve afresh
        sess4 = sc.get_session("12345")
        dt4 = sess4.get_decision_tree()
        dt4.answer(3)
        self.assertEquals(dt4.question(), "Which day was it [dd/mm/yyyy]?")
        sess4.save()
        sess4 = None
        # after persisting to redis, retrieve afresh
        sess4 = sc.get_session("12345")
        dt4 = sess4.get_decision_tree()
        dt4.answer("03/03/2011")
        sess4.save()
        #print repr(sc.post_back_json("12345") or '')
        self.assertEquals(dt4.finish(), "Thank you and goodbye.")
        sess4.delete()
        sess4.save()
Ejemplo n.º 4
0
    def test_session_decision_tree(self):
        sess1 = VumiSession()
        sess2 = VumiSession()
        sess3 = VumiSession()
        dt1 = TemplatedDecisionTree()
        dt2 = PopulatedDecisionTree()
        dt3 = TraversedDecisionTree()
        sess1.set_decision_tree(dt1)
        sess2.set_decision_tree(dt2)
        sess3.set_decision_tree(dt3)
        # baby steps
        self.assertEquals(sess1.get_decision_tree(), dt1)
        self.assertEquals(sess2.get_decision_tree(), dt2)
        self.assertEquals(sess3.get_decision_tree(), dt3)
        # the new TraversedDecisionTree should not be completed
        self.assertFalse(dt3.is_completed())

        test_yaml = '''
        __data__:
            url:
            username:
            password:
            json: >
                {
                    "users": [
                        {
                            "name": "Simon",
                            "items": [
                                {
                                    "name": "alpha",
                                    "stuff": 0,
                                    "things": 0,
                                    "timestamp": 0,
                                    "id": "1.1"
                                },
                                {
                                    "name": "beta",
                                    "stuff": 0,
                                    "things": 0,
                                    "timestamp": 0,
                                    "id": "1.2"
                                }
                            ],
                            "timestamp": "1234567890",
                            "id": "1"
                        },
                        {
                            "name": "David",
                            "items": [],
                            "timestamp": "1234567890",
                            "id": "2"
                        }
                    ],
                    "msisdn": "12345"
                }

        __start__:
            display:
                english: "Hello."
                swahili: "Salamu."
            next: users

        users:
            question:
                english: "Who are you?"
                swahili: "Ninyi ni nani?"
            options: name
            next: items

        items:
            question:
                english: "Which item?"
                swahili: "Ambayo kitu?"
            options: name
            next: stuff
            new:
                name:
                stuff: 0
                things: 0
                timestamp: 0
                id:

        stuff:
            question:
                english: "How much stuff?"
                swahili: "Kiasi gani stuff?"
            validate: integer
            next: things

        things:
            question:
                english: "How many things?"
                swahili: "Mambo mangapi?"
            validate: integer
            next: timestamp

        timestamp:
            question:
                english: "Which day was it?"
                swahili: "Siku ambayo ilikuwa ni?"
            options:
                  - display:
                        english: "Today"
                        swahili: "Leo"
                    default: today
                    next: __finish__
                  - display:
                        english: "Yesterday"
                        swahili: "Jana"
                    default: yesterday
                    next: __finish__
                  - display:
                        english: "An earlier day"
                        swahili: "Mapema siku ya"
                    next:
                        question:
                            english: "Which day was it [dd/mm/yyyy]?"
                            swahili: "Kuwaambia ambayo siku [dd/mm/yyyy]?"
                        validate: date
                        next: __finish__

        __finish__:
            display:
                english: "Thank you and goodbye."
                swahili: "Asante na kwaheri."
        '''

        # just check the load operations don't blow up
        self.assertEquals(dt1.load_yaml_template(test_yaml), None)
        self.assertEquals(dt2.load_yaml_template(test_yaml), None)
        self.assertEquals(dt2.load_dummy_data(), None)
        self.assertEquals(dt3.load_yaml_template(test_yaml), None)
        self.assertEquals(dt3.load_dummy_data(), None)

        # simple backtracking test
        before = dt3.dumps()
        dt3.start()
        dt3.go_back()
        self.assertEquals(before, dt3.dumps())
        #dt3.set_language("swahili")

        # a fake interaction
        self.assertEquals(dt3.start(),
                'Hello.')
        self.assertEquals(dt3.question(),
                'Who are you?\n1. Simon\n2. David')
        dt3.answer(1)
        self.assertEquals(dt3.question(),
                'Which item?\n1. alpha\n2. beta')
        dt3.answer(1)
        self.assertEquals(dt3.question(),
                'How much stuff?')
        dt3.answer(42)
        self.assertEquals(dt3.question(),
                'How many things?')
        dt3.answer(23)
        dt3.go_up()
        self.assertEquals(dt3.question(),
                'Which item?\n1. alpha\n2. beta')
        dt3.answer(2)
        self.assertEquals(dt3.question(),
                'How much stuff?')
        dt3.answer(22)
        self.assertEquals(dt3.question(),
                'How many things?')
        dt3.answer(222)
        self.assertEquals(dt3.question(),
                'Which day was it?\n1. Today\n2. Yesterday\n3. An earlier day')
        dt3.answer(3)
        self.assertEquals(dt3.question(),
                'Which day was it [dd/mm/yyyy]?')
        dt3.answer("03/03/2011")
        self.assertEquals(dt3.finish(),
                'Thank you and goodbye.')
        #print dt3.dumps(level=2, serialize=yaml.dump)

        test_yaml = '''
        __data__:
            url:
            username:
            password:
            json: >
                {
                    "users": [
                        {
                            "name": "Simon",
                            "items": [
                                {   "name": "one"},
                                {   "name": "two"},
                                {   "name": "three"},
                                {   "name": "four"},
                                {   "name": "five"},
                                {   "name": "six"},
                                {   "name": "seven"},
                                {   "name": "eight"},
                                {   "name": "nine"},
                                {   "name": "ten"},
                                {   "name": "eleven"},
                                {   "name": "twelve"},
                                {   "name": "something that uses up lots of characters"},
                                {   "name": "and use up more characters"},
                                {
                                    "name": "alpha",
                                    "stuff": 0,
                                    "things": 0,
                                    "timestamp": 0,
                                    "id": "1.1"
                                },
                                {
                                    "name": "beta",
                                    "stuff": 0,
                                    "things": 0,
                                    "timestamp": 0,
                                    "id": "1.2"
                                }
                            ],
                            "timestamp": "1234567890",
                            "id": "1"
                        },
                        {
                            "name": "David",
                            "items": [],
                            "timestamp": "1234567890",
                            "id": "2"
                        }
                    ],
                    "msisdn": "12345"
                }

        __start__:
            display:
                english: "Hello."
                swahili: "Salamu."
            next: users

        users:
            question:
                english: "Who are you?"
                swahili: "Ninyi ni nani?"
            options: name
            next: items

        items:
            question:
                english: "Which item?"
                swahili: "Ambayo kitu?"
            options: name
            more:
                english: "more items ..."
                swahili: "zaidi ya vitu ..."
            next: stuff
            new:
                name:
                stuff: 0
                things: 0
                timestamp: 0
                id:

        stuff:
            question:
                english: "How much stuff?"
                swahili: "Kiasi gani stuff?"
            validate: integer
            next: things

        things:
            question:
                english: "How many things?"
                swahili: "Mambo mangapi?"
            validate: integer
            next: timestamp

        timestamp:
            question:
                english: "Which day was it?"
                swahili: "Siku ambayo ilikuwa ni?"
            options:
                  - display:
                        english: "Today"
                        swahili: "Leo"
                    default: today
                    next: __finish__
                  - display:
                        english: "Yesterday"
                        swahili: "Jana"
                    default: yesterday
                    next: __finish__
                  - display:
                        english: "An earlier day"
                        swahili: "Mapema siku ya"
                    next:
                        question:
                            english: "Which day was it [dd/mm/yyyy]?"
                            swahili: "Kuwaambia ambayo siku [dd/mm/yyyy]?"
                        validate: date
                        next: __finish__

        __finish__:
            display:
                english: "Thank you and goodbye."
                swahili: "Asante na kwaheri."
        '''

        sc = SessionConsumer(None)

        r_server = sc.r_server
        r_server.flushall()

        sc.set_yaml_template(test_yaml)
        sc.del_session("12345")
        sess4 = sc.get_session("12345")
        dt4 = sess4.get_decision_tree()
        #dt4.echo_on()
        #sc.gsdt("12345").set_language("swahili")
        self.assertEquals(dt4.start(),
                "Hello.")
        self.assertEquals(dt4.question(),
                "Who are you?\n1. Simon\n2. David")
        sess4.save()
        sess4 = None
        # after persisting to redis, retrieve afresh
        sess4 = sc.get_session("12345")
        dt4 = sess4.get_decision_tree()
        dt4.answer(4)
        self.assertEquals(dt4.question(),
                "Who are you?\n1. Simon\n2. David")
        sess4.save()
        sess4 = None
        # after persisting to redis, retrieve afresh
        sess4 = sc.get_session("12345")
        dt4 = sess4.get_decision_tree()
        dt4.answer(1)
        self.assertEquals(dt4.question(),
                "Which item?\n1. one\n2. two\n3. three\n4. four\n5. five\n6. six\n7. seven\n8. eight\n9. nine\n0. more items ...")
        sess4.save()
        sess4 = None
        # after persisting to redis, retrieve afresh
        sess4 = sc.get_session("12345")
        dt4 = sess4.get_decision_tree()
        dt4.answer(0)
        self.assertEquals(dt4.question(),
                "Which item?\n1. ten\n2. eleven\n3. twelve\n4. something that uses up lots of characters\n5. and use up more characters\n0. more items ...")
        sess4.save()
        sess4 = None
        # after persisting to redis, retrieve afresh
        sess4 = sc.get_session("12345")
        dt4 = sess4.get_decision_tree()
        dt4.answer(0)
        self.assertEquals(dt4.question(),
                "Which item?\n1. alpha\n2. beta")
        sess4.save()
        sess4 = None
        # after persisting to redis, retrieve afresh
        sess4 = sc.get_session("12345")
        dt4 = sess4.get_decision_tree()
        dt4.answer(1)
        self.assertEquals(dt4.question(),
                "How much stuff?")
        sess4.save()
        sess4 = None
        # after persisting to redis, retrieve afresh
        sess4 = sc.get_session("12345")
        dt4 = sess4.get_decision_tree()
        dt4.answer(42)
        self.assertEquals(dt4.question(),
                "How many things?")
        sess4.save()
        sess4 = None
        # after persisting to redis, retrieve afresh
        sess4 = sc.get_session("12345")
        dt4 = sess4.get_decision_tree()
        dt4.answer(23)

        self.assertEquals(dt4.question(),
                "Which day was it?\n1. Today\n2. Yesterday\n3. An earlier day")
        sess4.save()
        sess4 = None
        # after persisting to redis, retrieve afresh
        sess4 = sc.get_session("12345")
        dt4 = sess4.get_decision_tree()
        dt4.answer('earlier')
        self.assertEquals(dt4.question(),
                "Which day was it?\n1. Today\n2. Yesterday\n3. An earlier day")
        sess4.save()
        sess4 = None
        # after persisting to redis, retrieve afresh
        sess4 = sc.get_session("12345")
        dt4 = sess4.get_decision_tree()
        dt4.answer(3)
        self.assertEquals(dt4.question(),
                "Which day was it [dd/mm/yyyy]?")
        sess4.save()
        sess4 = None
        # after persisting to redis, retrieve afresh
        sess4 = sc.get_session("12345")
        dt4 = sess4.get_decision_tree()
        dt4.answer("03/03/2011")
        sess4.save()
        #print repr(sc.post_back_json("12345") or '')
        self.assertEquals(dt4.finish(),
                "Thank you and goodbye.")
        sess4.delete()
        sess4.save()