Beispiel #1
0
 def __init__(self, source_dir):
     source_retriever = SourceRetriever(source_dir)
     transition_builder = TransitionBuilder()
     speaker_collection = SpeakerCollection(source_retriever)
     transition_retriever = CachedTransitionRetriever(
         source_retriever, transition_builder, speaker_collection)
     rand = Rand()
     quote_generator = QuoteGenerator(rand)
     self.quote_processor = QuoteRequestProcessor(transition_retriever,
                                                  quote_generator)
     start_time = datetime.datetime.fromtimestamp(time.time())
     self.meta_processor = MetaRequestProcessor(transition_retriever,
                                                speaker_collection, rand,
                                                start_time)
     self.processors = {
         config.GENERATE_REQUEST_TRIGGER: (self.quote_processor, {
             "direction": QuoteDirection.BIDI
         }),
         config.GENERATE_FORWARD_REQUEST_TRIGGER: (self.quote_processor, {
             "direction":
             QuoteDirection.FORWARD
         }),
         config.GENERATE_REVERSE_REQUEST_TRIGGER: (self.quote_processor, {
             "direction":
             QuoteDirection.REVERSE
         }),
         config.META_REQUEST_TRIGGER: (self.meta_processor, {}),
     }
Beispiel #2
0
def create_app(max_value: float = 150.00, min_value: float = 5.00, update_interval: float = 0.1):
    app = web.Application()
    app.router.add_route("GET", "/quotes", stream_handler)

    app['GENERATOR'] = QuoteGenerator(SHARE_SYMBOLS, min_value=min_value, max_value=max_value, seed=1)
    app['UPDATE_INTERVAL'] = update_interval

    return app
Beispiel #3
0
def test_value_never_exceeds_min_value():
    MIN_VALUE = 8
    q = QuoteGenerator(SHARE_SYMBOLS,
                       min_value=MIN_VALUE,
                       max_value=150,
                       seed=1)
    for i in range(10000):
        assert tuple(
            next(q).values())[0] >= MIN_VALUE, f'Failed in iteration {i}'
Beispiel #4
0
def test_many_symbols_generator():
    q = QuoteGenerator(SHARE_SYMBOLS, min_value=0, max_value=150, seed=1)
    assert next(q)['B3SA3'] == 10.34
    assert next(q)['BBDC4'] == 9.7
    assert next(q)['RADL3'] == 10.73
    assert next(q)['SUZB3'] == 10.51
    assert next(q)['BRFS3'] == 9.37
    assert next(q)['VALE3'] == 11.0
    assert next(q)['MRFG3'] == 10.06
    assert next(q)['PETR4'] == 10.6
    assert next(q)['GOLL4'] == 10.65
    assert next(q)['KROT3'] == 10.39
    assert next(q)['ABEV3'] == 11.02
    assert next(q)['VALE3'] == 10.15
Beispiel #5
0
def test_two_symbols_generator():
    q = QuoteGenerator(["PETR4", "VALE3"], min_value=0, max_value=150, seed=2)
    assert next(q)["PETR4"] == 9.37
    assert next(q)["VALE3"] == 10.88
Beispiel #6
0
def test_one_symbol_generator():
    q = QuoteGenerator(["PETR4"], min_value=0, max_value=150, seed=1)
    assert next(q)["PETR4"] == 10.34
 def setUp(self):
     self.rand = Mock()
     self.generator = QuoteGenerator(self.rand)
class TestQuoteGenerator(unittest.TestCase):
    def setUp(self):
        self.rand = Mock()
        self.generator = QuoteGenerator(self.rand)

    def tearDown(self):
        pass

    def test_generate_no_source(self):
        quote = self.generator.generate({})

        self.assertEqual(quote, [])

    def test_generate_single_choice(self):
        transitions = {
            ("the", "cat"): ["sat"],
            ("cat", "sat"): ["on"],
            ("sat", "on"): ["the"],
            ("on", "the"): ["mat"],
        }
        self.rand.rand_index.return_value = 0

        quote = self.generator.generate(transitions)

        self.assertEqual(quote, ["the", "cat", "sat", "on", "the", "mat"])

    def test_generate_with_unknown_initial(self):
        transitions = {
            ("the", "cat"): ["sat"],
            ("cat", "sat"): ["on"],
            ("sat", "on"): ["the"],
            ("on", "the"): ["mat"],
        }
        self.rand.rand_index.return_value = 0

        quote = self.generator.generate(transitions, ("one", "day"))

        self.assertEqual(quote, [])

    def test_generate_with_overlong_initial(self):
        transitions = {
            ("the", "cat"): ["sat"],
            ("cat", "sat"): ["on"],
            ("sat", "on"): ["the"],
            ("on", "the"): ["mat"],
        }
        self.rand.rand_index.return_value = 0

        quote = self.generator.generate(transitions, ("the", "cat", "sat"))

        self.assertEqual(quote, [])

    def test_generate_with_full_valid_initial(self):
        transitions = {
            ("the", "cat"): ["sat"],
            ("cat", "sat"): ["on"],
            ("sat", "on"): ["the"],
            ("on", "the"): ["mat"],
        }
        self.rand.rand_index.return_value = 0

        quote = self.generator.generate(transitions, ("sat", "on"))

        self.assertEqual(quote, ["sat", "on", "the", "mat"])

    def test_generate_with_partial_invalid_initial(self):
        transitions = {
            ("the", "cat"): ["sat"],
            ("cat", "sat"): ["on"],
            ("sat", "on"): ["the"],
            ("on", "the"): ["mat"],
        }
        self.rand.rand_index.return_value = 0

        quote = self.generator.generate(transitions, ("blah", ))

        self.assertEqual(quote, [])

    def test_generate_with_partial_valid_initial(self):
        transitions = {
            ("the", "cat"): ["sat"],
            ("cat", "sat"): ["on"],
            ("sat", "on"): ["the"],
            ("on", "the"): ["mat"],
        }
        self.rand.rand_index.return_value = 0

        quote = self.generator.generate(transitions, ("sat", ))

        self.assertEqual(quote, ["sat", "on", "the", "mat"])

    def test_generate_endless_repetition(self):
        transitions = {
            ("a", "a"): ["a"],
        }
        self.rand.rand_index.return_value = 0

        quote = self.generator.generate(transitions)

        self.assertEqual(len(quote), 100)
        for word in quote:
            self.assertEqual(word, "a")