小编tho*_*wil的帖子

如何正确使用app引擎Python模型类的自定义__init__?

我正在尝试实施延迟博客帖子删除方案.所以不是讨厌你确定吗?,你得到2分钟的时间框架来取消删除.

我想跟踪什么将被删除当使用db.Model类(DeleteQueueItem)时,我发现无法从队列中删除任务并怀疑我可以查询那里有什么.

创建DeleteQueueItem实体应该自动设置delete_when属性并将任务添加到队列中.我使用博客文章的相对路径作为其key_name,并希望在此处将其用作key_name.这导致我进入自定义初始化:

class DeleteQueueItem(db.Model):
    """Model to keep track of items that will be deleted via task queue."""

    # URL path to the blog post is handled as key_name
    delete_when = db.DateTimeProperty()

    def __init__(self, **kwargs):
        delay = 120  # Seconds
        t = datetime.timedelta(seconds=delay)
        deadline = datetime.datetime.now() - t
        key_name = kwargs.get('key_name')

        db.Model.__init__(self, **kwargs)
        self.delete_when = deadline

        taskqueue.add(url='/admin/task/delete_page', 
                      countdown=delay,
                      params={'path': key_name})
Run Code Online (Sandbox Code Playgroud)

这似乎有效,直到我尝试删除实体:

fetched_item = models.DeleteQueueItem.get_by_key_name(path)
Run Code Online (Sandbox Code Playgroud)

这失败了:

TypeError: …
Run Code Online (Sandbox Code Playgroud)

python google-app-engine

10
推荐指数
1
解决办法
4808
查看次数

如何使用setuptools安装python cli脚本而不重复?

由于argparse,我有两个可以在shell中使用的Python脚本.

setup.py的相关部分:

setup(
    # (...)
    zip_safe=True,
    scripts=['bin/bgce.py', 'bin/sizes.py'],
    packages=find_packages(),
    data_files=data_files,
    entry_points = {
        'console_scripts': [
            'bgce = bgce:main',
            'sizes = sizes:main',]
    }
)
Run Code Online (Sandbox Code Playgroud)

我最终在/ usr/local/bin中使用了bgce,bgce.py,sizes,sizes.py.全部4个工作.

如果我遗漏了包或脚本行,则没有重复项,但文件会像这样失败:

Traceback (most recent call last):
File "/usr/local/bin/bgce", line 9, in <module>
    load_entry_point('Backtestground==1.0', 'console_scripts', 'bgce')()
File "/usr/lib/python2.6/dist-packages/pkg_resources.py", line 305, in load_entry_point return get_distribution(dist).load_entry_point(group, name)
File "/usr/lib/python2.6/dist-packages/pkg_resources.py", line 2244, in load_entry_point return ep.load()
File "/usr/lib/python2.6/dist-packages/pkg_resources.py", line 1954, in load
    entry = __import__(self.module_name, globals(),globals(), ['__name__'])
ImportError: No module named bgce
Run Code Online (Sandbox Code Playgroud)

我该怎么办才能安装bgce和大小,没有重复的烦人(for tab-completion).py附加?

python setuptools

5
推荐指数
1
解决办法
2518
查看次数

标签 统计

python ×2

google-app-engine ×1

setuptools ×1