小编Nik*_*lub的帖子

Python排序列表最后为None

我有一个同构的无对象列表,但它可以包含任何类型的值.例:

>>> l = [1, 3, 2, 5, 4, None, 7]
>>> sorted(l)
[None, 1, 2, 3, 4, 5, 7]
>>> sorted(l, reverse=True)
[7, 5, 4, 3, 2, 1, None]
Run Code Online (Sandbox Code Playgroud)

有没有办法没有重新发明轮子获取通常为python方式排序的列表,但列表末尾没有值,如下所示:

[1, 2, 3, 4, 5, 7, None]
Run Code Online (Sandbox Code Playgroud)

我觉得这里可以使用"key"参数进行一些技巧

python

34
推荐指数
2
解决办法
1万
查看次数

Django没有调用模型清理方法

我有一个视图,它从CSV文件创建模型.我已经为模型类定义添加了clean方法,但是在创建模型时不会调用它.

这是models.py的示例:

class Run(models.Model):
    name = models.CharField(max_length=120)
    tested_build = models.ForeignKey('apps.Build')
    timestamp_start = models.DateTimeField()
    timestamp_end = models.DateTimeField()

class CommonMeasurement(models.Model):
    timestamp = models.DateTimeField()
    value = models.FloatField()
    run = models.ForeignKey(Run)

    def clean(self):
        super(CommonMeasurement, self).clean()
        print 'here we go'
        if self.timestamp < self.run.timestamp_start or self.timestamp > self.run.timestamp_end:
            raise django_excetions.ValidationError('Measurement is outside the run')


class ClientMeasurement(CommonMeasurement):
    metric = models.ForeignKey(ClientMetric)
    account = models.CharField(max_length=120, blank=True)
Run Code Online (Sandbox Code Playgroud)

这是我的表单视图代码示例:

class BaseMeasurementsUpload(generic_views.FormView):
    template_name = 'upload.html'
    models_to_upload = None   

    def get_success_url(self):
        return self.request.get_full_path()

    def form_valid(self, form):
        uploader = getattr(importers, form.cleaned_data['uploader'])
        try:
            the_uploader …
Run Code Online (Sandbox Code Playgroud)

python django

24
推荐指数
3
解决办法
1万
查看次数

astriod 包中的 Pylint 无限递归

我有以下代码片段,pylint 无法处理:

from celery import Celery


def create_celery(application):
    """
    Configures celery instance from application, using it's config
    :param application: Flask application instance
    :return: Celery instance
    """
    celery = Celery(application.import_name)
    celery.conf.update(application.config)
    TaskBase = celery.Task

    class ContextTask(TaskBase):
        abstract = True

        def __call__(self, *args, **kwargs):
            with application.app_context():
                return TaskBase.__call__(self, *args, **kwargs)

    celery.Task = ContextTask
    return celery
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

 File "/usr/local/lib/python3.4/dist-packages/astroid/context.py", line 49, in cache_generator
    for result in generator:
  File "/usr/local/lib/python3.4/dist-packages/astroid/bases.py", line 302, in wrapped
    for res in _func(node, context, **kwargs):
  File "/usr/local/lib/python3.4/dist-packages/astroid/bases.py", line 325, …
Run Code Online (Sandbox Code Playgroud)

python pylint celery

8
推荐指数
1
解决办法
2122
查看次数

修剪大日志文件

我为一些Java应用程序执行性能测试.应用程序在测试期间会生成非常大的日志文件(可能是7-10 GB).我需要在特定日期和时间之间修剪这些日志文件.目前,我使用python脚本,它解析datetime python对象中的日志时间戳并仅打印匹配的字符串.但这个解决方案非常缓慢.解析5 GB日志大约25分钟显然日志文件中的条目是顺序的,我不需要逐行读取所有文件.我考虑从开始和结束读取文件,直到条件匹配并在匹配的行数之间打印文件.但我不知道如何从后面读取文件,而不将其下载到内存中.

拜托,您能为我推荐一些针对此案例的套装解决方案.

这是python脚本的一部分:

      lfmt = '%Y-%m-%d %H:%M:%S'
      file = open(filename, 'rU')
      normal_line = ''
      for line in file:
        if line[0] == '[':
          ltimestamp = datetime.strptime(line[1:20], lfmt)

          if ltimestamp >= str and ltimestamp <= end:
            normal_line = 'True'
        else:
          normal_line = ''

      if normal_line:
        print line,
Run Code Online (Sandbox Code Playgroud)

python bash performance logging sed

7
推荐指数
1
解决办法
1730
查看次数

检查JIRA REST API版本?

如何检查,在JIRA中启用了休息api并且它具有适当的版本?

我知道,可以请求'api/latest',但如果最新安装的版本与方法不兼容,那我打电话?

rest jira jira-rest-java-api

