Пример #1
0
class ModelSetting(db.Model):
    __tablename__ = 'plugin_%s_setting' % package_name
    __table_args__ = {'mysql_collate': 'utf8_general_ci'}
    __bind_key__ = package_name

    id = db.Column(db.Integer, primary_key=True)
    key = db.Column(db.String(100), unique=True, nullable=False)
    value = db.Column(db.String, nullable=False)
 
    def __init__(self, key, value):
        self.key = key
        self.value = value

    def __repr__(self):
        return repr(self.as_dict())

    def as_dict(self):
        return {x.name: getattr(self, x.name) for x in self.__table__.columns}

    @staticmethod
    def get(key):
        try:
            return db.session.query(ModelSetting).filter_by(key=key).first().value
        except Exception as e:
            logger.error('Exception:%s %s', e, key)
            logger.error(traceback.format_exc())
Пример #2
0
class ModelGroup2(db.Model):
    __tablename__ = '%s_group' % package_name
    __table_args__ = {'mysql_collate': 'utf8_general_ci'}
    __bind_key__ = package_name

    id = db.Column(db.Integer, primary_key=True)
    created_time = db.Column(db.DateTime)
    reserved = db.Column(db.JSON)

    groupname = db.Column(db.String())
    #schedulers = db.relationship('ModelScheduler2', backref='plugin_%s_scheduler2' % package_name, lazy=True)
    schedulers = db.relationship('ModelScheduler2',
                                 backref='groups',
                                 lazy=True)
    query = db.Column(db.String())

    #schedulers = db.relationship('ModelScheduler2', secondary=group_scheduler2, backref=db.backref('ModelGroup2'))

    def __init__(self):
        self.created_time = datetime.now()

    def __repr__(self):
        return repr(self.as_dict())

    def as_dict(self):
        ret = {x.name: getattr(self, x.name) for x in self.__table__.columns}
        ret['schedulers'] = []
        for f in self.schedulers:
            ret['schedulers'].append(f.as_dict())
        return ret

    @staticmethod
    def get_list(by_dict=False):
        try:
            tmp = db.session.query(ModelGroup2).all()
            if by_dict:
                tmp = [x.as_dict() for x in tmp]
            return tmp
        except Exception, e:
            logger.error('Exception:%s', e)
            logger.error(traceback.format_exc())
Пример #3
0
class ModelSetting(db.Model):
    __tablename__ = 'plugin_%s_setting' % package_name
    __table_args__ = {'mysql_collate': 'utf8_general_ci'}
    __bind_key__ = package_name

    id = db.Column(db.Integer, primary_key=True)
    key = db.Column(db.String(100), unique=True, nullable=False)
    value = db.Column(db.String, nullable=False)

    def __init__(self, key, value):
        self.key = key
        self.value = value

    def __repr__(self):
        return repr(self.as_dict())

    def as_dict(self):
        return {x.name: getattr(self, x.name) for x in self.__table__.columns}
