示例#1
0
def remove_todo():
    params = request.values or request.get_json() or {}
    todo_id = params.get("todo_id")
    result = set_todo_state(todo_id, 3)
    if not result:
        return CommonError.get_error(40000)
    return response_succ(body=result)
示例#2
0
def add_todo():
    """ add todo by parameters

    try to add a todo to todolist,you can just set the todo title.

    Args:
        title: title of the todo item

    Returns:
        a dict mapping keys to the index of the todo item just added.
        example:
        {"todo_id": 6}

    """

    params = request.values or request.get_json() or {}
    title = params.get("title")
    todo = TodoModel()
    todo.todo_title = title
    todo.add_time = get_unix_time_tuple()
    todo.todo_state = 1
    todo.bind_user_id = g.current_user.id
    db.session.add(todo)
    db.session.commit()
    result = {"todo_id": todo.todo_id}
    return response_succ(body=result)
示例#3
0
def rss_record():
    """ 
    记录rss的阅读记录
    """
    params = request.values or request.get_json() or {}
    url = str(params.get('url'))
    if not url:
        return CommonError.get_error(40000)
    bind_user_id = g.current_user.id
    sql = """
    SELECT bao_rss_user.user_id, bao_rss.rss_id, bao_rss_content.content_id FROM bao_rss_content, bao_rss, bao_rss_user
    WHERE bao_rss_content.content_link='{content_link}' 
        AND bao_rss_content.content_base=bao_rss.rss_link 
        AND bao_rss.rss_id=bao_rss_user.rss_id 
        AND bao_rss_user.user_id={user_id};
    """.format(content_link=url, user_id=bind_user_id)
    data_query = db.session.execute(sql).fetchone()
    if not data_query:
        return CommonError.error_toast('no match data')
    sql = """
    INSERT INTO bao_rss_read_record(read_url_id, read_user_id, read_time) VALUES ({read_url_id}, {read_user_id}, '{read_time}');
    """.format(read_url_id=data_query['content_id'],
               read_user_id=data_query['user_id'],
               read_time=get_unix_time_tuple())
    data_query = db.session.execute(sql)
    db.session.commit()
    return response_succ(body=boolValue(True))
示例#4
0
def upload():
    # 如果是单个文件
    # file = request.files["files"]
    files: list = request.files.getlist("files")
    if len(files) == 0:
        return CommonError.get_error(40000)
    resp = []
    for file in files:
        file: FileStorage = file
        extension = file.filename.split('.')
        ext: str = extension[1]
        identifier = str(uuid.uuid4()).replace("-", "") + "." + ext.lower()
        try:
            rec = fileStorage.save(file, name=identifier)
            fileObj = FileModel(file_hash=identifier,
                                file_name=file.filename,
                                file_type=file.mimetype)
            fileObj.save()
            db.session.flush()
            fileId = fileObj.file_id
            userId = g.current_user.id
            relationObj = FileUserModel(user_id=userId, file_id=fileId)
            relationObj.save(commit=True)

            resp.append({
                "origin": file.filename,
                "fileName": fileStorage.url(rec)
            })
        except Exception as e:
            current_app.logger.error(e)
            print(e)
            return CommonError.get_error(9999)
    return response_succ(body=resp)
示例#5
0
def list_rss():
    """ 查看订阅列表 """
    params = request.values or request.get_json() or {}
    bind_user_id = g.current_user.id
    # pages
    pages = params.get('pages') or 0
    limit = params.get('limit') or 10
    sql = ''
    sql += """
    SELECT bao_rss.rss_id, bao_rss.rss_link, bao_rss.add_time FROM bao_rss
    WHERE bao_rss.rss_id IN (
    SELECT rss_id FROM bao_rss_user WHERE bao_rss_user.user_id={user_id}
    )
    ORDER BY add_time DESC LIMIT {limit} OFFSET {offset};
    """.format(user_id=bind_user_id, limit=limit, offset=pages * limit)
    # sqlalchemy执行sql
    data_query = db.session.execute(sql)
    total = data_query.rowcount
    payload = {}
    payload['total'] = total
    payload['pages'] = pages
    payload['limit'] = limit
    payload['list'] = [{
        'link': item['rss_link'],
        'add_time': item['add_time'],
        'id': item['rss_id'],
    } for item in data_query.fetchall()]
    return response_succ(body=payload)
