小编Bri*_*unt的帖子

单元测试Flask会话 - 无法使用session_transaction重现失败

我正在测试一个Flask应用程序(Flask 0.9),特别是我有一个会话夹具,我想以文档化的方式运行,就像这样(我理解):

from flask import Flask, session
app = Flask(__name__)

@app.route('/', methods=['POST'])
def m():
    logging.error(session) # expect {'x': 1}
    return ""

with app.test_request_context() as trc:
  with app.test_client() as c:
    with c.session_transaction() as sess:
      sess['x'] = 1
    c.post()
Run Code Online (Sandbox Code Playgroud)

这按预期工作,输出如下:

ERROR:root:<SecureCookieSession {'x': 1}>
Run Code Online (Sandbox Code Playgroud)

不幸的是我遇到了意外的结果,其中会话数据没有在端点函数中设置,即输出是这样的:

ERROR:root:<SecureCookieSession {}>
Run Code Online (Sandbox Code Playgroud)

只有从我的单元测试框架运行时才会出现此问题.就目前情况而言,我无法用堕落的情况重现这个问题,尽管我已经做了相当大的努力,其中有一些努力.重要的是我已经包括在内,itsdangerousGoogle App Engine testbed期待其中一个可能是原因.

在我自己的系统上,我已经超越了要点,几乎完全复制了我的单元测试框架,试图将其隔离开来.同样,我从测试框架中删除了越来越多的相关代码.到目前为止,我无法想到退化案例与我可能影响结果的精简框架之间的差异.我已经遍历了c.post()pdb中的调用来尝试找出这种恶意的原因,但还没有收集任何有用的见解.

这就是说,我会对这个问题可能存在的方向或建议表示感谢.什么可能影响Werkzeug的背景,以至于session_transaction没有被尊重?

flask python-unittest

12
推荐指数
1
解决办法
1536
查看次数

Python 2.6通过Queue/Pipe/etc发送连接对象

鉴于此错误(Python问题4892),会引发以下错误:

>>> import multiprocessing
>>> multiprocessing.allow_connection_pickling()
>>> q = multiprocessing.Queue()
>>> p = multiprocessing.Pipe()
>>> q.put(p)
>>> q.get()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File     "/.../python2.6/multiprocessing/queues.py", line 91, in get
    res = self._recv()
TypeError: Required argument 'handle' (pos 1) not found
Run Code Online (Sandbox Code Playgroud)

有没有人知道在队列上传递Connection对象的解决方法?

谢谢.

python queue pipe pickle multiprocessing

11
推荐指数
2
解决办法
3721
查看次数

从不同文件向JavaScript命名空间添加多个实体

给定ns两个不同文件中使用的命名空间:

abc.js

ns = ns || (function () {
   foo = function() { ... };

   return {
      abc : foo
   };
}());
Run Code Online (Sandbox Code Playgroud)

def.js

// is this correct?
ns = ns || {}

ns.def = ns.def || (function () {
   defoo = function () { ... };
   return {
      deFoo: defoo
   };
}());
Run Code Online (Sandbox Code Playgroud)

这是添加defns命名空间的正确方法吗?换句话说,如何在javascript中合并两个对命名空间的贡献?

如果abc.jsdef.js我希望这个工作之前到来.如果def.jsabc.js我预期ns.abc不存在之前,因为ns当时已定义.

似乎应该有一个设计模式来消除使用javascript命名空间模式进行包含的任何不确定性.

我很欣赏有关如何最好地利用这种"包容性"的想法和意见.

谢谢阅读.

布赖恩

javascript singleton design-patterns namespaces

11
推荐指数
1
解决办法
3127
查看次数

pipe.communicate的Python编码

我从Python 2.6中调用pipe.communicatePython的subprocess模块.我从这段代码中得到以下错误:

from subprocess import Popen

pipe = Popen(cwd)

pipe.communicate( data )
Run Code Online (Sandbox Code Playgroud)

对于任意cwd,以及data包含unicode(特别是0xE9)的地方:

Exec. exception: 'ascii' codec can't encode character u'\xe9' in position 507: ordinal not in range(128)
Traceback (most recent call last):  

... stdout, stderr = pipe.communicate( data )

  File
