Пример #1
0
    def test_find_feeds_worker__raises(self):
        forager = Forager(raise_to_depth=0)

        with mock.patch.object(forager, '_fetch_and_parse', side_effect=requests.RequestException):
            with self.assertRaises(requests.RequestException):
                forager._find_feeds_worker('')

        with mock.patch.object(
                forager,
                '_fetch_and_parse',
                side_effect=forager_exceptions.HttpException(response=None)):
            with self.assertRaises(forager_exceptions.HttpException):
                forager._find_feeds_worker('')

        forager = Forager(raise_to_depth=5)

        with mock.patch.object(forager, '_fetch_and_parse', side_effect=requests.RequestException):
            with self.assertRaises(requests.RequestException):
                forager._find_feeds_worker('', curr_depth=5)

        with mock.patch.object(
                forager,
                '_fetch_and_parse',
                side_effect=forager_exceptions.HttpException(response=None)):
            with self.assertRaises(forager_exceptions.HttpException):
                forager._find_feeds_worker('', curr_depth=5)
Пример #2
0
    def test_fetch_and_parse__unauthorized(self):
        from forager.exceptions import Unauthorized
        unauthorized_request_response = RequestResponse(text='', url='', status_code=401)
        with mock.patch('forager.requests.get', return_value=unauthorized_request_response):
            forager = Forager()

            with self.assertRaises(Unauthorized):
                forager._fetch_and_parse('a url')
Пример #3
0
    def test_find_feeds__non_recursive(self):
        forager = Forager()
        with self.mocked_requests(forager):
            response = forager.find_feeds('http://site-a.com/')

            self.assertEqual(response, {
                'http://site-a.com/feed/',
                'http://site-a.com/comments/feed/'
            })
Пример #4
0
    def test_find_feeds__depth_3(self):
        forager = Forager(max_depth=3)
        with self.mocked_requests(forager):
            response = forager.find_feeds('http://site-b.com/')

            self.assertEqual(response, {
                'http://site-b.com/hidden_feed/',
                'http://site-b.com/feed_like.xml',
                'http://site-c.com/a_feed.xml'
            })
Пример #5
0
    def test_requests_get(self):
        with mock.patch('forager.requests.get', return_value='some good stuff') as requests_get:
            forager = Forager()

            result = forager._requests_get('a url')

            self.assertEqual(result, 'some good stuff')
            requests_get.assert_called_once_with(
                    'a url',
                    headers={'User-Agent': forager._user_agent},
                    timeout=forager._request_timeout,
                    verify=False
            )
Пример #6
0
    def test_find_feeds__fixed_urls(self):
        forager = Forager(max_depth=3)
        with self.mocked_requests(forager):
            response = forager.find_feeds('site-b.com')

            self.assertTrue(len(response) > 0)
Пример #7
0
    def test_find_feeds__depth_1(self):
        forager = Forager(max_depth=1)
        with self.mocked_requests(forager):
            response = forager.find_feeds('http://site-b.com/')

            self.assertEqual(response, set())
Пример #8
0
    def test_find_feeds_worker__no_exception(self):
        forager = Forager()

        with mock.patch.object(forager, '_fetch_and_parse', return_value=(None, '')):
            self.assertEqual(forager._find_feeds_worker(''), set())
Пример #9
0
    def test_find_xmlrpc__direct(self):
        forager = Forager()
        with self.mocked_requests(forager):
            response = forager.find_xmlrpc('http://site-a.com/xmlrpc.php?rsd')

            self.assertEqual(response, {'http://site-a.com/xmlrpc.php'})
Пример #10
0
 def test_find_xmlrpc__empty(self):
     forager = Forager()
     with self.mocked_requests(forager), \
             mock.patch.object(forager, '_fetch_and_parse', return_value=FetchResult(soup=None, url='')):
         result = forager.find_xmlrpc('http://does-not-exist.com/')
         self.assertEqual(result, set())
Пример #11
0
 def test_find_xmlrpc__raises(self):
     forager = Forager()
     with self.mocked_requests(forager):
         with self.assertRaises(requests.RequestException):
             forager.find_xmlrpc('http://does-not-exist.com/')
