コード例 #1
0
    def setUp(self, update, record):
        self.print_outlet = PrintOutlet()
        self.update = update
        self.record = record

        record.payload = 'test'
        record.metadata.return_value = {}

        record.__repr__ = lambda x: 'TestRecord(test)'
        update.__repr__ = lambda x: 'TestUpdate()'
コード例 #2
0
    def run(self):
        # planner = APSPlanner()
        planner = SchedulePlanner(refresh_interval=0.5)

        http_inlet = HttpInlet('https://jsonplaceholder.typicode.com/todos/1',
                               metadata={CsvOutlet.FILE_MODE: 'a'})
        file_inlet = FileInlet('output_03.csv', read_mode=FileInletMode.LINE)
        http_inlet2 = HttpInlet(
            'https://postman-echo.com/get?foo1=bar1&foo2=bar2',
            metadata={
                'MONGODB_COLLECTION': 'test_collection2',
                'csv_file': 'output_02.csv'
            })

        print_outlet = PrintOutlet(only_payload=True)
        mongo_outlet = MongoOutlet('databay', 'test_collection')
        csv_outlet = CsvOutlet('output_03.csv')

        planner.add_links(
            Link([file_inlet], [print_outlet], timedelta(seconds=0.5)))
        planner.add_links(
            Link([http_inlet, http_inlet, http_inlet], [csv_outlet],
                 timedelta(seconds=2)))
        # planner.add_links(Link([http_inlet], [mongo_outlet], timedelta(seconds=1), name='first'))
        # planner.add_links(Link([http_inlet2, http_inlet2, http_inlet2], [mongo_outlet], timedelta(seconds=5), name='second'))
        # planner.add_links(Link([], [], timedelta(seconds=1.5)))
        # planner.add_links(Link([alphavantage_inlet], [mongo_outlet], timedelta(seconds=5)))
        # planner.add_links(Link([iex_inlet], [mongo_outlet], timedelta(seconds=5)))
        planner.start()
コード例 #3
0
class TestPrintOutlet(TestCase):
    @patch(fqname(Record), spec=Record)
    @patch(fqname(Update), spec=Update)
    def setUp(self, update, record):
        self.print_outlet = PrintOutlet()
        self.update = update
        self.record = record

        record.payload = 'test'
        record.metadata.return_value = {}

        record.__repr__ = lambda x: 'TestRecord(test)'
        update.__repr__ = lambda x: 'TestUpdate()'

    @patch('sys.stdout', new_callable=io.StringIO)
    def test_push(self, stdout):

        asyncio.run(self.print_outlet._push([self.record], self.update))

        self.assertEqual(stdout.getvalue(), 'TestUpdate() TestRecord(test)\n')

    @patch('sys.stdout', new_callable=io.StringIO)
    def test_push_only_payload(self, stdout):
        self.print_outlet.only_payload = True

        asyncio.run(self.print_outlet._push([self.record], self.update))

        self.assertEqual(stdout.getvalue(), 'TestUpdate() test\n')

    @patch('sys.stdout', new_callable=io.StringIO)
    def test_push_skip_update(self, stdout):
        self.print_outlet.skip_update = True

        asyncio.run(self.print_outlet._push([self.record], self.update))

        self.assertEqual(stdout.getvalue(), 'TestRecord(test)\n')
コード例 #4
0
from databay.inlets import HttpInlet
from databay.outlets import PrintOutlet
from databay import Link
from databay.planners import ApsPlanner

from databay.outlets.file_outlet import FileOutlet


# filter
class BitcoinInlet(HttpInlet):
    async def pull(self, update):
        response = await super().pull(update)
        return response.get('USD').get('last')


# produce
# stock_inlet = HttpInlet('https://blockchain.info/ticker')
stock_inlet = BitcoinInlet('https://blockchain.info/ticker')

# consume
print_outlet = PrintOutlet(True, True)
file_outlet = FileOutlet('bitcoin_price_1s.txt')

# transfer
link = Link(stock_inlet, [print_outlet, file_outlet],
            interval=datetime.timedelta(seconds=1))

planner = ApsPlanner(link)
planner.start()
コード例 #5
0
from databay import Link
from databay.outlets import PrintOutlet
from databay.planners import SchedulePlanner
from datetime import timedelta
from databay import Inlet
import random


class RandomIntInlet(Inlet):
    def pull(self, update):
        return random.randint(0, 100)


random_int_inlet = RandomIntInlet()

print_outlet = PrintOutlet(only_payload=True)

link = Link(random_int_inlet,
            print_outlet,
            interval=timedelta(seconds=5),
            name='random_ints')

planner = SchedulePlanner(link)
planner.start()
コード例 #6
0
import urllib.request


class WeatherInlet(Inlet):
    def __init__(self, api_key: str, city_name: str, *args, **kwargs):
        super().__init__(*args, **kwargs)

        self.api_key = api_key
        self.city_name = city_name

    def pull(self, update) -> List[Record]:
        url = f'https://api.openweathermap.org/data/2.5/weather?' \
              f'q={self.city_name}&' \
              f'appid={self.api_key}'

        contents = urllib.request.urlopen(url).read().decode('utf8')

        formatted = json.loads(contents)
        return formatted['weather'][0]['description']


api_key = os.environ.get('OPEN_WEATHER_MAP_API_KEY')
weather_inlet = WeatherInlet(api_key, 'Bangkok')

link = Link(weather_inlet,
            PrintOutlet(only_payload=True),
            interval=timedelta(seconds=2),
            name='bangkok_weather')

planner = APSPlanner(link)
planner.start()