我有一个同构的无对象列表,但它可以包含任何类型的值.例:
>>> 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"参数进行一些技巧
我有一个视图,它从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) 我有以下代码片段,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) 我为一些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) 如何检查,在JIRA中启用了休息api并且它具有适当的版本?
我知道,可以请求'api/latest',但如果最新安装的版本与方法不兼容,那我打电话?
我有一只沙哑的蜘蛛,但有时不会返回请求。
我发现通过在产生请求之前和获得响应之后添加日志消息。
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并不总是从网站上下载数据,但没有任何响应
我有以下申请:
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.我希望查询集中的所有工作人员,即使是那些没有工作的人
我已将 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 我知道夹具,但我的模型更复杂,对我来说在代码中创建模型更容易。
我注意到,Django REST框架为API端点提供了元数据 http://www.django-rest-framework.org/api-guide/metadata/
是否有通用的方法在angularjs中生成表单而无需编写大量代码?
我已经看过这篇文章,但看起来它只是允许注释表单,而不是自动生成它.
为了使这个问题更具体:是否有方法(或库)生成具有适当字段类型的HTML表单,从Django REST框架HTTP OPTIONS输出中"require"属性验证?
我在下一个函数中有一个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
我有一个简单的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 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
,所以它应该是一行.
我怎样才能做到这一点?
我想使用 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)