12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- from flask import current_app
- from datetime import datetime, timedelta
- from hashlib import sha512
- from io import BytesIO
- from PIL import Image as ImagePIL
- def gen_order_by(query_dict=dict(), keys=[], date_key=True):
- keys.append('id')
- if date_key:
- keys += ['created_at', 'updated_at']
- order_by = ['id']
- descent = query_dict.pop('orderby', None)
- if descent is not None:
- descent = descent.split(',')
- descent = list(set(keys) & set(descent))
- order_by = ['-%s' % i for i in descent]
- return tuple(order_by)
- def gen_filter_date(query_dict=dict(),
- date_key='created_at',
- date_format='%Y-%m-%d'):
- '''raise 时间格式错误'''
- filter_dict = {}
- start_date = query_dict.pop('start_date', None)
- end_date = query_dict.pop('end_date', None)
- if start_date is not None:
- start_date = datetime.strptime(start_date, date_format)
- key = '%s__gte' % date_key
- filter_dict.update(**{key: start_date})
- if end_date is not None:
- end_date = datetime.strptime(end_date, date_format)
- key = '%s__lte' % date_key
- filter_dict.update(**{key: end_date + timedelta(days=1)})
- if (start_date and end_date) and (start_date > end_date):
- raise ValueError
- return filter_dict
- def gen_filter_dict(query_dict=dict(), keys=[], equal_key=[], user=None):
- filter_dict = {}
- keys = list(set(keys) & set(query_dict.keys()))
- for k in keys:
- if k in equal_key:
- filter_dict.update(**{k: query_dict[k]})
- else:
- new_k = '%s__contains' % k
- filter_dict.update(**{new_k: query_dict[k]})
- if user is not None and user.is_authenticated:
- filter_dict.update(user__id=user.id)
- return filter_dict
- def gen_hash(image):
- sha = sha512()
-
-
-
-
-
- sha.update(image.read())
- return sha.hexdigest()
- def file_is_allowed(filename):
- e = current_app.config['UPLOAD_ALLOWED_EXTENSIONS']
- return '.' in filename and filename.rsplit('.', 1)[1].lower() in e
- def gen_thumb_image(path, width=0, height=0, filetype='JPEG'):
- '''
- 生成缩略图
- '''
- width = min(1024, width)
- height = min(1024, height)
- img = ImagePIL.open(path)
- if width and not height:
- height = float(width) / img.size[0] * img.size[1]
- if not width and height:
- width = float(height) / img.size[1] * img.size[0]
- stream = BytesIO()
- img.thumbnail((width, height), ImagePIL.ANTIALIAS)
- img.save(stream, format=filetype, optimize=True)
- return stream
|