소스 검색

move download_backup to frappe.utils.response

version-14
Pratik Vyas 11 년 전
부모
커밋
be715d277b
3개의 변경된 파일33개의 추가작업 그리고 31개의 파일을 삭제
  1. +3
    -2
      frappe/app.py
  2. +0
    -29
      frappe/utils/__init__.py
  3. +30
    -0
      frappe/utils/response.py

+ 3
- 2
frappe/app.py 파일 보기

@@ -15,6 +15,7 @@ import frappe
import frappe.handler import frappe.handler
import frappe.auth import frappe.auth
import frappe.api import frappe.api
import frappe.utils.response
import frappe.website.render import frappe.website.render
from frappe.utils import get_site_name from frappe.utils import get_site_name


@@ -58,8 +59,8 @@ def application(request):
frappe.handler.handle() frappe.handler.handle()
elif frappe.request.path.startswith("/api/"): elif frappe.request.path.startswith("/api/"):
frappe.api.handle() frappe.api.handle()
elif request.path.startswith('/backups'):
frappe.utils.download_backup(request.path)
elif frappe.request.path.startswith('/backups'):
frappe.utils.response.download_backup(request.path)
elif frappe.local.request.method in ('GET', 'HEAD'): elif frappe.local.request.method in ('GET', 'HEAD'):
frappe.website.render.render(frappe.request.path[1:]) frappe.website.render.render(frappe.request.path[1:])
else: else:


+ 0
- 29
frappe/utils/__init__.py 파일 보기

@@ -7,11 +7,7 @@ from __future__ import unicode_literals
from werkzeug.test import Client from werkzeug.test import Client
import os import os
import re import re
import mimetypes
import urllib import urllib
from werkzeug.wsgi import wrap_file
from werkzeug.wrappers import Response
from werkzeug.exceptions import NotFound, Unauthorized
import frappe import frappe


no_value_fields = ['Section Break', 'Column Break', 'HTML', 'Table', 'FlexTable', no_value_fields = ['Section Break', 'Column Break', 'HTML', 'Table', 'FlexTable',
@@ -933,28 +929,3 @@ def touch_file(path):
def get_test_client(): def get_test_client():
from frappe.app import application from frappe.app import application
return Client(application) return Client(application)

def download_backup(path):
try:
frappe.only_for(("System Manager", "Administrator"))
except frappe.PermissionError:
raise Unauthorized
send_private_file(path)

def send_private_file(path):
path = path[1:] if path.startswith('/') else path
path = os.path.join(frappe.local.conf.get('private_path', 'private'), path)

if frappe.local.request.headers.get('X-Use-X-Accel-Redirect'):
path = '/' + path
frappe.local._response.headers['X-Accel-Redirect'] = path
else:
filename = os.path.basename(path)
filepath = get_site_path(path)
try:
f = open(filepath, 'rb')
except IOError:
raise NotFound
frappe.local._response = Response(wrap_file(frappe.local.request.environ, f))
frappe.local._response.headers.add('Content-Disposition', 'attachment', filename=filename)
frappe.local._response.headers['Content-Type'] = mimetypes.guess_type(filename)[0] or 'application/octet-stream'

+ 30
- 0
frappe/utils/response.py 파일 보기

@@ -5,11 +5,16 @@ from __future__ import unicode_literals
import json import json
import datetime import datetime
import gzip, cStringIO import gzip, cStringIO
import mimetypes
import os
import frappe import frappe
import frappe.utils import frappe.utils
import frappe.sessions import frappe.sessions
import frappe.model.utils import frappe.model.utils
from werkzeug.local import LocalProxy from werkzeug.local import LocalProxy
from werkzeug.wsgi import wrap_file
from werkzeug.wrappers import Response
from werkzeug.exceptions import NotFound, Unauthorized


def report_error(status_code): def report_error(status_code):
if status_code!=404 or frappe.conf.logging: if status_code!=404 or frappe.conf.logging:
@@ -113,3 +118,28 @@ def compressBuf(buf):
zfile.write(buf) zfile.write(buf)
zfile.close() zfile.close()
return zbuf.getvalue() return zbuf.getvalue()

def download_backup(path):
try:
frappe.only_for(("System Manager", "Administrator"))
except frappe.PermissionError:
raise Unauthorized
send_private_file(path)

def send_private_file(path):
path = path[1:] if path.startswith('/') else path
path = os.path.join(frappe.local.conf.get('private_path', 'private'), path)

if frappe.local.request.headers.get('X-Use-X-Accel-Redirect'):
path = '/' + path
frappe.local._response.headers['X-Accel-Redirect'] = path
else:
filename = os.path.basename(path)
filepath = frappe.utils.get_site_path(path)
try:
f = open(filepath, 'rb')
except IOError:
raise NotFound
frappe.local._response = Response(wrap_file(frappe.local.request.environ, f))
frappe.local._response.headers.add('Content-Disposition', 'attachment', filename=filename)
frappe.local._response.headers['Content-Type'] = mimetypes.guess_type(filename)[0] or 'application/octet-stream'

불러오는 중...
취소
저장