Пример #4
0
class ModelSetting(db.Model):
    __tablename__ = '%s_setting' % package_name
    __table_args__ = {'mysql_collate': 'utf8_general_ci'}
    __bind_key__ = package_name

    id = db.Column(db.Integer, primary_key=True)
    key = db.Column(db.String(100), unique=True, nullable=False)
    value = db.Column(db.String, nullable=False)

    def __init__(self, key, value):
        self.key = key
        self.value = value

    def __repr__(self):
        return repr(self.as_dict())

    def as_dict(self):
        return {x.name: getattr(self, x.name) for x in self.__table__.columns}

    @staticmethod
    def get(key):
        try:
            return db.session.query(ModelSetting).filter_by(key=key).first().value.strip()
        except Exception as e:
            logger.error('Exception:%s %s', e, key)
            logger.error(traceback.format_exc())


    @staticmethod
    def get_int(key):
        try:
            return int(ModelSetting.get(key))
        except Exception as e:
            logger.error('Exception:%s %s', e, key)
            logger.error(traceback.format_exc())

    @staticmethod
    def get_bool(key):
        try:
            return (ModelSetting.get(key) == 'True')
        except Exception as e:
            logger.error('Exception:%s %s', e, key)
            logger.error(traceback.format_exc())

    @staticmethod
    def set(key, value):
        try:
            item = db.session.query(ModelSetting).filter_by(key=key).with_for_update().first()
            if item is not None:
                item.value = value.strip()
                db.session.commit()
            else:
                db.session.add(ModelSetting(key, value.strip()))
        except Exception as e:
            logger.error('Exception:%s %s', e, key)
            logger.error(traceback.format_exc())

    @staticmethod
    def to_dict():
        try:
            from framework.util import Util
            return Util.db_list_to_dict(db.session.query(ModelSetting).all())
        except Exception as e:
            logger.error('Exception:%s %s', e, key)
            logger.error(traceback.format_exc())

    @staticmethod
    def setting_save(req):
        try:
            for key, value in req.form.items():
                if key in ['scheduler', 'is_running']:
                    continue
                if key.startswith('tmp_'):
                    continue
                logger.debug('Key:%s Value:%s', key, value)
                entity = db.session.query(ModelSetting).filter_by(key=key).with_for_update().first()
                entity.value = value
            db.session.commit()
            return True                  
        except Exception as e: 
            logger.error('Exception:%s', e)
            logger.error(traceback.format_exc())
            logger.debug('Error Key:%s Value:%s', key, value)
            return False

    @staticmethod
    def get_list(key):
        try:
            value = ModelSetting.get(key)
            values = [x.strip().strip() for x in value.replace('\n', '|').split('|')]
            values = Util.get_list_except_empty(values)
            return values
        except Exception as e: 
            logger.error('Exception:%s', e)
            logger.error(traceback.format_exc())
            logger.error('Error Key:%s Value:%s', key, value)
Пример #5
0
class Episode(db.Model):
    __tablename__ = 'plugin_%s_auto_episode' % package_name
    __table_args__ = {'mysql_collate': 'utf8_general_ci'}
    __bind_key__ = package_name

    id = db.Column(db.Integer, primary_key=True)
    episode_code = db.Column(db.String(20), unique=False, nullable=False)
    quality = db.Column(db.String(10), unique=False, nullable=False)
    program_name = db.Column(db.String(30))
    program_code = db.Column(db.String(20))
    frequency = db.Column(db.Integer)
    broadcast_date = db.Column(db.String(6))
    channel_id = db.Column(db.String(10))
    channel_name = db.Column(db.String(20))
    duration = db.Column(db.Integer)
    json = db.Column(db.JSON)

    filename = db.Column(db.String(), unique=False, nullable=False)
    start_time = db.Column(db.DateTime)
    end_time = db.Column(db.DateTime)
    download_time = db.Column(db.Integer)
    completed = db.Column(db.Boolean)
    user_abort = db.Column(db.Boolean)
    pf_abort = db.Column(db.Boolean)
    etc_abort = db.Column(db.Integer)  #ffmpeg 원인 1, 채널, 프로그램
    ffmpeg_status = db.Column(db.Integer)
    temp_path = db.Column(db.String())
    save_path = db.Column(db.String())
    pf = db.Column(db.Integer)
    retry = db.Column(db.Integer)

    filesize = db.Column(db.Integer)
    filesize_str = db.Column(db.String(10))
    download_speed = db.Column(db.String(10))
    call = db.Column(db.String(10))
    vod_url = db.Column(db.String)

    def __init__(self, call):
        self.completed = False
        self.user_abort = False
        self.pf_abort = False
        self.etc_abort = 0
        self.ffmpeg_status = -1
        self.pf = 0
        self.retry = 0
        self.call = call

    def __repr__(self):
        #return "<Episode(id:%s, episode_code:%s, quality:%s)>" % (self.id, self.episode_code, self.quality)
        return repr(self.as_dict())

    def as_dict(self):
        ret = {x.name: getattr(self, x.name) for x in self.__table__.columns}
        ret['start_time'] = self.start_time.strftime(
            '%m-%d %H:%M:%S') if self.start_time is not None else ''
        ret['end_time'] = self.end_time.strftime(
            '%m-%d %H:%M:%S') if self.end_time is not None else ''
        return ret
