小编gae*_*fan的帖子

了解Python配置文件输出

我正在尝试使用Python分析器来加速我的代码.我已经能够确定几乎所有时间花在的特定功能,但我无法弄清楚该功能在何时花费的时间.

下面我有个人资料输出,它显示"appendBallot"是罪魁祸首,消耗将近116秒.下面,我有"appendBallot"的代码.

我无法从配置文件输出中找出,我需要优化"appendBallot"的哪一部分,因为下一个最高时间条目不到一秒.我相信很多人只能从我的代码中告诉我,但我想了解如何从配置文件输出中获取该信息.任何帮助将不胜感激.

档案输出:

  ncalls  tottime  percall  cumtime  percall filename:lineno(function)
       1    0.000    0.000  116.168  116.168 <string>:1(<module>)
       1    0.001    0.001  116.168  116.168 {execfile}
       1    0.003    0.003  116.167  116.167 foo.py:1(<module>)
       1    0.000    0.000  116.139  116.139 ballots.py:330(loadKnown)
       1    0.000    0.000  116.109  116.109 plugins.py:148(load)
       1    0.196    0.196  116.108  116.108 BltBallotLoader.py:37(loadFile)
  100000  114.937    0.001  115.912    0.001 ballots.py:133(appendBallot)
  100000    0.480    0.000    0.790    0.000 ballots.py:117(newBallot)
  316668    0.227    0.000    0.310    0.000 ballots.py:107(getNumCandidates)
417310/417273    0.111    0.000    0.111    0.000 {len}
  200510    0.071    0.000    0.071    0.000 {method 'append' of 'list' objects} …
Run Code Online (Sandbox Code Playgroud)

python profile profiling

7
推荐指数
4
解决办法
7149
查看次数

从wxPython中的对话框中选择并复制文本

我有一个wxPython应用程序,在这个应用程序中,我可以从各种框架中选择和复制文本,但我不能从对话框中这样做.有没有办法做到这一点?

我理解我可以通过在对话框中放置某种TextCtrl来实现这一点,但我希望能够从标准的对话框中做到这一点.

编辑:

对不起,我应该更具体一点.我无法从Windows Vista或Mac下的wx.MessageBox中选择文本(无法访问Linux来尝试).以下是创建消息框的一个示例:

wx.MessageBox(str(msg), "Could not load ballots", wx.OK|wx.ICON_ERROR)
Run Code Online (Sandbox Code Playgroud)

我无法选择消息框的文本.

select text wxpython dialog copy

7
推荐指数
1
解决办法
1352
查看次数

没有lambda表达式的python排序

我经常使用lambda表达式在Python中进行排序,虽然它工作正常,但我觉得它不是很易读,并希望有更好的方法.这是我的典型用例.

我有一个数字列表,例如, x = [12, 101, 4, 56, ...]

我有一个单独的索引列表: y = range(len(x))

我想y根据值中的值排序x,我这样做:

y.sort(key=lambda a: x[a])
Run Code Online (Sandbox Code Playgroud)

有没有使用lambda这样做的好方法?

python sorting lambda

7
推荐指数
3
解决办法
2553
查看次数

使用Google API获取用户的所有电子邮件地址

对于我自己的Gmail帐户,我有多个与之关联的电子邮件地址.例如,我的大学有一个与我的Gmail相关联的电子邮件地址,我可以从我的Gmail发送电子邮件,就像它们来自我的大学电子邮件地址一样.

我正在阅读Google API,我发现我可以获得用户的Gmail地址,但是我是否还可以获得与其Gmail帐户相关联的任何其他电子邮件地址?

当用户登录我的网站时,我想向他们提供与gmail相关的电子邮件地址列表,让他们选择他们想要使用的电子邮件地址.

编辑:谢谢大家的答案,但我不认为他们中的任何一个回答了这个问题.我一直在玩Google的OAuth游乐场.奇怪的是,我可以获得大量非常个人化的信息(用户联系人列表,甚至收到的电子邮件)但我无法获得用户的替代电子邮件地址.

email gmail google-api google-api-client

7
推荐指数
2
解决办法
6317
查看次数

使用插槽的Python类的相等性

另一个问题提供了一个很好的,简单的解决方案,用于实现对象相等的测试.我将重复上下文的答案:

class CommonEqualityMixin(object):

    def __eq__(self, other):
        return (isinstance(other, self.__class__)
            and self.__dict__ == other.__dict__)

    def __ne__(self, other):
        return not self.__eq__(other)

class Foo(CommonEqualityMixin):

    def __init__(self, item):
        self.item = item
Run Code Online (Sandbox Code Playgroud)

我想为一个使用的类做这个__slots__.我知道基类和子类都必须使用插槽,但是你如何定义__eq__插槽呢?

python equality class slots

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

DMARC/SPF配置错误

我有一个域名注册domains.google.com,我使用G Suite帐户,也发送电子邮件来自SES和mailchimp.

我的DNS记录对我来说是正确的(Mailchimp说明):

@ TXT"v = spf1 include:_spf.google.com include:amazonses.com include:servers.mcsv.net~all"

_dmarc TXT"v = DMARC1; p = none; pct = 100; rua = mailto:re+aml1ryadtn7@dmarc.postmarkapp.com; sp = none; aspf = r;"

我使用邮戳的漂亮服务来获取每周DMARC摘要,并且他们为mailchimp电子邮件报告此错误:

mcsv.net有权代表mydomain.com发送,但看起来SPF仍未通过DMARC的对齐测试.DMARC查看邮件的返回路径,以确保其中的域与"发件人"地址中的域匹配.如果Return-Path路径与From地址不匹配,那么这些消息将无法通过DMARC的SPF对齐测试.请检查此来源,因为您可能需要设置自定义的返回路径.

以下是来自mailchimp电子邮件的相关标题:

Return-Path: <bounce-mc.us17_88978185.265251-recipient=patentbots.com@mail125.suw11.mcdlv.net>
From: me@mydomain.com
Run Code Online (Sandbox Code Playgroud)

设置(DNS或Mailchimp)中是否存在导致SPF DMARC对齐失败的错误?或者这是Mailchimp不支持的东西?

dns spf postmark dmarc gsuite

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

升级到2.7后,GAE Python dev服务器间歇性崩溃

我最近将我的GAE Python应用程序升级到Python 2.7.从那时起,我定期与开发服务器发生以下错误,并且开发服务器提供空白页面:

Traceback (most recent call last):
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/runtime/wsgi.py", line 168, in Handle
    handler = _config_handle.add_wsgi_middleware(self._LoadHandler())
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/runtime/wsgi.py", line 206, in _LoadHandler
    handler = __import__(path[0])
  [...]
  File "/Users/joneill/OpenSTV/OpenSTV/trunk/OpaVote-HR/main.py", line 2, in <module>
    import views
  [...]
  File "/Users/joneill/OpenSTV/OpenSTV/trunk/OpaVote-HR/views.py", line 3, in <module>
    from pytz.gae import pytz
  [...]
  File "/Users/joneill/OpenSTV/OpenSTV/trunk/OpaVote-HR/pytz/__init__.py", line 34, in <module>
    from pkg_resources import resource_stream
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver_import_hook.py", line 662, in Decorate
    return func(self, *args, **kwargs)
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver_import_hook.py", line 1818, in load_module
    return self.FindAndLoadModule(submodule, fullname, search_path)
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver_import_hook.py", line …
Run Code Online (Sandbox Code Playgroud)

python google-app-engine

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

GAE:使用testbed和webtest测试blob的下载

我正在使用blobstore和我的Google App Engine应用程序,一切都在生产服务器和开发服务器上运行良好.然而,使用testbed和webtest进行测试是行不通的......

在我的测试中,blob存在,因为我可以像这样访问它:

blob = self.blobstore_stub.storage._blobs[key]
Run Code Online (Sandbox Code Playgroud)

当我尝试在我的测试中下载blob时

response = self.app.get("/blob-download/2")
Run Code Online (Sandbox Code Playgroud)

我的blobstore下载处理程序永远不会被调用,我得到404错误(但链接在dev或prod服务器上工作).

我怀疑这是testbed或webtest的错误...

关于我可能做错什么的任何想法,或者如果这是一个错误的testbed/webtest可能是一个好的工作,以便我可以测试我的代码的这部分?


以下是有关我如何设置测试的一些信息.