Пример #12
0
    def test_find_auth_for_url__regex(self):
        forager = Forager(auths={r'^https?://(www\.)curata.com(/.*)$': 'waffles'})

        self.assertEqual(forager._find_auth_for_url('http://www.curata.com/blog/'), 'waffles')
Пример #13
0
    def test_find_auth_for_url__domain(self):
        forager = Forager(auths={'www.curata.com': 'waffles'})

        self.assertEqual(forager._find_auth_for_url('http://www.curata.com/blog/'), 'waffles')
Пример #14
0
    def test_find_feeds_worker__default_muted(self):
        forager = Forager()

        with mock.patch.object(forager, '_fetch_and_parse', side_effect=requests.RequestException):
            self.assertEqual(forager._find_feeds_worker(''), set())
Пример #15
0
import matplotlib.pyplot as plt
import matplotlib.animation as an
from forager import Forager
from landscape import Landscape
from foraging import foraging, display


def update(_):
    global l, f
    if not f.is_dead:
        foraging(l, f)
    return display(l, f),


l = Landscape(30, 30, 15)
f = Forager(0, 0)

fig = plt.figure(figsize=(6, 6))
ax = fig.add_axes([0, 0, 1, 1], frameon=False, aspect=1)

animation = an.FuncAnimation(fig, update, interval=1, blit=True, frames=200)
plt.show()

print('Total move = %d' % f.total_move)
print('Total eaten = %d' % f.total_eaten)
Пример #16
0
    def test_find_xmlrpc__bad_content(self):
        forager = Forager()
        with self.mocked_requests(forager):
            response = forager.find_xmlrpc('http://site-a.com/index_with_bad_rsd_link.html')

            self.assertEqual(response, set())
Пример #17
0
from forager import Forager
import pytest

forager = Forager(0, 0)


def test_is_dead():
    forager.stock = 1
    assert not forager.is_dead
    forager.stock = 0
    assert forager.is_dead


def test_quantity_which_can_be_eat():
    forager.stock = Forager.STOCK_MAX - 2
    assert forager.quantity_which_can_be_eaten == 2
    forager.stock = Forager.STOCK_MAX - Forager.EAT_MAX_BY_DAY * 2
    assert forager.quantity_which_can_be_eaten == Forager.EAT_MAX_BY_DAY


def test_eat():
    forager.stock = Forager.STOCK_MAX - 10
    forager.total_eaten = 10
    forager.eat(5)
    assert forager.stock == Forager.STOCK_MAX - 5
    assert forager.total_eaten == 15
    forager.stock = Forager.STOCK_MAX - 10
    forager.total_eaten = 10
    forager.eat(15)
    assert forager.stock == Forager.STOCK_MAX
    assert forager.total_eaten == 20
Пример #18
0
from forager import Forager
from landscape import Landscape
from foraging import eat, is_moving, move, foraging

x = 2
y = 2
nb_patches = 0
x_forager = 0
y_forager = 0
landscape = Landscape(x, y, nb_patches)
forager = Forager(x_forager, y_forager)


def test_eat():
    forager.stock = Forager.STOCK_MAX - Forager.EAT_MAX_BY_DAY + 2
    landscape.land[x_forager, y_forager] = Forager.EAT_MAX_BY_DAY
    eat(landscape, forager)
    assert landscape.land[x_forager, y_forager] == 2
    assert forager.stock == Forager.STOCK_MAX
    forager.stock = Forager.STOCK_MAX - Forager.EAT_MAX_BY_DAY - 2
    landscape.land[x_forager, y_forager] = Forager.EAT_MAX_BY_DAY
    eat(landscape, forager)
    assert landscape.land[x_forager, y_forager] == 0
    assert forager.stock == Forager.STOCK_MAX - 2


def test_is_moving():
    landscape.land[x_forager, y_forager] = 0
    assert is_moving(landscape, forager)
    landscape.land[x_forager, y_forager] = Forager.EAT_MAX_BY_DAY - 1
    forager.stock = 0