コード例 #1
0
 def update_share_log_by_pk(cls, pk_id, params):
     """
     :param pk_id:
     :param params:
     :return:
     """
     _params = {
         p: params[p]
         for p in params if p in ShareLogs.field_names()
     }
     # print("update_share_log_by_pk _params:", _params)
     with db:
         ShareLogs.update(**_params).where(ShareLogs.id == pk_id).execute()
コード例 #2
0
 def new_share_log(cls, fs_id, filename, md5_val, dlink, password, period,
                   account_id, pan_id):
     """
     :param fs_id:
     :param password:
     :param period:
     :return:
     """
     with db:
         share_log: ShareLogs = ShareLogs(fs_id=fs_id,
                                          filename=filename,
                                          password=password,
                                          period=period,
                                          pin=1,
                                          md5_val=md5_val,
                                          dlink=dlink,
                                          account_id=account_id,
                                          pan_account_id=pan_id)
         share_log.save(force_insert=True)
         share_log_id = share_log.id
     if share_log_id:
         return share_log_id, share_log
     return 0, None
コード例 #3
0
    def recheck_shared_d_link(self, shared_log_id):
        share_log: ShareLogs = DataDao.query_shared_log_by_pk_id(shared_log_id)
        if share_log:
            data_item: DataItem = DataDao.get_data_item_by_fs_id(
                share_log.fs_id)
            need_sync = False
            # print("query_file dlink:", data_item.dlink)
            if not data_item.dlink_updated_at or not data_item.dlink:
                need_sync = True
            elif data_item.dlink_updated_at:
                dt = arrow.get(
                    data_item.dlink_updated_at).replace(tzinfo=self.default_tz)
                if dt.shift(hours=+DLINK_TIMEOUT) < arrow.now():
                    need_sync = True

            if need_sync:
                account_id = data_item.account_id
                acc: Accounts = DataDao.account_by_id(account_id)
                pan_acc: PanAccounts = self.get_pan_account(
                    data_item.panacc, data_item.account_id)
                # sync_list = restapi.sync_file(self.pan_acc.access_token, [int(data_item.fs_id)])
                sync_dlink, thumbs = restapi.get_dlink_by_sync_file(
                    pan_acc.access_token, int(data_item.fs_id))
                if sync_dlink:
                    data_item.dlink = sync_dlink
                    data_item.dlink_updated_at = get_now_datetime()
                    DataDao.update_data_item(
                        data_item.id, {
                            "dlink": data_item.dlink,
                            "dlink_updated_at": data_item.dlink_updated_at
                        })

            share_log.dlink = data_item.dlink
            DataDao.update_share_log_by_pk(share_log.id,
                                           {'dlink': data_item.dlink})
            return ShareLogs.to_dict(share_log)
        return None
コード例 #4
0
 def del_share_log_by_pk(cls, pk_id):
     with db:
         ShareLogs.delete_by_id(pk_id)
コード例 #5
0
 def query_shared_log_by_pk_id(cls, pk_id) -> ShareLogs:
     return ShareLogs.select().where(ShareLogs.id == pk_id).first()
コード例 #6
0
 def query_shared_log_by_fs_id(cls, fs_id):
     share_logs = ShareLogs.select().where(
         ShareLogs.fs_id == fs_id).limit(1)
     if share_logs:
         return share_logs[0]
     return None
コード例 #7
0
 def get_share_log_by_id(cls, pk_id):
     return ShareLogs.get_by_id(pk=pk_id)
コード例 #8
0
 def query_share_logs_by_fs_id(cls, fs_id):
     return ShareLogs.select().where(ShareLogs.fs_id == fs_id)
コード例 #9
0
 def query_share_logs_by_hours(cls, hours, offset=0, limit=100):
     return ShareLogs.select().where(
         ShareLogs.updated_at < get_now_datetime(hours * 60 * 60)).limit(
             limit).offset(offset)
コード例 #10
0
 def del_share_log_by_id(cls, pk_id):
     with db:
         ShareLogs.delete().where(ShareLogs.id == pk_id).execute()
