Beispiel #1
0
class db(object):
    def __init__(self, user):
        self.user = str(user)
        self.db = SqliteDict(self.getCfgPath(), autocommit=True)

    def get(self, key=''):
        return self.db.get(key) if key else self.db.iteritems()

    def set(self, key='', data=''):
        if not key:
            key = self.user
        if data:
            self.db[key] = data
        else:
            self.db.__delitem__(key)

    def getCfgPath(self):
        if os.path.isdir('hoshino'):
            if not os.path.isdir('hoshino/modules/ASF_Plus/config'):
                os.mkdir('hoshino/modules/ASF_Plus/config')
            return os.path.join(
                os.path.abspath('hoshino/modules/ASF_Plus/config'),
                f'{self.user}.sqlite')
        else:
            if not os.path.isdir('../config'):
                os.mkdir('../config')
            return os.path.join(os.path.abspath('../config'),
                                f'{self.user}.sqlite')
Beispiel #2
0
class AnguisSqlite(AnguisBase):
    def __init__(self, path):
        self.sd = SqliteDict(path, autocommit=True)

    def __del__(self):
        super(AnguisSqlite, self).__del__()

    def __getitem__(self, key):
        return self.unserialize(self.sd.__getitem__(key))

    def __setitem__(self, key, obj):
        self.sd.__setitem__(key, self.serialize(obj))

    def __delitem__(self, key):
        self.sd.__delitem__(key)

    def __iter__(self):
        return self.sd.__iter__()

    def __len__(self):
        return len(self.sd)
Beispiel #3
0
class Update_window(object):
    """sitemap更新窗体"""
    def __init__(self, tree, eblog, sitemap):
        self.newroot = tk.Toplevel()
        self.newroot.title('下载文件中')
        self.newroot.iconbitmap("favicon.ico")
        self.newroot.wm_attributes('-topmost', 1)
        win_width = self.newroot.winfo_screenwidth()
        win_higth = self.newroot.winfo_screenheight()
        width_adjust = (win_width - 800) / 2
        higth_adjust = (win_higth - 250) / 2
        self.newroot.geometry("%dx%d+%d+%d" %
                              (800, 250, width_adjust, higth_adjust))

        # 进度条
        self.bar = ttk.Progressbar(self.newroot,
                                   length=740,
                                   mode="indeterminate",
                                   orient=tk.HORIZONTAL)
        self.bar.place(
            x=30,
            y=150,
        )
        self.bar.start(10)

        # 提示内容
        self.content = tk.Label(self.newroot, text="正在下载Sitemap.xml文件...")
        self.content.place(
            x=30,
            y=30,
        )
        self.content2 = tk.Label(self.newroot,
                                 text="下载速度和文件大小以及服务器带宽有关,请耐心等待......",
                                 wraplength=740,
                                 justify="left")
        self.content2.place(
            x=30,
            y=60,
        )

        self.eblog = eblog
        self.sitemap = sitemap
        self.tree = tree
        self.mydict = SqliteDict('./my_db.sqlite', autocommit=True)

        # 开启处理线程
        self.p = Thread(target=self.update)
        self.p.setDaemon(True)
        self.p.start()
        self.eblog.log("Sitemap线程:开启sitemap线程,下载Sitemap.xml中...")

        # 关闭右上角
        self.newroot.protocol("WM_DELETE_WINDOW", self.close)

    # 列表添加item,返回iid
    def append_item(self, item_list):
        # 加最后/加前面都可以,因为要是前面iid全是1
        item = self.tree.insert("",
                                0,
                                values=(item_list[0], item_list[1],
                                        item_list[2], item_list[3]))
        return item

    # 处理函数
    def update(self):
        try:
            with open("sitemap.xml", "wb") as f:
                f.write(requests.get(self.sitemap).content)
            with open("sitemap.xml", 'r', encoding='utf-8') as f:
                xml_data = f.read()
            self.content.configure(text="Sitemap文件下载完成,正在对比分析....")
            urls = re.findall(r'<loc>(.+?)</loc>', xml_data, re.S)
            self.eblog.log("Sitemap线程-->下载Sitemap.xml完成,正在解析xml文件...")

            tuple_list = list(self.mydict.iteritems())
            tree_urls = [i[0] for i in tuple_list]
            # 求交集
            c = list(set(urls).intersection(set(tree_urls)))

            # tree中多余的
            tree_urls_ = list(set(tree_urls).difference(set(c)))

            # 交集不动,tree把tree中把不是交集的删掉,把siemaop中不是交集的增添上.
            for key, value in sorted(tuple_list):
                self.content2.config(text="当前处理-->检查" + key)
                if key not in c:
                    # 是否删除,看有没有列表
                    if len(self.tree.get_children()) != 0:
                        self.tree.delete(value[4])

                    self.mydict.__delitem__(key=key)
            self.eblog.log("Sitemap线程-->本地删除" + str(tree_urls_))

            # sitemap中新添加的
            urls_ = list(set(urls).difference(set(c)))
            for url in sorted(urls_):
                cur_time = datetime.datetime.now().strftime(
                    '%Y-%m-%d %H:%M:%S')
                iid = self.append_item([url, "未提交", "未提交", cur_time])
                self.mydict[url] = [url, "未提交", "未提交", cur_time, iid]
                self.content2.config(text="当前处理-->正在添加" + url)

            self.eblog.log("Sitemap线程-->本地添加" + str(urls_))
            self.eblog.log("Sitemap线程-->关闭sitemap线程,更新完成。")
            self.close()
        except:
            self.eblog.log(traceback.format_exc())
            self.eblog.log("Sitemap线程-->更新失败")

    def close(self):
        self.newroot.destroy()