コード例 #1
0
    def test_document_detail_delete(self):
        idx = Index.create(name='idx')
        alt_idx = Index.create(name='alt-idx')

        d1 = idx.index('doc 1', k1='v1', k2='v2')
        d2 = idx.index('doc 2', k3='v3')
        d2.attach('foo.jpg', 'bar')

        alt_idx.add_to_index(d1)
        alt_idx.add_to_index(d2)

        self.assertEqual(Metadata.select().count(), 3)
        self.assertEqual(Attachment.select().count(), 1)

        response = self.app.delete('/documents/%s/' % d2.get_id())
        data = json_load(response.data)
        self.assertEqual(data, {'success': True})

        self.assertEqual(Metadata.select().count(), 2)
        self.assertEqual(Attachment.select().count(), 0)

        response = self.app.delete('/documents/%s/' % d2.get_id())
        self.assertEqual(response.status_code, 404)

        self.assertEqual(Document.select().count(), 1)
        self.assertEqual(IndexDocument.select().count(), 2)
        self.assertEqual([d.get_id() for d in idx.documents], [d1.get_id()])
        self.assertEqual([d.get_id() for d in alt_idx.documents],
                         [d1.get_id()])
コード例 #2
0
    def test_attachment_views(self):
        idx = Index.create(name='idx')
        doc = idx.index('doc 1')
        doc.attach('foo.jpg', 'x')
        doc.attach('bar.png', 'x')
        Attachment.update(timestamp='2016-01-02 03:04:05').execute()

        resp = self.app.get('/documents/1/attachments/')
        resp_data = json_load(resp.data)
        self.assertEqual(resp_data['attachments'], [
            {
                'mimetype': 'image/png',
                'timestamp': '2016-01-02 03:04:05',
                'data_length': 1,
                'filename': 'bar.png',
                'document': '/documents/1/',
                'data': '/documents/1/attachments/bar.png/download/',
            },
            {
                'mimetype': 'image/jpeg',
                'timestamp': '2016-01-02 03:04:05',
                'data_length': 1,
                'filename': 'foo.jpg',
                'document': '/documents/1/',
                'data': '/documents/1/attachments/foo.jpg/download/',
            },
        ])

        resp = self.app.get('/documents/1/attachments/foo.jpg/')
        resp_data = json_load(resp.data)
        self.assertEqual(
            resp_data, {
                'mimetype': 'image/jpeg',
                'timestamp': '2016-01-02 03:04:05',
                'data_length': 1,
                'filename': 'foo.jpg',
                'document': '/documents/1/',
                'data': '/documents/1/attachments/foo.jpg/download/',
            })

        resp = self.app.delete('/documents/1/attachments/foo.jpg/')
        self.assertEqual(Attachment.select().count(), 1)

        resp = self.app.post('/documents/1/attachments/bar.png/',
                             data={
                                 'data': '',
                                 'file_0': (BytesIO(b'zz'), 'bar.png')
                             })
        resp_data = json_load(resp.data)
        self.assertEqual(resp_data['data_length'], 2)

        resp = self.app.get('/documents/1/attachments/bar.png/download/')
        self.assertEqual(resp.data, b'zz')
コード例 #3
0
    def test_document_detail_update_attachments(self):
        idx = Index.create(name='idx')
        doc = idx.index('test doc', foo='bar', nug='baze')
        doc.attach('foo.jpg', 'empty')
        url = '/documents/%s/' % doc.docid

        json_data = json.dumps({'content': 'test doc-edited'})
        response = self.app.post(url,
                                 data={
                                     'data': json_data,
                                     'file_0': (BytesIO(b'xx'), 'foo.jpg'),
                                     'file_1': (BytesIO(b'yy'), 'foo2.jpg')
                                 })

        resp_data = json_load(response.data)
        a1 = Attachment.get(Attachment.filename == 'foo.jpg')
        a2 = Attachment.get(Attachment.filename == 'foo2.jpg')
        a1_data = {
            'mimetype': 'image/jpeg',
            'data_length': 2,
            'data': '/documents/%s/attachments/foo.jpg/download/' % doc.docid,
            'timestamp': str(a1.timestamp),
            'filename': 'foo.jpg'
        }
        a2_data = {
            'mimetype': 'image/jpeg',
            'data_length': 2,
            'data': '/documents/%s/attachments/foo2.jpg/download/' % doc.docid,
            'timestamp': str(a2.timestamp),
            'filename': 'foo2.jpg'
        }
        self.assertEqual(
            resp_data, {
                'attachments': [a1_data, a2_data],
                'content': 'test doc-edited',
                'id': 1,
                'identifier': None,
                'indexes': ['idx'],
                'metadata': {
                    'foo': 'bar',
                    'nug': 'baze'
                }
            })

        self.assertEqual(Attachment.select().count(), 2)
        self.assertEqual(BlobData.select().count(), 3)

        # Existing file updated, new file added.
        foo, foo2 = Attachment.select().order_by(Attachment.filename)
        self.assertEqual(foo.blob.data, b'xx')
        self.assertEqual(foo2.blob.data, b'yy')
