我正在测试一个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)
只有从我的单元测试框架运行时才会出现此问题.就目前情况而言,我无法用堕落的情况重现这个问题,尽管我已经做了相当大的努力,其中有一些努力.重要的是我已经包括在内,itsdangerous并Google App Engine testbed期待其中一个可能是原因.
在我自己的系统上,我已经超越了要点,几乎完全复制了我的单元测试框架,试图将其隔离开来.同样,我从测试框架中删除了越来越多的相关代码.到目前为止,我无法想到退化案例与我可能影响结果的精简框架之间的差异.我已经遍历了c.post()pdb中的调用来尝试找出这种恶意的原因,但还没有收集任何有用的见解.
这就是说,我会对这个问题可能存在的方向或建议表示感谢.什么可能影响Werkzeug的背景,以至于session_transaction没有被尊重?
鉴于此错误(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对象的解决方法?
谢谢.
给定ns两个不同文件中使用的命名空间:
ns = ns || (function () {
foo = function() { ... };
return {
abc : foo
};
}());
Run Code Online (Sandbox Code Playgroud)
// is this correct?
ns = ns || {}
ns.def = ns.def || (function () {
defoo = function () { ... };
return {
deFoo: defoo
};
}());
Run Code Online (Sandbox Code Playgroud)
这是添加def到ns命名空间的正确方法吗?换句话说,如何在javascript中合并两个对命名空间的贡献?
如果abc.js在def.js我希望这个工作之前到来.如果def.js在abc.js我预期ns.abc不存在之前,因为ns当时已定义.
似乎应该有一个设计模式来消除使用javascript命名空间模式进行包含的任何不确定性.
我很欣赏有关如何最好地利用这种"包容性"的想法和意见.
谢谢阅读.
布赖恩
我从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()?
谢谢你的阅读!
布赖恩
在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) 给定一个简单的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)
每次只创建一个新的响应是否合适,或者仅仅编辑响应参数并返回修改后的响应是否正常?
这可能是纯粹的风格,但我很好奇 - 我没有注意到我的阅读中的任何内容都表明了这样做的首选方式(即使它可能很常见).
谢谢阅读.
在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_certificate的False,虽然这很可能是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),但我正在寻找解决方法.
这是我试图解决的问题:
将证书添加到Mac的登录密钥链(在浏览器中工作,而不是从Python工作)
将证书添加到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
使用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
我正在部署到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文件):
编辑这似乎与:
我还要注意,添加GIT_LFS_SKIP_SMUDGE=1(在CircleCI项目配置中)没有任何有用的效果.
它确实有助于回到Ubuntu 12,但显然这不太理想.
编辑
这是我最近提交的错误报告:https://discuss.circleci.com/t/cannot-pull-with-git-lfs/14346
(只是为了确保可见性,因为我的其他报告都被隐藏在评论中)
在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上,那么Docker可以安装这些凭据.通常凭证将在.config/gcloud/,并执行此操作docker run -v ~/.config/gcloud:~/.config/gcloud image.容器操作系统中是否有这样的凭证,特别是因为缺少这些凭证,这一点并不明显gcloud.
如果VM上的凭据失败并且可安装,则选项似乎包括:
.json然后,为服务帐户创建凭证文件
.json到容器;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
详情如下: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
python ×5
flask ×2
circleci ×1
encoding ×1
git ×1
git-lfs ×1
google-iam ×1
javascript ×1
namespaces ×1
pickle ×1
pipe ×1
popen ×1
queue ×1
singleton ×1
subprocess ×1
ubuntu-14.04 ×1
unicode ×1
urllib2 ×1