"/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/subprocess.py",
line 671, in communicate
    return self._communicate(input)

  File
"/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/subprocess.py",
line 1177, in _communicate
    bytes_written = os.write(self.stdin.fileno(), chunk)
Run Code Online (Sandbox Code Playgroud)

我认为这是正在发生的,因为pipe.communicate()期望ASCII编码的字符串,但是data是unicode.

这是我遇到的问题,我是否有办法将unicode传递给pipe.communicate()

谢谢你的阅读!

布赖恩

python unicode encoding subprocess popen

11
推荐指数
1
解决办法
5106
查看次数

通过user_id获取Google App Engine用户

GAE中,你User能用User对象查找user_id吗?

换句话说,是否有相当于:

from google.appengine.api.users import User

user = User.get_by_id(user_id)
Run Code Online (Sandbox Code Playgroud)

google-app-engine

11
推荐指数
2
解决办法
2636
查看次数

使用例如process_response在Flask中修改响应的正确方法

给定一个简单的Flask应用程序,我只是好奇是否有一种正确的方法来修改钩子中的响应,例如process_response

鉴于:

from flask import Flask, Response

class MyFlask(Flask):
    def process_response(self, response):
        # edit response data, eg. add "... MORE!", but
        # keep eg mimetype, status_code
        response.data += "... This is added" # but should I modify `data`?
        return response
        # or should I:
        #     return Response(response.data + "... this is also added",
        #                     mimetype=response.mimetype, etc)

app = MyFlask(__name__)

@app.route('/')
def root():
    return "abddef"

if __name__ == '__main__':
    app.run()
Run Code Online (Sandbox Code Playgroud)

每次只创建一个新的响应是否合适,或者仅仅编辑响应参数并返回修改后的响应是否正常?

这可能是纯粹的风格,但我很好奇 - 我没有注意到我的阅读中的任何内容都表明了这样做的首选方式(即使它可能很常见).

谢谢阅读.

python flask

11
推荐指数
1
解决办法
2863
查看次数

AppEngine urlfetch validate_certificate = False/None未被遵守

在AppEngine开发人员应用程序服务器中,我收到如下错误:

SSLCertificateError: Invalid and/or missing SSL certificate for URL ...
Run Code Online (Sandbox Code Playgroud)

当我这样获取https带有自签名证书的服务器时(几乎总是localhost通过ssh端口转发到vm):

result = urlfetch.fetch(url=url, method=method, payload=payload,
                        deadline=DEADLINE, validate_certificate=None)
Run Code Online (Sandbox Code Playgroud)

人们不会想到为无效证书的SSL失败validate_certificateFalse,虽然这很可能是2.7.9政策在Python总是验证SSL证书的副作用.

请注意,传递False(而不是None)for validate_certificate也不起作用.

这个问题在Python 2.7.9-10上通过OS X 10.10.2-4上的Homebrew/XCode与AppEngine 1.9.18到1.19.26发生.

在Google App Engine上存在关于此问题(例如12096),但我正在寻找解决方法.

这是我试图解决的问题:

  1. 将证书添加到Mac的登录密钥链(在浏览器中工作,而不是从Python工作)

  2. 将证书添加到app-engine-python/lib/cacerts/cacerts.txt和/或./lib/cacerts/urlfetch_cacerts.txt (尽管这可能需要重启验证为它工作,因为这似乎是在那里它们被使用的唯一的情况下)与如

    $ echo >> /usr/local/share/app-engine-python/lib/cacerts/urlfetch_cacerts.txt

    $ openssl x509 -subject -in server.crt >> /usr/local/share/app-engine-python/lib/cacerts/urlfetch_cacerts.txt

  3. 使用PEP-0476解决方法禁用ssl HTTPs检查,即

    ssl._create_default_https_context = ssl._create_unverified_context

    import ssl(1149行左右)或之后google/appengine/dist27/python_std_lib/httplib.py

这在Mac上尤其成问题,因为从XCode …

python google-app-engine urllib2 ssl-certificate google-app-engine-python

11
推荐指数
1
解决办法
2776
查看次数

git reset --hard在CircleCI/Ubuntu 14上挂起,git-lfs <1.5.6