示例#6
0
def encryption(encrypt_type: str = "md5"):
    """
    指定加密方式
    :param encrypt_type: encryption type default is "md5"...
    support
    'sha1','md5', 'sha256', 'sha224', 'sha512', 'sha384', 'blake2b',
    'blake2s', 'sha3_224', 'sha3_256', 'sha3_384', 'sha3_512',
    'shake_128', 'shake_256'
    :return:
    """
    params = request.values or request.get_json() or {}
    print("p = " + str(params))
    source = params.get("source")
    if not source:
        return CommonError.get_error(40000)

    code: str = source
    encrypt_func = getattr(hashlib, encrypt_type, None) or None
    if not encrypt_func:
        return CommonError.get_error(40000)
    result = encrypt_func(code.encode('utf-8')).hexdigest()
    result_map = dict()
    result_map["source"] = source
    result_map["target"] = result
    result_map["type"] = encrypt_type
    return response_succ(body=result_map)
示例#7
0
文件: index.py 项目: jiazifa/sky_tool
def test_f():
    params = request.values
    payload = {}
    payload['rec'] = request.url
    payload['params'] = params
    payload['host'] = request.host
    payload['scheme'] = request.scheme
    payload['url'] = url_for('api.task_parser_backend')
    return response_succ(body=payload)
示例#8
0
def set_nickname():
    user: User = g.current_user
    params = request.values or request.get_json() or {}
    if request.method == "GET":
        return response_succ(body={"nickname": user.nickname or ""})
    new_name = params.get("nickname") or ''
    user.nickname = new_name
    db.session.commit()
    return user_info()
示例#9
0
def parser_rss():
    """ 开启解析任务 """
    params = request.values or request.get_json() or {}
    source = params.get("source")
    bind_user_id = g.current_user.id
    from celery_tasks.tasks import async_parser_feed
    task = async_parser_feed.delay(source, bind_user_id)
    result = {}
    result['task_id'] = task.id
    return response_succ(body=result)
示例#10
0
def task_parser_backend():
    """ 用于接受解析回调,暂时无用 """
    params = request.values or request.get_json() or {}
    status = params.get('status')
    result = params.get('result')
    task_id = params.get('task_id')
    payload = {}
    payload['status'] = status
    payload['result'] = result
    payload['task_id'] = task_id
    payload['trackback'] = trackback
    return response_succ(body=payload)
示例#11
0
def query_task():
    params = request.values  or request.get_json() or {}
    key: str = params.get('key') or 'celery*'
    if not key:
        return CommonError.get_error(40000)
    result = redisClient.get('celery-task-meta-'+str(key))
    if isinstance(result, bytes):
        reuslt = str(result, encoding='utf-8')
        result = json.loads(result)
    else:
        return CommonError.error_toast('no task')
    return response_succ(body=result)
示例#12
0
def user_info():
    user: User = g.current_user
    info = {
        "nickname":
        user.nickname or "",
        "email":
        user.email,
        "token":
        user.token,
        "background_image":
        "http://pic1.nipic.com/2008-08-14/2008814183939909_2.jpg",
    }
    return response_succ(body=info)
示例#13
0
def filter_todo(filter: str = None):
    params = request.values or request.get_json() or {}
    option_filter = filter or "all"
    todos = db.session.query(TodoModel).filter(
        TodoModel.bind_user_id == g.current_user.id)

    if option_filter == "undo":
        todos = todos.filter(TodoModel.todo_state == 1).all()
    if option_filter == "done":
        todos = todos.filter(TodoModel.todo_state == 2).all()
    if option_filter == "all":
        todos = todos.filter(TodoModel.todo_state != 3).all()
    result = list()
    if not todos or len(todos) == 0:
        response_succ(body=())
    for todo in todos:
        result.append({
            "todo_id": todo.todo_id,
            "todo_title": todo.todo_title,
            "todo_state": todo.todo_state
        })
    return response_succ(body=result)
