Esempio n. 1
0
    def get(self, request, *args, **kwargs):
        """
        Stream a ZIP file of collection data
        without loading the whole file into memory.
        Based on ZipStream
        """
        from telemeta.views import MarkerView
        from telemeta.backup import CollectionSerializer
        import zipstream
        from zipfile import ZIP_DEFLATED, ZIP_STORED
        import json

        zip_file = zipstream.ZipFile(mode='w',
                                     compression=ZIP_STORED,
                                     allowZip64=True)
        cache_data = TelemetaCache(settings.TELEMETA_DATA_CACHE_DIR)

        collection = self.get_object()
        serializer = CollectionSerializer(collection)

        data = collection.get_json().encode('utf-8')
        filename = collection.public_id + '.json'
        cache_data.write_bin(data, filename)
        path = cache_data.dir + os.sep + filename
        zip_file.write(path, arcname=collection.public_id + os.sep + filename)

        data = serializer.get_xml().encode('utf-8')
        filename = collection.public_id + '.xml'
        cache_data.write_bin(data, filename)
        path = cache_data.dir + os.sep + filename
        zip_file.write(path, arcname=collection.public_id + os.sep + filename)

        for item in collection.items.all():
            if item.file:
                filename, ext = os.path.splitext(
                    item.file.path.split(os.sep)[-1])
                zip_file.write(item.file.path,
                               arcname=collection.public_id + os.sep +
                               item.code + ext)
            marker_view = MarkerView()
            markers = marker_view.get_markers(item.id)
            if markers:
                data = json.dumps(markers)
                filename = item.code + '.json'
                cache_data.write_bin(data, filename)
                path = cache_data.dir + os.sep + filename
                zip_file.write(path,
                               arcname=collection.public_id + os.sep +
                               filename)

        response = StreamingHttpResponse(zip_file,
                                         content_type='application/zip')
        response['Content-Disposition'] = "attachment; filename=%s.%s" % \
                                             (collection.code, 'zip')
        return response
Esempio n. 2
0
    def get(self, request, *args, **kwargs):
        """
        Stream a ZIP file of collection data
        without loading the whole file into memory.
        Based on ZipStream
        """
        from telemeta.views import MarkerView
        from telemeta.backup import CollectionSerializer
        import zipstream
        from zipfile import ZIP_DEFLATED, ZIP_STORED
        import json

        zip_file = zipstream.ZipFile(mode='w', compression=ZIP_STORED,
                                     allowZip64=True)
        cache_data = TelemetaCache(settings.TELEMETA_DATA_CACHE_DIR)

        collection = self.get_object()
        serializer = CollectionSerializer(collection)

        data = collection.get_json().encode('utf-8')
        filename = collection.public_id + '.json'
        cache_data.write_bin(data, filename)
        path = cache_data.dir + os.sep + filename
        zip_file.write(path, arcname=collection.public_id + os.sep + filename)

        data = serializer.get_xml().encode('utf-8')
        filename = collection.public_id + '.xml'
        cache_data.write_bin(data, filename)
        path = cache_data.dir + os.sep + filename
        zip_file.write(path, arcname=collection.public_id + os.sep + filename)

        for item in collection.items.all():
            if item.file:
                filename, ext = os.path.splitext(item.file.path.split(os.sep)[-1])
                zip_file.write(item.file.path, arcname=collection.public_id + os.sep + item.code + ext)
            marker_view = MarkerView()
            markers = marker_view.get_markers(item.id)
            if markers:
                data = json.dumps(markers)
                filename = item.code + '.json'
                cache_data.write_bin(data, filename)
                path = cache_data.dir + os.sep + filename
                zip_file.write(path, arcname=collection.public_id + os.sep + filename)

        response = StreamingHttpResponse(zip_file, content_type='application/zip')
        response['Content-Disposition'] = "attachment; filename=%s.%s" % \
                                             (collection.code, 'zip')
        return response
Esempio n. 3
0
    def get(self, request, *args, **kwargs):
        """
        Stream a ZIP file of collection data
        without loading the whole file into memory.
        Based on ZipStream
        """
        from telemeta.views import MarkerView
        from telemeta.backup import CollectionSerializer
        from telemeta.util import zipstream
        import json

        z = zipstream.ZipFile()
        cache_data = TelemetaCache(settings.TELEMETA_DATA_CACHE_DIR)

        collection = self.get_object()
        serializer = CollectionSerializer(collection)

        data = serializer.get_xml().encode("utf-8")
        filename = collection.public_id + '.xml'
        cache_data.write_bin(data, filename)
        path = cache_data.dir + os.sep + filename
        z.write(path, arcname=collection.public_id + os.sep + filename)

        for item in collection.items.all():
            filename, ext = os.path.splitext(item.file.path.split(os.sep)[-1])
            z.write(item.file.path,
                    arcname=collection.public_id + os.sep + item.code + ext)
            marker_view = MarkerView()
            markers = marker_view.get_markers(item.id)
            if markers:
                data = json.dumps(markers)
                filename = item.code + '.json'
                cache_data.write_bin(data, filename)
                path = cache_data.dir + os.sep + filename
                z.write(path, arcname=collection.public_id + os.sep + filename)

        try:
            from django.http import StreamingHttpResponse
            response = StreamingHttpResponse(z, content_type='application/zip')
        except:
            response = HttpResponse(z, content_type='application/zip')

        response['Content-Disposition'] = "attachment; filename=%s.%s" % \
                                             (item.code, 'zip')
        return response
Esempio n. 4
0
    def get(self, request, *args, **kwargs):
        """
        Stream a ZIP file of collection data
        without loading the whole file into memory.
        Based on ZipStream
        """
        from telemeta.views import MarkerView
        from telemeta.backup import CollectionSerializer
        import json
        import zipstream
        
        z = zipstream.ZipFile()        
        cache_data = TelemetaCache(settings.TELEMETA_DATA_CACHE_DIR)
        
        collection = self.get_object()
        serializer = CollectionSerializer(collection)

        data = serializer.get_xml().encode("utf-8")
        filename = collection.public_id + '.xml'
        cache_data.write_bin(data, filename)
        path = cache_data.dir + os.sep + filename
        z.write(path, arcname=collection.public_id + os.sep + filename)

        for item in collection.items.all():
            filename = item.file.path.split(os.sep)[-1]
            z.write(item.file.path, arcname=collection.public_id + os.sep + filename)
            marker_view = MarkerView()
            markers = marker_view.get_markers(item.id)
            if markers:
                data = json.dumps(markers)
                filename = item.code + '.json'
                cache_data.write_bin(data, filename)
                path = cache_data.dir + os.sep + filename
                z.write(path, arcname=collection.public_id + os.sep + filename)

        try:
            from django.http import StreamingHttpResponse
            response = StreamingHttpResponse(z, content_type='application/zip')
        except:
            response = HttpResponse(z, content_type='application/zip')

        response['Content-Disposition'] = "attachment; filename=%s.%s" % \
                                             (item.code, 'zip')
        return response