6
推荐指数
1
解决办法
4132
查看次数

Scrapy:如何调试Scrapy丢失的请求

我有一只沙哑的蜘蛛,但有时不会返回请求。

我发现通过在产生请求之前和获得响应之后添加日志消息。

Spider会遍历页面并解析链接以在每页上进行项目报废。

这是代码的一部分

SampleSpider(BaseSpider):
    ....
    def parse_page(self, response):
        ...
        request = Request(target_link, callback=self.parse_item_general)
        request.meta['date_updated'] = date_updated
        self.log('parse_item_general_send {url}'.format(url=request.url), level=log.INFO)
        yield request

    def parse_item_general(self, response):
        self.log('parse_item_general_recv {url}'.format(url=response.url), level=log.INFO)
        sel = Selector(response)
        ...
Run Code Online (Sandbox Code Playgroud)

我已经比较了每条日志消息的数量,“ parse_item_general_send”比“ parse_item_general_recv”还多

最终统计信息中没有400或500个错误,所有响应状态码都只有200。看起来请求就消失了。

我还添加了以下参数以最大程度地减少可能的错误:

CONCURRENT_REQUESTS_PER_DOMAIN = 1
DOWNLOAD_DELAY = 0.8
Run Code Online (Sandbox Code Playgroud)

由于扭曲的异步性质,我不知道如何调试此错误。我发现了一个类似的问题:Python Scrapy并不总是从网站上下载数据,但没有任何响应

python twisted scrapy

6
推荐指数
1
解决办法
1448
查看次数

Django从注释计数中排除

我有以下申请:

from django.db import models


class Worker(models.Model):
    name = models.CharField(max_length=60)

    def __str__(self):
        return self.name


class Job(models.Model):
    worker = models.ForeignKey(Worker)
    is_completed = models.BooleanField()
Run Code Online (Sandbox Code Playgroud)

我想用已完成作业的数量来注释Workers查询.

我将尝试使用以下脚本:

from myapp.models import Worker, Job
from django.db.models import Count

w = Worker.objects.create(name='Worker1')
Job.objects.create(worker=w, is_completed=False)
Job.objects.create(worker=w, is_completed=False)
Job.objects.create(worker=w, is_completed=True)
Job.objects.create(worker=w, is_completed=True)

workers = Worker.objects.all().annotate(num_jobs=Count('job'))
workers[0].num_jobs    
# >>> 4
workers = Worker.objects.all().exclude(job__is_completed=False).annotate(num_jobs=Count('job'))
# >>> []
Run Code Online (Sandbox Code Playgroud)

最后一个查询的结果为空.如何从反向关系中排除元素?

Django 1.8,python 2.7

UPD.我希望查询集中的所有工作人员,即使是那些没有工作的人

python django django-models django-orm

6
推荐指数
1
解决办法
2404
查看次数

Django reset_sequences 在 LiveServerTestCase 中不起作用

我已将 django 从 1.6 更新到 1.8.3。我在单元测试中的 test setUp 方法中创建测试模型,类似这样