我正在部署到CircleCI,但我的代码已超时.

特别是CircleCI正在调用导致超时的命令是在checkout阶段:

git reset - 硬SHA

SHA构建的哈希在哪里,但是在我注意到ssh'ing时HEAD,我尝试过的其他东西也会永远运行.

此时代码已经签出:

git clone --quiet git@github.com:Organization/Repo.git.--config core.compression = 9 --depth 10 --no-single-branch

为什么会git reset --hard在CircleCI环境中永远运行(看似),以及哪些修复程序可以合理使用?

更多细节(我们这里也有一些git-lfs文件):

  • lsb-release Ubuntu 14.04.4 LTS
  • git版本2.11.0
  • git-lfs/1.5.4(GitHub; linux amd64;去1.7.4)

编辑这似乎与:

我还要注意,添加GIT_LFS_SKIP_SMUDGE=1(在CircleCI项目配置中)没有任何有用的效果.

它确实有助于回到Ubuntu 12,但显然这不太理想.

编辑

这是我最近提交的错误报告:https://discuss.circleci.com/t/cannot-pull-with-git-lfs/14346

(只是为了确保可见性,因为我的其他报告都被隐藏在评论中)

git circleci ubuntu-14.04 git-lfs

11
推荐指数
1
解决办法
459
查看次数

在Docker Container内的Container OS上访问Google Cloud服务帐户凭据

在Google Cloud Compute上使用容器优化操作系统(COS),从Docker容器中访问VM项目的默认服务帐户凭据的最佳方法是什么?

$ gcloud compute instances create test-instance \
  --image=cos-stable --image-project=cos-cloud

$ ssh (ip of the above)
# gcloud ...
Command not found

# docker run -ti google/cloud-sdk:alpine /bin/sh
# gcloud auth activate-service-account
... --key-file: Must be specified.
Run Code Online (Sandbox Code Playgroud)

如果凭据在VM上,那么Doc​​ker可以安装这些凭据.通常凭证将在.config/gcloud/,并执行此操作docker run -v ~/.config/gcloud:~/.config/gcloud image.容器操作系统中是否有这样的凭证,特别是因为缺少这些凭证,这一点并不明显gcloud.

如果VM上的凭据失败并且可安装,则选项似乎包括:

  1. 将凭据放在容器元数据/环境变量中;
  2. .json然后,为服务帐户创建凭证文件
    1. 将其上传到VM,然后挂载; 要么
    2. 添加.json到容器;
  3. 运行Docker容器(例如cloud-sdk-docker)获取凭据并通过例如共享挂载分区与主机共享.理想情况下,这将是gcloud auth activate-service-account

是否有规范或最佳实践方法为Docker容器提供VM项目的服务帐户凭据?

Google Cloud已经拥有了一个安全策略模型,即所需的模型:项目中的VM应具有服务帐户提供的访问权限.为了避免复杂性以及错误配置或事故的可能性,正确的解决方案将采用此现有安全模型,即不涉及创建,下载,分发和维护凭证文件.

感觉这将是一个需要用COS,Docker和Kubernetes解决的常规问题,所以我假设我错过了一些直截了当的东西 - 但是解决方案对我来说并不明显.

编辑 - 注意set-service-account API …

google-compute-engine google-cloud-platform google-container-registry google-container-os google-iam

11
推荐指数
1
解决办法
3687
查看次数

Python Google Cloud功能连接由同行重置

详情如下:https://issuetracker.google.com/issues/113672049

交叉发布在这里:https://github.com/GoogleCloudPlatform/google-cloud-python/issues/5879)

从Python中的Google Cloud功能使用Firebase存储API时,我收到连接重置错误.

部署的函数调用一个blob-get ie

from firebase_admin import storage

def fn(request):
  bucket = 'my-firebase-bucket'
  path = '/thing'
  blob = storage.bucket(bucket).get_blob(path)
Run Code Online (Sandbox Code Playgroud)

失败是间歇性的; 该功能的成功率约为90%.

在部署后第一次调用函数时,似乎更有可能失败.

python google-cloud-storage google-cloud-functions firebase-storage

11
推荐指数
1
解决办法
925
查看次数