示例#14
0
def delete():
    file_id = request.args.get('file_id')
    item = db.session.query(FileModel).filter(file_id == file_id).first()
    if item:
        path = fileStorage.path(item.file_hash)
        try:
            os.remove(path)
        except:
            return CommonError.get_error(9999)

        item: FileModel = item
        item.delete(logic=False)
        return response_succ()
    return CommonError.get_error(40400)
示例#15
0
def add_rss_source():
    """ 添加一个订阅源
    try add a url to rss list
    """
    params = request.values or request.get_json() or {}
    source = params.get("source")
    if not source:
        return CommonError.get_error(40000)

    bind_user_id = g.current_user.id

    try:
        query = """
        SELECT * FROM bao_rss WHERE rss_link = '{}';
        """.format(source)
        exists = db.session.execute(query).fetchone()
        rss_id = None
        if exists:
            rss_id = exists.rss_id
        else:
            # 查看是否可用
            regex = r'(https?)://[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]'
            result = re.match(regex, source)
            if not result:
                return CommonError.error_toast("wrong link")
            rss = RssModel(source)
            db.session.add(rss)
            db.session.flush()  # flush预提交,等于提交到数据库内存
            rss_id = rss.rss_id

        query = """
        SELECT * FROM bao_rss_user WHERE user_id = {} and rss_id = {};
        """.format(bind_user_id, rss_id)
        relation_id = db.session.execute(query).fetchone()
        result = {}
        if relation_id:
            result["rss_id"] = rss_id
        else:
            rss_user_relationship = RssUserModel(bind_user_id, rss_id)
            db.session.add(rss_user_relationship)
            db.session.commit()
            result["rss_id"] = rss_id
        from celery_tasks.tasks import async_parser_feed
        async_parser_feed.delay(source)
        return response_succ(body=result)
    except Exception as e:
        db.session.rollback()
        print(e)
        return CommonError.get_error(9999)
示例#16
0
def listall():
    userId = g.current_user.id
    allFiles = db.session.query(FileModel).\
        filter(FileModel.file_id==FileUserModel.file_id).\
        filter(FileUserModel.user_id==userId).all()
    payload = []
    for file in allFiles:
        f: FileModel = file
        payload.append({
            "name": f.file_name,
            "id": f.file_id,
            "mimetype": f.file_type,
            "hash": f.file_hash,
            "url": fileStorage.url(f.file_hash)
        })
    return response_succ(body=payload)
示例#17
0
def register():
    params = request.values or request.get_json() or {}
    email = params.get("email")
    password = params.get("password")
    if len(password) != 32:
        return CommonError.get_error(40000)
    exsist_user = db.session.query(User).filter_by(email=email).first()
    if exsist_user:
        return UserError.get_error(40200)
    salt = current_app.config['SECURITY_PASSWORD_SALT'] or 'token'
    token = getmd5("{}{}{}".format(salt, email, get_random_num(5)))
    user = User(email=email, password=password, status=1)
    user.token = token
    db.session.add(user)
    db.session.commit()
    payload = {}
    payload['user_id'] = user.id
    return response_succ(body=payload)
示例#18
0
def login():
    params = request.values or request.get_json() or {}
    email = params.get("email")
    password = params.get("password")
    exsist_user: User = db.session.query(User).filter_by(
        email=email, password=password).first()
    if exsist_user:
        # update token
        salt = current_app.config['SECURITY_PASSWORD_SALT'] or 'token'
        token = getmd5("{}{}{}".format(salt, email, get_random_num(5)))
        exsist_user.token = token

        # update log time
        record = LoginRecord()
        record.user_id = exsist_user.id
        record.login_time = get_unix_time_tuple()
        record.log_ip = request.args.get("user_ip") or request.remote_addr
        db.session.add(record)
        db.session.commit()
        return response_succ(body={'token': token})
    else:
        return UserError.get_error(40203)