Пример #6
0
class ModelSetting(db.Model):
    __tablename__ = 'plugin_%s_setting' % package_name
    __table_args__ = {'mysql_collate': 'utf8_general_ci'}
    __bind_key__ = package_name

    id = db.Column(db.Integer, primary_key=True)
    key = db.Column(db.String(100), unique=True, nullable=False)
    value = db.Column(db.String, nullable=False)

    def __init__(self, key, value):
        self.key = key
        self.value = value

    def __repr__(self):
        return repr(self.as_dict())

    def as_dict(self):
        return {x.name: getattr(self, x.name) for x in self.__table__.columns}

    @staticmethod
    def get(key):
        try:
            return db.session.query(ModelSetting).filter_by(
                key=key).first().value.strip()
        except Exception as e:
            logger.error('Exception:%s %s', e, key)
            logger.error(traceback.format_exc())

    @staticmethod
    def get_int(key):
        try:
            return int(ModelSetting.get(key))
        except Exception as e:
            logger.error('Exception:%s %s', e, key)
            logger.error(traceback.format_exc())

    @staticmethod
    def get_bool(key):
        try:
            return (ModelSetting.get(key) == 'True')
        except Exception as e:
            logger.error('Exception:%s %s', e, key)
            logger.error(traceback.format_exc())

    @staticmethod
    def set(key, value):
        try:
            item = db.session.query(ModelSetting).filter_by(
                key=key).with_for_update().first()
            if item is not None:
                item.value = '%s' % value.strip()
                db.session.commit()
            else:
                db.session.add(ModelSetting(key, value.strip()))
        except Exception as e:
            logger.error('Exception:%s %s', e, key)
            logger.error(traceback.format_exc())

    @staticmethod
    def to_dict():
        try:
            return Util.db_list_to_dict(db.session.query(ModelSetting).all())
        except Exception as e:
            logger.error('Exception:%s %s', e, key)
            logger.error(traceback.format_exc())
