小编Dig*_*oug的帖子

Mongoengine:查询引用字段不返回任何结果,但字段在对象上有效

简化,我有两个文件,一个包和一个目标.包中包含目标的DBref()列表,目标包含包的DBRef.简化它的设置如下:

class Target(Document):

    package = ReferenceField('Package')
    name = StringField()


class Package(Document):

    targets = ListField(ReferenceField('Target'))
    name = StringField()
Run Code Online (Sandbox Code Playgroud)

当我创建一组目标时,使用mongoengine的标准方法按预期工作:

# in a method on Package, self = current Package instance
target = Target(name="My Name", package=self).save()
self.targets.insert(0, targets)
Run Code Online (Sandbox Code Playgroud)

我可以通过该包查询目标,并按预期返回结果:

>>> p = Package.objects.get(id='53e4db7bc57d207fc3d70738')
>>> Target.objects(name="My Name", package=p)
[<Target: My Name>]
Run Code Online (Sandbox Code Playgroud)

但对于某些目标,我们一次创建很多,而是使用批量执行来创建文档(简化):

bulk = Target._get_collection().initialize_unordered_bulk_op()
for line in csv_reader:
    entry = dict(zip(header, line))
    entry.update({'name': 'My Name', '_cls': 'Target', 'package': package.to_dbref()})

    bulk.find({'name': 'My Name', 'package': package.to_dbref()}).upsert().update({'$set': entry})

bulk.execute()
Run Code Online (Sandbox Code Playgroud)

这些对象看起来完全正常,但是,即使读取它们的值似乎没有问题,引用它们的包的查询也不起作用.

(Pdb) self
 <Package: Video Package …
Run Code Online (Sandbox Code Playgroud)

python mongodb mongoengine

5
推荐指数
0
解决办法
337
查看次数

模拟Angular和Jasmine中所有套件的全局HTTP请求

在我的app.config我使用一个名为ui-router-extras FutureStates的服务来动态地从REST调用的结果创建状态.其中一个副作用是,当我的测试运行时,由于我在所有测试中加载我的主应用程序模块,所有测试都调用该服务,因此所有测试都失败了

Error: Unexpected request: GET /api/v1/config
No more request expected
Run Code Online (Sandbox Code Playgroud)

我可以将以下内容添加到我的测试套件中,它修复了问题,使用后端注册此调用以便它可以预期.

beforeEach(inject(function(_$httpBackend_){
    _$httpBackend_.whenGET(/\/api\/v1\/config.*/).respond([]);
}));
Run Code Online (Sandbox Code Playgroud)

问题是这需要添加到每个测试套件中,在我的模块化应用程序中有很多湿代码.我正在寻找的是一种为所有测试全局定义此期望的方法(在业力全局文件中,或者我甚至可以选择服务/单行导入到我的套件中)或者如果我的测试设置或app.config低效设置是一种改进方法.

到目前为止我尝试过的

// Defined in a tests-global.js file listed in my karma files array
beforeEach(inject(function(_$httpBackend_){
    _$httpBackend_.whenGET(/\/api\/v1\/req_params.*/).respond([]);
}));
Run Code Online (Sandbox Code Playgroud)

它失败,Error: Injector already created, can not register a module!因为在我的个人测试套件,我打电话beforeEach(module('x'));给使用该模块的模块,并且你不能这样做,以后的inject().

我也试过了

// Defined in a tests-global.js file listed in my karma files array
beforeEach(function() {
    var $injector = angular.injector(['ngMock']);
    $httpBackend = $injector.get('$httpBackend');
    $httpBackend.whenGET(/\/api\/v1\/req_params.*/).respond([]);
});
Run Code Online (Sandbox Code Playgroud)

这不会产生额外的错误,但也无法解决 …

unit-testing jasmine angularjs karma-runner karma-jasmine

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

GAE管理控制台自定义页面未显示

我正在开展我的第一个GAE项目,我在管理控制台中显示自定义页面时遇到了一些麻烦.我正在关注Google Docs,但它似乎并不适用于我.我觉得它可能与本说明有关:

注意:只有默认版本定义的自定义页面才会显示在管理控制台中.

但我不完全确定他们的意思(应用程序的默认版本?).

如果我直接访问页面URL,页面URL工作正常,但链接不会显示在管理控制台侧栏中.

YAML:

application: namegenerator
version: 1
runtime: python27
api_version: 1
threadsafe: true

handlers:
- url: /css
  static_dir: css

- url: /admin/.*
  script: main.app
  login: admin

- url: /.*
  script: main.app

libraries:
- name: jinja2
  version: latest

builtins:
- remote_api: on

admin_console:
  pages:
  - name: Manual DB Entry
    url: /admin/db/add
  - name: Clear DB
    url: /admin/db/clear
Run Code Online (Sandbox Code Playgroud)

Python路由:

app = webapp2.WSGIApplication([('/', MainHandler),
                                ('/vote', SubmitVote),
                                ('/clear_session', ClearUserSession),
                                ('/admin/db/clear', ClearDatabase),
                                ('/admin/db/add', ManualAddToDatabase)],
                             debug=True)
Run Code Online (Sandbox Code Playgroud)

顺便说一句,这一切都在我的本地机器上进行测试和运行.谢谢你的帮助.

python google-app-engine yaml

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