コード例 #4
0
ファイル: views.py プロジェクト: shubhampachori12110095/scout
    def list_view(self, document_id):
        document = self._get_document(document_id)
        query = (Attachment.select(Attachment, BlobData).join(
            BlobData,
            on=(Attachment.hash == BlobData.hash).alias('_blob')).where(
                Attachment.document == document))

        ordering = request.args.getlist('ordering')
        query = engine.apply_rank_and_sort(
            query, None, ordering, {
                'document': Attachment.document,
                'hash': Attachment.hash,
                'filename': Attachment.filename,
                'mimetype': Attachment.mimetype,
                'timestamp': Attachment.timestamp,
                'id': Attachment.id,
            }, 'filename')

        pq = self.paginated_query(query)
        return jsonify({
            'attachments': [
                attachment_serializer.serialize(attachment)
                for attachment in pq.get_object_list()
            ],
            'ordering':
            ordering,
            'page':
            pq.get_page(),
            'pages':
            pq.get_page_count()
        })
コード例 #5
0
ファイル: views.py プロジェクト: shubhampachori12110095/scout
    def delete(self, pk):
        document = self._get_document(pk)

        with database.atomic():
            (IndexDocument.delete().where(
                IndexDocument.document == document).execute())
            (Attachment.delete().where(
                Attachment.document == document).execute())
            Metadata.delete().where(Metadata.document == document).execute()
            document.delete_instance()
            logger.info('Deleted document with id = %s', document.get_id())

        return jsonify({'success': True})
コード例 #6
0
    def test_index_document_attachments(self):
        idx_a = Index.create(name='idx-a')
        json_data = json.dumps({
            'content': 'doc a',
            'index': 'idx-a',
            'metadata': {
                'k1': 'v1-a',
                'k2': 'v2-a'
            },
        })
        response = self.app.post('/documents/',
                                 data={
                                     'data': json_data,
                                     'file_0':
                                     (BytesIO(b'testfile1'), 'test1.txt'),
                                     'file_1':
                                     (BytesIO(b'testfile2'), 'test2.jpg')
                                 })

        a1 = Attachment.get(Attachment.filename == 'test1.txt')
        a2 = Attachment.get(Attachment.filename == 'test2.jpg')
        a1_data = {
            'data': '/documents/1/attachments/test1.txt/download/',
            'data_length': 9,
            'mimetype': 'text/plain',
            'timestamp': str(a1.timestamp),
            'filename': 'test1.txt'
        }
        a2_data = {
            'data': '/documents/1/attachments/test2.jpg/download/',
            'data_length': 9,
            'mimetype': 'image/jpeg',
            'timestamp': str(a2.timestamp),
            'filename': 'test2.jpg'
        }

        resp_data = json_load(response.data)
        self.assertEqual(
            resp_data, {
                'attachments': [a1_data, a2_data],
                'content': 'doc a',
                'id': 1,
                'identifier': None,
                'indexes': ['idx-a'],
                'metadata': {
                    'k1': 'v1-a',
                    'k2': 'v2-a'
                }
            })

        Attachment.update(timestamp='2016-02-01 01:02:03').execute()

        with assert_query_count(3):
            resp = self.app.get('/documents/1/attachments/')

        self.assertEqual(
            json_load(resp.data), {
                'ordering': [],
                'pages':
                1,
                'page':
                1,
                'attachments': [
                    {
                        'mimetype': 'text/plain',
                        'timestamp': '2016-02-01 01:02:03',
                        'data_length': 9,
                        'filename': 'test1.txt',
                        'document': '/documents/1/',
                        'data': '/documents/1/attachments/test1.txt/download/',
                    },
                    {
                        'mimetype': 'image/jpeg',
                        'timestamp': '2016-02-01 01:02:03',
                        'data_length': 9,
                        'filename': 'test2.jpg',
                        'document': '/documents/1/',
                        'data': '/documents/1/attachments/test2.jpg/download/',
                    },
                ],
            })