Пример #1
0
def index(session):
    em = EntityManager()

    items = em.find('Item', sort=[('added', -1)])

    if bottle.request.GET.get('apikey'):
        bottle.response.content_type = 'text/json'
        return json.dumps([em.entity_to_json_safe_dict(i) for i in items])
    else:
        vd = common_view_data(session)
        vd.update({'items':items})
        return bottle.template('index.tpl', vd=vd)
Пример #2
0
def index(slug, session):
    em = EntityManager()

    tag = em.find_one('Tag', {'slug': slug})

    if tag:
        criteria = {
            'tagIds':{
                '$in':[str(tag._id)]
            }
        }
        items = em.find('Item', criteria, sort=[('added', -1)])

        if bottle.request.GET.get('apikey'):
            bottle.response.content_type = 'text/json'
            return json.dumps([em.entity_to_json_safe_dict(i) for i in items])
        else:
            vd = common_view_data(session)
            vd.update({'items':items})
            return bottle.template('index.tpl', vd=vd)
        
    else:
        return bottle.HTTPError(400)
Пример #3
0
def run_search(session, searchterm):
    em = EntityManager()

    raw_items = em.fuzzy_text_search('Item', searchterm, 'title')
    raw_items = raw_items + em.fuzzy_text_search('Item', searchterm, 'content')

    ids = [];
    items = []
    for i in raw_items:
        if i._id not in ids:
            ids.append(i._id)
            items.append(i)

    if bottle.request.GET.get('apikey'):
        bottle.response.content_type = 'text/json'
        return json.dumps([em.entity_to_json_safe_dict(i) for i in items])

    elif bottle.request.GET.get('ajax') == "1":
        return bottle.template('items.tpl', {'items':items})

    else:
        vd = common_view_data(session)
        vd.update({'items':items})
        return bottle.template('index.tpl', vd=vd)
Пример #4
0
class EntityManagerTest(unittest.TestCase):

    def setUp(self):
        self.em = EntityManager()

    def save_entity(self, _id=None, title='Test', items=[]):
        i = Item()
        if _id:
            i._id = _id
        i.title = title
        i.content = 'Some content'
        i.tagIds = [1,2,3]
        i.added = datetime.now()
        i.items = items

        return self.em.save('Item', i)

    def test_save(self):
        entity = self.save_entity()
        #test 'save' returns the saved entity
        self.assertIsInstance(entity, Item)

    def test_find(self):
        self.save_entity(title='Test1')
        sleep(1)
        self.save_entity(title='Test2')

        items = self.em.find('Item')

        self.assertEqual(len(items), 2)

        items = self.em.find('Item', sort=[('added',1)])

        self.assertEqual(items[0].title, 'Test1')
        self.assertEqual(items[1].title, 'Test2')

        items2 = self.em.find('Item', sort=[('added',-1)])

        self.assertEqual(items2[0].title, 'Test2')
        self.assertEqual(items2[1].title, 'Test1')


    def test_find_raw_count(self):
        self.save_entity(title='Test1')
        self.save_entity(title='Test2')

        item_count = self.em.find_raw('Item', count=True)

        self.assertEqual(item_count, 2)


    def test_find_one_by_id(self):
        _id = ObjectId()
        self.save_entity(_id=_id)

        item = self.em.find_one_by_id('Item', _id) #test that an ObjectId _id returns correctly
        self.assertIsInstance(item, Item)
        item = self.em.find_one_by_id('Item', str(_id)) #test that a string _id returns correctly
        self.assertIsInstance(item, Item)


    def test_find_one(self):
        self.save_entity(title='Test1')
        self.save_entity(title='Test2')

        item = self.em.find_one('Item', {'title':'Test2'})

        self.assertEqual(item.title, 'Test2')


    def test_nested_objects(self):
        self.save_entity(title='Test1', items = [Item(),Item(),Item()])

        item = self.em.find_one('Item', {'title':'Test1'})

        self.assertEqual(len(item.items), 3)

        for i in item.items:
            self.assertIsInstance(i, Item)


    def test_entity_to_json_safe_dict(self):
        i = Item()
        i.title = 'Nested Item'
        self.save_entity(title='Test1', items = [i,i,i])

        item = self.em.find_one('Item', {'title':'Test1'})

        jsondict = self.em.entity_to_json_safe_dict(item)

        self.assertIsInstance(jsondict, dict)

        self.assertEqual(jsondict['title'], 'Test1')

        #test nested object are still available
        self.assertEqual(jsondict['items'][0]['title'], 'Nested Item')

        #shouldnt be able to json serialise a datetime
        self.assertRaises(TypeError, json.dumps, item) 

        #should be able to json serialise Item after entity_to_json_safe_dict call
        self.assertIsInstance(json.dumps(jsondict), str) 


    def test_remove_one(self):
        self.save_entity(title='Test1')
        self.save_entity(title='Test2')
        self.save_entity(title='Test3')

        items = self.em.find('Item')

        self.assertEqual(len(items), 3)

        self.assertEqual(items[0].title, 'Test1')
        self.assertEqual(items[1].title, 'Test2')
        self.assertEqual(items[2].title, 'Test3')

        self.em.remove_one('Item', items[1]._id)

        items = self.em.find('Item')

        self.assertEqual(len(items), 2)

        self.assertEqual(items[0].title, 'Test1')
        self.assertEqual(items[1].title, 'Test3')


    def test_fuzzy_text_search(self):
        self.save_entity(title='These are some apples')
        self.save_entity(title='these are some pears')
        self.save_entity(title='theseare some bananas')

        # case insensitive
        items = self.em.fuzzy_text_search('Item', 'These', 'title')
        self.assertEqual(len(items), 3)

        items = self.em.fuzzy_text_search('Item', 'some apple', 'title')
        self.assertEqual(len(items), 3)

        items = self.em.fuzzy_text_search('Item', 'apples', 'title')
        self.assertEqual(len(items), 1)

        # spelling mistake
        items = self.em.fuzzy_text_search('Item', 'applss', 'title')
        self.assertEqual(len(items), 1)


    def tearDown(self):
        client = MongoClient(DBHOST, port=DBPORT)
        client[DBNAME].Item.drop()