Пример #7
0
class ModelOffcloud2Item(db.Model):
    __tablename__ = '%s_rss' % package_name
    __table_args__ = {'mysql_collate': 'utf8_general_ci'}
    __bind_key__ = package_name

    id = db.Column(db.Integer, primary_key=True)
    created_time = db.Column(db.DateTime)
    reserved = db.Column(db.JSON)

    job_id = db.Column(db.Integer, db.ForeignKey('%s_job.id' % package_name))
    created_time = db.Column(db.DateTime)
    title = db.Column(db.String())
    link = db.Column(db.String())
    status = db.Column(db.Integer)

    remote_time = db.Column(db.DateTime)
    completed_time = db.Column(db.DateTime)
    oc_folderid = db.Column(db.String)
    oc_requestId = db.Column(db.String)
    oc_status = db.Column(db.String)
    oc_createdOn = db.Column(db.String)
    oc_fileName = db.Column(db.String)
    oc_fileSize = db.Column(db.Integer)
    oc_error = db.Column(db.String)
    oc_retry_count = db.Column(db.Integer)
    oc_cached = db.Column(db.Boolean)
    oc_json = db.Column(db.JSON)
    #job = db.relationship('ModelOffcloud2Job', lazy=True)

    # DB Version 3
    link_to_notify_status = db.Column(db.String)  #1이면 보고함.

    # DB Version 4
    torrent_info = db.Column(db.JSON)
    filename = db.Column(db.String)
    dirname = db.Column(db.String)
    filecount = db.Column(db.Integer)

    def __init__(self):
        self.created_time = datetime.datetime.now()
        self.status = 0
        self.oc_status = ''
        self.oc_cached = False

    def __repr__(self):
        return repr(self.as_dict())

    def as_dict(self):
        ret = {x.name: getattr(self, x.name) for x in self.__table__.columns}
        ret['created_time'] = self.created_time.strftime('%m-%d %H:%M:%S')
        ret['remote_time'] = self.remote_time.strftime(
            '%m-%d %H:%M:%S') if self.remote_time is not None else ''
        ret['completed_time'] = self.completed_time.strftime(
            '%m-%d %H:%M:%S') if self.completed_time is not None else ''
        ret['job'] = self.job.as_dict()
        try:
            ret['oc_fileSize'] = Util.sizeof_fmt(
                int(ret['oc_fileSize'])
            ) if ret['oc_fileSize'] is not None else ret['oc_fileSize']
        except:
            pass

        return ret

    def make_torrent_info(self):
        try:
            if self.job.use_tracer and self.torrent_info is None and self.link.startswith(
                    'magnet'):
                from torrent_info import Logic as TorrentInfoLogic
                tmp = TorrentInfoLogic.parse_magnet_uri(self.link)
                if tmp is not None:
                    self.torrent_info = tmp
                    flag_modified(self, "torrent_info")
                    info = Util.get_max_size_fileinfo(tmp)
                    self.filename = u'%s' % info['filename']
                    self.dirname = u'%s' % info['dirname']
                    self.filecount = u'%s' % tmp['num_files']
                    return True
        except Exception as e:
            logger.error('Exception:%s', e)
            logger.error(traceback.format_exc())
        return False

    @staticmethod
    def get_rss_list_by_scheduler(job):
        try:
            query = db.session.query(ModelOffcloud2Item) \
                .filter(ModelOffcloud2Item.job_id == job.id ) \
                .filter(ModelOffcloud2Item.status < 11 ) \
                .filter(ModelOffcloud2Item.created_time > datetime.datetime.now() + datetime.timedelta(days=job.cache_confirm_day*-1))
            # \
            #.filter(ModelOffcloud2Item.oc_status != 'NOSTATUS')
            return query.all()
        except Exception as e:
            logger.error('Exception:%s', e)
            logger.error(traceback.format_exc())

    @staticmethod
    def remove(job_id):
        try:
            logger.debug('remove_job id:%s', job_id)
            db.session.query(ModelOffcloud2Item).filter_by(
                job_id=job_id).delete()
            db.session.commit()
            return 'success'
        except Exception as e:
            logger.error('Exception:%s', e)
            logger.error(traceback.format_exc())
            return 'fail'

    @staticmethod
    def web_list(req):
        try:
            ret = {}
            page = 1
            page_size = 30
            job_id = ''
            search = ''
            if 'page' in req.form:
                page = int(req.form['page'])
            if 'search_word' in req.form:
                search = req.form['search_word']
            job_select = 'all'
            if 'job_select' in req.form:
                job_select = req.form['job_select']

            option = 'all'
            if 'option' in req.form:
                option = req.form['option']

            query = ModelOffcloud2Item.make_query(job_name=job_select,
                                                  option=option,
                                                  search=search)
            last_list_option_rss = '%s|%s|%s|%s' % (search, job_select, option,
                                                    page)
            ModelSetting.set('last_list_option_rss', last_list_option_rss)

            count = query.count()
            query = (query.order_by(desc(
                ModelOffcloud2Item.id)).limit(page_size).offset(
                    (page - 1) * page_size))
            logger.debug('ModelOffcloud2Item count:%s', count)

            lists = query.all()
            ret['list'] = [item.as_dict() for item in lists]
            ret['paging'] = Util.get_paging_info(count, page, page_size)
            return ret
        except Exception as e:
            logger.debug('Exception:%s', e)
            logger.debug(traceback.format_exc())

    @staticmethod
    def api_list(req):
        try:
            job = req.args.get('job')
            option = req.args.get('option')
            search = req.args.get('search')
            count = req.args.get('count')
            if count is None or count == '':
                count = 100

            query = ModelOffcloud2Item.make_query(job_name=job,
                                                  option=option,
                                                  search=search)
            query = (query.order_by(desc(ModelOffcloud2Item.id)).limit(count))
            lists = query.all()
            return lists
        except Exception as e:
            logger.debug('Exception:%s', e)
            logger.debug(traceback.format_exc())

    @staticmethod
    def make_query(job_name='all', option='all', search=''):
        try:
            query = db.session.query(ModelOffcloud2Item)
            job = None
            if job_name != 'all' and job_name is not None and job_name != '':
                job = ModelOffcloud2Job.get_by_name(job_name)
                query = query.filter_by(job_id=job.id)

            if search is not None and search != '':
                if search.startswith('magnet:?'):  # 마그넷 검색을 위해서 추가한 부분
                    query = query.filter(
                        ModelOffcloud2Item.link.like(
                            '%' + search + '%'))  # 마그넷 검색을 위해서 추가한 부분
                elif search.find('|') != -1:
                    tmp = search.split('|')
                    conditions = []
                    for tt in tmp:
                        if tt != '':
                            conditions.append(
                                ModelOffcloud2Item.title.like('%' +
                                                              tt.strip() +
                                                              '%'))
                    query = query.filter(or_(*conditions))
                elif search.find(',') != -1:
                    tmp = search.split(',')
                    for tt in tmp:
                        if tt != '':
                            query = query.filter(
                                ModelOffcloud2Item.title.like('%' +
                                                              tt.strip() +
                                                              '%'))
                else:
                    query = query.filter(
                        ModelOffcloud2Item.title.like('%' + search + '%'))

            if option == 'request_false':
                query = query.filter(ModelOffcloud2Item.status < 6)
            elif option == 'request':
                query = query.filter(ModelOffcloud2Item.status < 11,
                                     ModelOffcloud2Item.status >= 6)
            elif option == 'completed':
                query = query.filter_by(status=11)
            elif option == 'expire':
                if job is not None:
                    query = query.filter(
                        ModelOffcloud2Item.created_time <=
                        datetime.datetime.now() +
                        datetime.timedelta(days=job.cache_confirm_day * -1))
                    query = query.filter(ModelOffcloud2Item.status < 6)

                pass
            elif option == 'no_status':
                query = query.filter(ModelOffcloud2Item.status >= 13)

            return query
        except Exception as e:
            logger.debug('Exception:%s', e)
            logger.debug(traceback.format_exc())
