Example #1
0
def swcli(resource, filter_cmds=None, cache=True):
    api = Swapi(cache)
    resources = api.get_root()
    if resource not in resources:
        raise Exception(
            'Invalid resource name: \'%s\'. Available resources: [%s]' %
            (resource, ', '.join(resources)))

    data = api.get_resource(resource)

    if filter_cmds:
        filters = Filters(api)
        for f in filter_cmds:
            data = filters.filter_data(data,
                                       field_name=f[0],
                                       operator=f[1],
                                       value=f[2])

    return data
Example #2
0
class TestFilters(unittest.TestCase):
    def setUp(self):
        self.filters = Filters(None)

    def test_filter_data_equal(self):
        filtered = self.filters.filter_data(data, 'name', '=', 'John Doe')

        self.assertEqual(len(filtered), 1)
        self.assertEqual(filtered[0]['name'], 'John Doe')

    def test_filter_data_not_equal(self):
        filtered = self.filters.filter_data(data, 'name', '!=', 'John Doe')

        self.assertEqual(len(filtered), 2)
        self.assertEqual(filtered[0]['name'], 'Marie Freeman')
        self.assertEqual(filtered[1]['name'], 'Lisa Smith')

    def test_filter_data_is_contained(self):
        filtered = self.filters.filter_data(data, 'favourite_foods.name', '~>', 'Lemon Pie, Chocolate Cake')

        self.assertEqual(len(filtered), 2)
        self.assertEqual(filtered[0]['name'], 'John Doe')
        self.assertEqual(filtered[1]['name'], 'Lisa Smith')

    def test_filter_data_contains(self):
        filtered = self.filters.filter_data(data, 'address.city', '<~', 'Garden')

        self.assertEqual(len(filtered), 2)
        self.assertEqual(filtered[0]['name'], 'Marie Freeman')
        self.assertEqual(filtered[1]['name'], 'Lisa Smith')

    def test_filter_data_greater_than(self):
        filtered = self.filters.filter_data(data, 'age', '>', '40')

        self.assertEqual(len(filtered), 1)
        self.assertEqual(filtered[0]['name'], 'John Doe')

    def test_filter_data_greater_than_or_equal_to(self):
        filtered = self.filters.filter_data(data, 'age', '>=', '35')

        self.assertEqual(len(filtered), 2)
        self.assertEqual(filtered[0]['name'], 'John Doe')
        self.assertEqual(filtered[1]['name'], 'Lisa Smith')

    def test_filter_data_less_than(self):
        filtered = self.filters.filter_data(data, 'age', '<', '34')

        self.assertEqual(len(filtered), 1)
        self.assertEqual(filtered[0]['name'], 'Marie Freeman')

    def test_filter_data_less_than_or_equal_to(self):
        filtered = self.filters.filter_data(data, 'age', '<=', '35')

        self.assertEqual(len(filtered), 2)
        self.assertEqual(filtered[0]['name'], 'Marie Freeman')
        self.assertEqual(filtered[1]['name'], 'Lisa Smith')

    def test_filter_data_invalid_operator(self):
        with self.assertRaises(Exception) as err:
            filtered = self.filters.filter_data(data, 'age', '*+', '35')

        self.assertEqual(str(err.exception), 'Unknown operator \'*+\'')

    def test_filter_data_not_a_list(self):
        filtered = self.filters.filter_data('not a list', 'age', '>=', '35')

        self.assertEqual(filtered, 'not a list')

    def test_filter_data_field_not_found(self):
        filtered = self.filters.filter_data(data, 'old', '=', '35')

        self.assertEqual(len(filtered), 0)

    def test_filter_data_invalid_number(self):
        filtered = self.filters.filter_data(data, 'age', '>', 'five')

        self.assertEqual(len(filtered), 0)