import unittest
from webtest import TestApp
from google.appengine.ext import db, testbed
from google.appengine.api import users
from google.appengine.api import apiproxy_stub_map

class ExampleTests(unittest.TestCase):

    def setUp(self):
        self.testbed = testbed.Testbed()
        self.testbed.setup_env(app_id="stv")
        self.testbed.activate()
        self.testbed.init_datastore_v3_stub()
        self.testbed.init_taskqueue_stub()
        self.testbed.init_mail_stub()
        self.testbed.init_blobstore_stub()
        self.app = TestApp(main.application)
        apiproxy_stub_map.apiproxy.GetStub("datastore_v3").Clear()
        self.taskqueue_stub = apiproxy_stub_map.apiproxy.GetStub('taskqueue')
        self.mail_stub = apiproxy_stub_map.apiproxy.GetStub('mail')
        self.blobstore_stub = apiproxy_stub_map.apiproxy.GetStub('blobstore')

   def testBlob(self):
        # create blob using files.blobstore.create
        response = self.app.get("/blob-download/2") # This returns 404
        self.assertEqual(response.body, "content of blob") …
Run Code Online (Sandbox Code Playgroud)

python google-app-engine blobstore

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

在GAE/P中创建自己的活动记录

我想在我的应用程序中记录用户活动,以便向用户演示,也可以用于管理目的.我的客户是公司,所以我可能会在三个级别上展示活动:

  1. 单个用户的活动
  2. 公司所有用户的活动
  3. 所有活动

要进行日志记录,我将创建一个模型来存储日志条目.我看到了一些这样做的方法.

首先,我可以将每个记录的活动存储在自己的实体中,然后根据需要进行查询:

class Activity(ndb.Model):
    activity = ndb.StringProperty()
    user_id = ndb.StringProperty()
    company_id = ndb.StringProperty()
Run Code Online (Sandbox Code Playgroud)

其次,我可以将用户的所有活动存储在单个实体中:

class UserActivity(ndb.Model):
    activity = ndb.StringProperty(repeated=True) # Note this is now a list
    company_id = ndb.StringProperty()
Run Code Online (Sandbox Code Playgroud)

第三,我可以将公司的所有活动存储在一个实体中:

class CompanyActivity(ndb.Model):
    activity = ndb.StringProperty(repeated=True) # Would store user_id here somehow
Run Code Online (Sandbox Code Playgroud)

这三个选项中的功能/性能权衡是什么?我知道如果频繁出现交易,第二和第三选项存在潜在的争用问题,但我们假设这不是一个问题,为了讨论.

对于第二个和第三个选项,减少数据存储区实体的总数是否有任何显着优势(因为它们将合并为更少的实体)?或者我应该选择第一个选项?

python google-app-engine

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

对于 SSO/SAML 登录,从 Azure 获取 displayName 到 Google Identity Platform

我使用 Google Identity Platform 和 FirebaseUI-Web 登录我的网站。我有密码登录、Oauth2 Google、OAuth2 Microsoft 和 SSO 选项。

对于除 SSO 之外的所有功能,Identity Platform 都会返回 a,displayName因此我有登录用户的名称。对于 SSO,我没有,而且我也想在那里获取它。

我的客户在其端使用 Azure AD 进行 SSO。他们添加了displayName这样的声明:

在此输入图像描述

但我仍然没有站在displayName我这边。

在使用 FirebaseUI-Web 进行 SSO 登录过程结束时,我收到用户的 ID 令牌。我使用它从 Identity Platform 检索用户,这是我收到的信息:

{
    'localId': 'xxx', 
    'email': 'user@example.com', 
    'emailVerified': True, 
    'providerUserInfo': [{
        'providerId': 'saml.xxx', 
        'federatedId': 'user@example.com', 
        'email': 'user@example.com', 
        'rawId': 'user@example.com'}], 
    'validSince': '1639441441', 
    'lastLoginAt': '1639441441196', 
    'createdAt': '1639441441196', 
    'lastRefreshAt': '2021-12-14T00:24:01.196Z'
}
Run Code Online (Sandbox Code Playgroud)

我们如何配置 Azure 以通过 SSO/SAML 登录向 Google Identity Platform 提供用户名?

saml azure single-sign-on azure-active-directory google-cloud-platform

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