Пример #8
0
class ModelSetting(db.Model):
    __tablename__ = '%s_setting' % package_name
    __table_args__ = {'mysql_collate': 'utf8_general_ci'}
    __bind_key__ = package_name

    id = db.Column(db.Integer, primary_key=True)
    key = db.Column(db.String(100), unique=True, nullable=False)
    value = db.Column(db.String, nullable=False)

    def __init__(self, key, value):
        self.key = key
        self.value = value

    def __repr__(self):
        return repr(self.as_dict())

    def as_dict(self):
        return {x.name: getattr(self, x.name) for x in self.__table__.columns}

    @staticmethod
    def get(key):
        try:
            return db.session.query(ModelSetting).filter_by(
                key=key).first().value.strip()
        except Exception as e:
            logger.error('[gallery-dl] Exception:%s %s', e, key)
            logger.error(traceback.format_exc())

    @staticmethod
    def get_int(key):
        try:
            return int(ModelSetting.get(key))
        except Exception as e:
            logger.error('[gallery-dl] Exception:%s %s', e, key)
            logger.error(traceback.format_exc())

    @staticmethod
    def get_bool(key):
        try:
            return (ModelSetting.get(key) == 'True')
        except Exception as e:
            logger.error('[gallery-dl] Exception:%s %s', e, key)
            logger.error(traceback.format_exc())

    @staticmethod
    def set(key, value):
        try:
            item = db.session.query(ModelSetting).filter_by(
                key=key).with_for_update().first()
            if item is not None:
                item.value = value.strip()
                db.session.commit()
            else:
                db.session.add(ModelSetting(key, value.strip()))
        except Exception as e:
            logger.error('[gallery-dl] Exception:%s %s', e, key)
            logger.error(traceback.format_exc())

    @staticmethod
    def to_dict():
        try:
            from framework.util import Util
            return Util.db_list_to_dict(db.session.query(ModelSetting).all())
        except Exception as e:
            logger.error('[gallery-dl] Exception:%s %s', e, key)
            logger.error(traceback.format_exc())

    @staticmethod
    def setting_save(req):
        try:
            for key, value in req.form.items():
                if key in ['scheduler', 'is_running']:
                    continue

                if key == "gallery-dl_option_value":
                    with open(
                            os.path.join(
                                os.path.dirname(os.path.abspath(__file__)),
                                'gallery-dl.conf'), 'w') as gdl_conf:
                        gdl_conf.write(value)
                        gdl_conf.close()
                else:
                    if key == 'interval':
                        value = str(int(value) * 60)
                    logger.debug('[gallery-dl] Key:%s Value:%s', key, value)
                    entity = db.session.query(ModelSetting).filter_by(
                        key=key).with_for_update().first()
                    entity.value = value

            db.session.commit()
            return True
        except Exception as e:
            logger.error('[gallery-dl] Exception:%s', e)
            logger.error(traceback.format_exc())
            logger.debug('Error Key:%s Value:%s', key, value)
            return False