class MyTestCase(LiveServerTestCase):
    reset_sequences = True
    def setUp(self):
        self.my_model = models.MyModel.objects.create(name='test)
Run Code Online (Sandbox Code Playgroud)

我在应用程序中有代码,它依赖于主键 == 1。我注意到,实际上并没有重置序列。在每次下一次测试中,pk 都比前一次更大。

这在 django 1.6 中工作正常,但在迁移到 1.8 后出现问题。

我应该手动重置序列吗?

Ps 我知道夹具,但我的模型更复杂,对我来说在代码中创建模型更容易。

python django unit-testing

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

使用angularjs和django rest框架自动生成表单

我注意到,Django REST框架为API端点提供了元数据 http://www.django-rest-framework.org/api-guide/metadata/

是否有通用的方法在angularjs中生成表单而无需编写大量代码?

我已经看过这篇文章,但看起来它只是允许注释表单,而不是自动生成它.

为了使这个问题更具体:是否有方法(或库)生成具有适当字段类型的HTML表单,从Django REST框架HTTP OPTIONS输出中"require"属性验证?

python django rest angularjs django-rest-framework

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

PyQt,Qtable在启用排序时清除列

我在下一个函数中有一个bug.此函数刷新表,调整列大小并对表进行排序.但在某些情况下,对于某些行,第3列和第4列中的文本为空.我发现它发生在"问题代码"部分.我在这部分错了什么?我只想更改特定列的大小.请帮助找出问题或告诉我我的错误.

def print_day_worklog(self):
    logging.info('RefReshing day worklog table')
    selected_day = self.ui.dateDayWorklogEdit.date().toPyDate()
    day_work = db.get_day_worklog(self.creds[3], selected_day)
    self.ui.tableDayWorklog.setRowCount(len(day_work))
    for row, entry in enumerate(day_work):
        e0 = QtGui.QTableWidgetItem(entry[0])
        e1 = QtGui.QTableWidgetItem(entry[1])
        e2 = QtGui.QTableWidgetItem(entry[2].strftime('%H:%M'))
        e3 = QtGui.QTableWidgetItem(entry[3].strftime('%H:%M'))
        e4 = QtGui.QTableWidgetItem(utils.get_time_spent_string(entry[2],
            entry[3]))
        # debug
        print e0.text(), e1.text(), e2.text(), e3.text(), e4.text()
        self.ui.tableDayWorklog.setItem(row, 0, e0)
        self.ui.tableDayWorklog.setItem(row, 1, e1)
        self.ui.tableDayWorklog.setItem(row, 2, e2)
        self.ui.tableDayWorklog.setItem(row, 3, e3)
        self.ui.tableDayWorklog.setItem(row, 4, e4)

    # problem code starts
    self.ui.tableDayWorklog.horizontalHeader().setResizeMode(1,
        QtGui.QHeaderView.Stretch)
    for column in (0,2,3,4):
        self.ui.tableDayWorklog.resizeColumnToContents(column)
        self.ui.tableDayWorklog.horizontalHeader().setResizeMode(column,
            QtGui.QHeaderView.Fixed)
        self.ui.tableDayWorklog.horizontalHeader().setResizeMode(column,
            QtGui.QHeaderView.Fixed)
    self.ui.tableDayWorklog.sortByColumn(2,0)
    # problem code ends
Run Code Online (Sandbox Code Playgroud)

Ps看起来不太清楚,但这是因为我试图抓住这个bug

python qt pyqt pyqt4

4
推荐指数
1
解决办法
1511
查看次数

Django:选择具有最大时间戳的值或连接到同一个表

我有一个简单的Django模型

class Server(models.Model):
    name = models.CharField(max_length=120)

class ServerPropertie(models.Model):
    name = models.CharField(max_length=120)
    value = models.CharField(max_length=120)
    timestamp = models.DateTimeField()
    server = models.ForeignKey(Server)
Run Code Online (Sandbox Code Playgroud)

我想将get_properties方法添加到Server模型,该模型将返回当前服务器的所有最后一个属性.我的意思是它应该返回当前服务器的所有属性名称的名称和值,并且每个uniq属性名称应该具有值,该行具有最大时间戳.

我可以在原始的硬编码原始SQL(我使用postgres)中做到这一点:

SELECT t1.name, t1.value FROM environments_serverpropertie t1
JOIN (SELECT max("timestamp") "timestamp", name 
      FROM environments_serverpropertie
      group by name) t2 on t1.name = t2.name and t1.timestamp = t2.timestamp;
Run Code Online (Sandbox Code Playgroud)

或者在python中,但我相信存在pythonic解决方案.请你帮助我好吗.

python sql django postgresql

4
推荐指数
1
解决办法
1446
查看次数

Python one liner静音套接字监听器

是否可以编写python one-liner,它将侦听特定的tcp端口,接受连接,并且不响应任何内容.

我可以用两行来做到这一点:

import socket; s = socket.socket(socket.AF_INET, socket.SOCK_STREAM); s.bind(("", 5555)); s.listen(1); accepter = s.accept();
while True: data = accepter[0].recv(1024);
Run Code Online (Sandbox Code Playgroud)

但是我想从中运行它python -c,所以它应该是一行.

我怎样才能做到这一点?

python sockets

3
推荐指数
1
解决办法
1887
查看次数

Python:Mock 在 celery 任务中不起作用

我想使用 pythonmock库来测试我的 Django 应用程序发送电子邮件。

测试代码:

# tests.py
from django.test import TestCase

class MyTestCase(TestCase):

    @mock.patch('django.core.mail.mail_managers')
    def test_canceled_wo_claiming(self, mocked_mail_managers):
        client = Client()
        client.get('/')
        print(mocked_mail_managers.called)
        mocked_mail_managers.assert_called_with('Hi, managers!', 'Message Body')
Run Code Online (Sandbox Code Playgroud)

第一个例子 - 没有任务

# views.py
from django.views.generic import View
from django.core.mail import mail_managers

class MyView(View):

    def get(self, request):
        mail_managers('Hi, managers!', 'Message Body')
        return HttpResponse('Hello!')
Run Code Online (Sandbox Code Playgroud)

第二个例子 - 有任务

# views.py
from django.views.generic import View
from . import tasks

class MyView(View):
    def get(self, request):
        tasks.notify.apply_async()
        return HttpResponse('Hello!')


# tasks.py
from celery import shared_task
from …
Run Code Online (Sandbox Code Playgroud)

python django unit-testing mocking celery

3
推荐指数
1
解决办法
2153
查看次数