小编Dan*_*gen的帖子

Celery:任务层次结构后的回调

我正在使用Web应用程序中的Celery来启动任务层次结构.

任务

我正在使用以下任务:

  • task_a
  • task_b
  • task_c
  • notify_user

Django视图启动了几个task_a实例.他们每个人都做了一些处理,然后开始几个task_b实例.并且每个都进行一些处理,然后启动几个task_c实例.

想象:

树

目标

我的目标是执行所有任务,并在整个层次结构完成后立即运行回调函数.此外,我希望能够将数据从最低任务传递到顶级.

  1. 视图应该"启动"任务然后返回.
  2. 每个子任务都取决于父任务.父任务不直接依赖于子任务.父任务启动所有子任务后,可以停止它.
  3. 只要父任务在子任务启动之前运行,所有内容都可以并行化.
  4. 完成所有任务后,notify_user应调用回调函数.
  5. 该notify_user回调函数需要从对数据的访问task_c秒.

所有任务都应该是非阻塞的,所以task_b不要等待所有task_c子任务完成.

实现上述目标的正确方法是什么?

python concurrency celery

9
推荐指数
1
解决办法
2348
查看次数

声明性GTK

TL; DR:是否有使用GTK创建声明性UI的库?最好是Python支持.


我是一名Python/Django开发人员,我对用户界面的大部分经验来自网络,其中声明性,松散耦合的UI设计是标准的.最近我不得不使用Java/Swing为学校项目创建一个GUI应用程序,最后使用SwiXML为项目创建声明性Swing布局.

我问自己是否有类似的可能性用于Python.我不是很喜欢Java,所以我不会开始开发Swing应用程序.在寻找Python GUI Toolkits时,我最终得出结论,该领域的三个主要参与者是GTK,QT和Wx.

在这3个我更喜欢GTK,但我找不到任何方法来创建GTK的声明性UI.根据我对HTML和SwiXML的经验,我发现基于代码的UI创建非常混乱,并且不希望这样做.声明性UI更灵活,更松散耦合.

是否有使用GTK创建声明性UI的库?最好是Python支持.

如果没有这样的东西(我假设,因为我找不到任何东西),我可能最终开始使用QT,即使我不喜欢它在Linux下的默认外观.(但也许这也是可定制的,在某种程度上它看起来与GTK类似.)

python gtk user-interface qt declarative

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

Docker Compose:检测镜像是否需要重新构建

我正在尝试创建一个 Docker 设置(使用 docker-compose)来在开发过程中测试我的一个 Python 应用程序。docker-compose.yml 启动 Postgres 服务器、Redis 服务器和 PhantomJS 服务器,然后使用 pytest 运行测试。

这就是我的test.sh样子:

#!/bin/bash
UP=$(docker-compose up -d redis postgres phantomjs 2>&1)
echo $UP
if [[ $UP == *"Starting radar_postgres"* ]]; then
    echo "Sleeping 10 seconds to wait for PostgreSQL server..."
    sleep 10
fi
docker-compose build tests && \
docker-compose run \
    --rm \
    -e GOOGLE_OAUTH2_CLIENT_ID='$GOOGLE_OAUTH2_CLIENT_ID' \
    -e GOOGLE_OAUTH2_CLIENT_SECRET='$GOOGLE_OAUTH2_CLIENT_SECRET' \
    -e GOOGLE_DEVELOPER_TOKEN='$GOOGLE_DEVELOPER_TOKEN' \
    tests $@
Run Code Online (Sandbox Code Playgroud)

首先启动依赖项。由于工作方式的原因docker-compose up,它们会在必要时自动重建。

然后我在容器中运行一项一次性工作tests。我使用一次性作业而不是使用,docker-compose up因为这样我可以将参数传递给测试框架。

问题是容器总是在重建,即使 Dockerfile …

docker docker-compose

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

MySQL:两个n:1关系,但不是两个关系

对不起标题,很难解释.

我需要一个与此类似的数据模型: 替代文字

如您所见,一组可以属于用户或学校.我的问题:它应该只允许属于用户或学校.但绝不是两个在同一时间.

我怎么解决这个问题?

mysql database-design relational-database polymorphic-associations

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

Django 身份验证:用户配置文件与contribute_to_class

以前我把自定义的用户相关字段放在一个新的UserProfile类中,但是现在我在另一个项目中看到可以使用contribute_to_class模型字段的方法来将新字段附加到auth.User模型中。

每种方法的优点和缺点是什么?

django django-authentication

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

使用Django Rest Framework测试CSRF验证

我正在使用Django Rest Framework 3并想测试CSRF验证.

首先,我初始化DRF APIClient:

client = APIClient(enforce_csrf_checks=True)
Run Code Online (Sandbox Code Playgroud)

然后我在用户上设置密码,这样我就可以登录并获得一个会话:

superuser.set_password('1234')
superuser.save()
client.login(email=superuser.email, password='1234')
Run Code Online (Sandbox Code Playgroud)

现在我们需要一个CSRF令牌.为此,我只需创建一个请求并从cookie中检索令牌.