Пример #9
0
class ModelSetting(db.Model):
    __tablename__ = 'system_setting'
    id = db.Column(db.Integer, primary_key=True)
    key = db.Column(db.String(100), unique=True, nullable=False)
    value = db.Column(db.String(100), nullable=False)

    def __init__(self, key, value):
        self.key = key
        self.value = value

    def __repr__(self):
        return "<SystemSetting(id:%s, key:%s, value:%s)>" % (self.id, self.key,
                                                             self.value)

    def as_dict(self):
        return {x.name: getattr(self, x.name) for x in self.__table__.columns}

    @staticmethod
    def get(key):
        try:
            ret = db.session.query(ModelSetting).filter_by(key=key).first()
            if ret is not None:
                return ret.value.strip()
            else:
                return ''
        except Exception as exception:
            logger.error('Exception:%s %s', exception, key)
            logger.error(traceback.format_exc())

    @staticmethod
    def get_int(key):
        try:
            return int(ModelSetting.get(key))
        except Exception as exception:
            logger.error('Exception:%s %s', exception, key)
            logger.error(traceback.format_exc())

    @staticmethod
    def get_bool(key):
        try:
            return (ModelSetting.get(key) == 'True')
        except Exception as exception:
            logger.error('Exception:%s %s', exception, key)
            logger.error(traceback.format_exc())

    @staticmethod
    def set(key, value):
        try:
            logger.debug(key)
            item = db.session.query(ModelSetting).filter_by(
                key=key).with_for_update().first()
            if item is not None:
                item.value = value.strip() if value is not None else value
                db.session.commit()
            else:
                db.session.add(ModelSetting(key, value.strip()))
        except Exception as exception:
            logger.error('Exception:%s %s', exception, key)
            logger.error(traceback.format_exc())

    @staticmethod
    def to_dict():
        try:
            from framework.util import Util
            arg = Util.db_list_to_dict(db.session.query(ModelSetting).all())
            arg['package_name'] = package_name
            return arg
        except Exception as exception:
            logger.error('Exception:%s', exception)
            logger.error(traceback.format_exc())

    @staticmethod
    def setting_save(req):
        try:
            for key, value in req.form.items():
                if key in ['scheduler', 'is_running']:
                    continue
                if key.startswith('tmp_'):
                    continue
                logger.debug('Key:%s Value:%s', key, value)
                entity = db.session.query(ModelSetting).filter_by(
                    key=key).with_for_update().first()
                entity.value = value
            db.session.commit()
            return True
        except Exception as exception:
            logger.error('Exception:%s', exception)
            logger.error(traceback.format_exc())
            logger.debug('Error Key:%s Value:%s', key, value)
            return False

    @staticmethod
    def get_list(key):
        try:
            value = ModelSetting.get(key)
            values = [
                x.strip().replace(' ', '').strip()
                for x in value.replace('\n', '|').split('|')
            ]
            values = Util.get_list_except_empty(values)
            return values
        except Exception as exception:
            logger.error('Exception:%s', exception)
            logger.error(traceback.format_exc())
            logger.error('Error Key:%s Value:%s', key, value)

    @staticmethod
    def make_apikey(url):
        url = url.format(ddns=ModelSetting.get('ddns'))
        if ModelSetting.get_bool('auth_use_apikey'):
            if url.find('?') == -1:
                url += '?'
            else:
                url += '&'
            url += 'apikey=%s' % ModelSetting.get('auth_apikey')
        return url