示例#19
0
def email_to():
    params = request.values  or request.get_json() or {}
    subject = params.get('subject')
    body = params.get('body')
    recs = params.get('recipients')
    files = params.get('fileIds')
    if not subject or not body or not recs:
        return CommonError.get_error(40000)
    from celery_tasks.tasks import async_email_to
    receivers = []
    if isinstance(recs, str):
        receivers.append(recs)
    elif isinstance(recs, list):
        receivers.extend(recs)
    fileIds = []
    if isinstance(files, str):
        fileIds.append(files)
    elif isinstance(files, list):
        fileIds.extend(files)
    result = {}
    result['recipients'] = receivers
    task = async_email_to.delay(subject=subject, body=body, recipients=receivers, attaches=fileIds)
    result['task_id'] = task.id
    return response_succ(body=result)
示例#20
0
def rss_content_list():
    """ 获取可读内容的列表 """
    params = request.values or request.get_json() or {}
    limit: int
    pages: int
    offset: int
    if g.pageinfo:
        limit = g.pageinfo['limit']
        offset = g.pageinfo['offset']
        pages = g.pageinfo['pages']
    time_desc = bool(params.get('time_desc') or 1)  # 0 升序 1 降序
    filter_rss_ids = params.get('filter_rss_ids')
    bind_user_id = g.current_user.id

    # query rss_ids
    if filter_rss_ids:
        filter_rss_ids = [
            ids.strip() for ids in str(filter_rss_ids).split(',')
        ]
        filter_rss_ids = ', '.join(filter_rss_ids)
        sql = """
        SELECT bao_rss_user.rss_id FROM bao_rss_user WHERE bao_rss_user.user_id={user_id} AND bao_rss_user.rss_id IN ( # 筛选选择的rss_id
                {filter}
            );
        """.format(user_id=bind_user_id, filter=filter_rss_ids)
    else:
        sql = """
        SELECT bao_rss_user.rss_id FROM bao_rss_user WHERE bao_rss_user.user_id={user_id}
        """.format(user_id=bind_user_id)
    # 获得当前当前用户所有订阅的rss_id
    data_query = db.session.execute(sql)
    all_rss_ids = [str(item['rss_id']) for item in data_query.fetchall()]
    if len(all_rss_ids) == 0:
        return response_succ(body=[])
    query_rss_ids = ', '.join(all_rss_ids)
    # 查询 content
    sql = """
    SELECT * FROM bao_rss_content
    WHERE bao_rss_content.content_base IN ( # rss网址
        SELECT bao_rss.rss_link FROM bao_rss  WHERE bao_rss.rss_id IN ( # 筛选当前用户订阅的地址
        {rss_ids}
        )
    ) 
    AND bao_rss_content.content_title != ''
    ORDER BY add_time {order} limit {limit} offset {offset};
    """.format(rss_ids=query_rss_ids,
               order='DESC' if time_desc else 'ASC',
               limit=limit,
               offset=offset,
               user_id=bind_user_id)
    # sqlalchemy执行sql
    data_query = db.session.execute(sql)
    total = data_query.rowcount
    payload = {}
    payload['total'] = total
    payload['pages'] = pages
    payload['limit'] = limit
    payload['list'] = [{
        'link': item['content_link'],
        'base': item['content_base'],
        'domain': get_domain(item['content_base']),
        'add_time': item['add_time'],
        'published_time': float(item['published_time']),
        'title': item['content_title'],
        'id': item['content_id'],
        'cover_img': item['content_image_cover'],
    } for item in data_query.fetchall()]
    return response_succ(body=payload)
示例#21
0
文件: index.py 项目: jiazifa/sky_tool
def index():
    return response_succ(body="hahaha")
示例#22
0
def logout():
    return response_succ(body="loged out")