response = client.request()
csrftoken = client.cookies['csrftoken'].value
Run Code Online (Sandbox Code Playgroud)

在检查代码时,这似乎有效,我找回了一个有效的CSRF令牌.然后我做POST请求,传入csrfmiddlewartoken参数:

data = {'name': 'My fancy test report', 'csrfmiddlewaretoken': csrftoken}
response = client.post(API_BASE + '/reports', data=data, format='json')
assert response.status_code == status.HTTP_201_CREATED, response.content
Run Code Online (Sandbox Code Playgroud)

问题是,这失败了:

tests/api/test_api.py:156: in test_csrf_success
    assert response.status_code == status.HTTP_201_CREATED, response.content
E   AssertionError: {"detail":"CSRF Failed: CSRF token missing or incorrect."}
E   assert 403 == 201
E    +  where 403 = <rest_framework.response.Response object at 0x7f7bd6453bd0>.status_code
E    + …
Run Code Online (Sandbox Code Playgroud)

testing django django-csrf django-rest-framework

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

在iOS应用程序中添加多个静态Rust库

我有两个用Rust编写的库(带有C兼容接口),我正在尝试集成到iOS应用程序中.

在同一个项目中集成两个.a文件时,我会收到错误,因为Rust标准库中的符号现在多次出现:

duplicate symbol _rust_eh_personality in:
    /Users/x/Development/ios-client/Y/Rust/lib1_ffi.a(lib1_ffi.0.o)
    /Users/x/Development/ios-client/Y/Rust/lib2_ffi.a(lib2_ffi.0.o)
...
Run Code Online (Sandbox Code Playgroud)

怎么解决这个问题?Rust符号可以提取到一个单独的库中吗?或者符号可以命名空间?

static-linking ios rust

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

Jetpack Compose BottomSheetScaffold:平滑关闭

我将 Jetpack Compose 与 BottomSheetScaffold 结合使用。为了能够在可组合项内部和外部显示和隐藏底部工作表,我使用了一个showBottomSheet: MutableState<Boolean>变量。然后可组合项内的窥视高度确定如下:

val baseBottomSheetPeekHeight by remember { mutableStateOf(60.dp) }
val bottomSheetPeekHeight = if (showBottomSheet.value) baseBottomSheetPeekHeight else 0.dp
Run Code Online (Sandbox Code Playgroud)

后来,在 中BottomSheetScaffold,我使用这样的变量:

BottomSheetScaffold(
  ...
  sheetPeekHeight = bottomSheetPeekHeight,
  ...
)
Run Code Online (Sandbox Code Playgroud)

(完整的重现项目在这里:https://github.com/dbrgn/compose-repro)

这通常按预期工作,我可以设置showBottomSheet.value为false隐藏底部工作表。然而,隐藏看起来很糟糕,因为并非所有子可组合项都同时隐藏。

问题的GIF动画

由于 GIF 转换,在上面的动画中有点难以看到,但是当关闭底部工作表查看窗格时,在底部工作表消失之前,其他内容(位于其下方)会短暂可见。

有没有办法避免这种笨拙的隐藏行为?或者更好的是,有没有一种方法可以平滑地设置窗格隐藏的动画?

bottom-sheet android-jetpack android-jetpack-compose

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

Django:resolve(request.path).app_name不返回应用程序名称

我正在尝试从视图或模板访问当前的应用名称.

在其他SO答案如何在django中使用python获取应用程序名称以及如何在Django中获取当前应用程序我发现resolve(request.path).app_name应该返回当前的应用程序名称.但在我的情况下,它返回"无".

我正在使用Django 1.3.

django django-views

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

在发送请求之前重写scrapy URL

我正在使用scrapy来抓取一个多语言网站.对于每个对象,存在三种不同语言的版本.我正在使用搜索作为起点.不幸的是,搜索包含各种语言的URL,这在解析时会导致问题.

因此,我想在发送之前对URL进行预处理.如果它们包含特定字符串,我想替换URL的那一部分.

我的蜘蛛延伸了CrawlSpider.我查看了文档并找到了make_request_from _url(url)导致此尝试的方法:

def make_requests_from_url(self, url):                                                          
    """                                                                                         
    Override the original function go make sure only german URLs are                            
    being used. If french or italian URLs are detected, they're                                 
    rewritten.                                                                                  

    """                                                                                         
    if '/f/suche' in url:                                                                       
        self.log('French URL was rewritten: %s' % url)                                          
        url = url.replace('/f/suche/pages/', '/d/suche/seiten/')                                
    elif '/i/suche' in url:                                                                     
        self.log('Italian URL was rewritten: %s' % url)                                            
        url = url.replace('/i/suche/pagine/', '/d/suche/seiten/')                                  
    return super(MyMultilingualSpider, self).make_requests_from_url(url)                                                  
Run Code Online (Sandbox Code Playgroud)

但由于某种原因,这不起作用.在请求URL之前重写URL的最佳方法是什么?也许通过规则回调?

python scrapy

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