コード例 #11
0
    def share_folder(self, fs_id):
        data_item: DataItem = DataDao.get_data_item_by_fs_id(fs_id)
        share_log: ShareLogs = DataDao.query_shared_log_by_fs_id(fs_id)
        need_create_share_file = True
        expired_at = arrow.get(data_item.dlink_updated_at).replace(
            tzinfo=self.default_tz).shift(hours=+DLINK_TIMEOUT).datetime
        if share_log:
            jsonrs = restapi.get_share_info(share_log.share_id,
                                            share_log.special_short_url(),
                                            share_log.randsk)
            # print('"shareid" in jsonrs and "uk" in jsonrs ? ', "shareid" in jsonrs and "uk" in jsonrs)

            if jsonrs and "shareid" in jsonrs and "uk" in jsonrs:
                if data_item.dlink and not share_log.dlink:
                    pan_acc: PanAccounts = self.get_pan_account(
                        data_item.panacc, data_item.account_id)
                    if data_item.dlink:
                        dlink = "%s&access_token=%s" % (data_item.dlink,
                                                        pan_acc.access_token)
                        share_log.dlink = dlink
                        DataDao.update_share_log_by_pk(share_log.id,
                                                       {'dlink': dlink})
                dict_obj = ShareLogs.to_dict(share_log)
                dict_obj['expired_at'] = expired_at
                return dict_obj, share_log, data_item
            else:
                DataDao.del_share_log_by_pk(share_log.id)
        logger.info("need_create_share_file:{}, fs_id:{}".format(
            need_create_share_file, fs_id))
        if need_create_share_file:
            pwd = random_password(4)
            period = 1
            pan_acc: PanAccounts = self.get_pan_account(
                data_item.panacc, data_item.account_id)
            dlink = None
            if data_item.dlink:
                dlink = "%s&access_token=%s" % (data_item.dlink,
                                                pan_acc.access_token)
            share_log_id, share_log = DataDao.new_share_log(
                fs_id, data_item.filename, data_item.md5_val, dlink, pwd,
                period, data_item.account_id, pan_acc.id)
            logger.info("share_log_id:{}, fs_id:{}, pan_acc_id:{}".format(
                share_log_id, fs_id, pan_acc.id))
            if share_log_id:
                jsonrs = restapi.share_folder(pan_acc.access_token, fs_id, pwd,
                                              period)
                logger.info("share_folder jsonrs:{}, fs_id:{}".format(
                    jsonrs, fs_id))
                if restapi.is_black_list_error(jsonrs):
                    share_log.is_black = 1
                    err_msg = jsonrs.get('err_msg', '')
                    if "show_msg" in jsonrs:
                        err_msg = jsonrs['show_msg']
                    share_log.err = err_msg
                    DataDao.update_share_log_by_pk(share_log_id, {
                        "is_black": share_log.is_black,
                        "err": share_log.err
                    })
                    dict_obj = ShareLogs.to_dict(share_log)
                    dict_obj['expired_at'] = expired_at
                    return dict_obj, share_log, data_item
                if "shareid" in jsonrs and "shorturl" in jsonrs:
                    _shareid = jsonrs["shareid"]
                    if _shareid == -1:
                        err_msg = jsonrs.get('err_msg', '')
                        share_log.is_failed = 1
                        share_log.err = err_msg
                        DataDao.update_share_log_by_pk(share_log_id, {
                            "is_failed": share_log.is_failed,
                            "err": share_log.err
                        })
                        dict_obj = ShareLogs.to_dict(share_log)
                        return dict_obj, share_log, data_item
                    else:
                        share_log.share_id = str(jsonrs["shareid"])
                        share_log.link = jsonrs["link"]
                        share_log.shorturl = jsonrs["shorturl"]
                        share_log.pin = 2
                        params = {
                            "share_id": share_log.share_id,
                            "link": share_log.link,
                            "shorturl": share_log.shorturl,
                            "pin": share_log.pin
                        }
                        DataDao.update_share_log_by_pk(share_log_id, params)
                        jsonrs = restapi.get_share_randsk(
                            share_log.share_id, share_log.password,
                            share_log.common_short_url())
                        logger.info(
                            "get_share_randsk jsonrs:{}, fs_id:{}".format(
                                jsonrs, fs_id))
                        if "randsk" in jsonrs:
                            share_log.randsk = jsonrs["randsk"]
                            jsonrs = restapi.get_share_info(
                                share_log.share_id,
                                share_log.special_short_url(),
                                share_log.randsk)
                            if jsonrs and "shareid" in jsonrs and "uk" in jsonrs:
                                share_log.uk = str(jsonrs["uk"])
                                share_log.pin = 3
                                params = {
                                    "randsk": share_log.randsk,
                                    "uk": share_log.uk,
                                    "pin": share_log.pin
                                }
                                DataDao.update_share_log_by_pk(
                                    share_log_id, params)
                                dict_obj = ShareLogs.to_dict(share_log)
                                dict_obj['expired_at'] = expired_at
                                return dict_obj, share_log, data_item

        return {}, None, data_item