小编use*_*151的帖子

无法从 Flask 获取 json Web 令牌

我有以下 app.py 代码:

from flask import Flask
from flask_jwt import JWT, jwt_required, current_identity
from werkzeug.security import safe_str_cmp

class User(object):
    def __init__(self, id, username, password):
        self.id = id
        self.username = username
        self.password = password

    def __str__(self):
        return "User(id='%s')" % self.id

users = [
    User(1, 'user1', 'abcxyz'),
    User(2, 'user2', 'abcxyz'),
]

username_table = {u.username: u for u in users}
userid_table = {u.id: u for u in users}

def authenticate(username, password):
    user = username_table.get(username, None)
    if user and safe_str_cmp(user.password.encode('utf-8'), password.encode('utf-8')):
        return user

def …
Run Code Online (Sandbox Code Playgroud)

python flask flask-restful

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

如何将 AWS 托管策略附加到 cloudformation 和对流层中的角色

在我的对流层代码中,我基本上想创建一个 sns 主题和一个 lambda 执行角色,我可以在其中附加一些来自 aws 的托管策略。但问题是我找不到一种方法来引用托管策略的 arn 名称。下面是我的代码,但我在这里复制并粘贴托管策略 json 文档。

还有更好的出路吗?

from troposphere import FindInMap, GetAtt, Join, Output, Template, Ref, ImportValue
from troposphere.sns import Topic
from troposphere.iam import Role, Policy


t = Template()

t.set_version("2010-09-09")

sns_topic = Topic(TopicName='IngestStateTopic', title='IngestStateTopic')

t.add_resource(sns_topic)

LambdaExecutionRole = t.add_resource(
    Role(
        "LambdaExecutionRole",
        Path="/",
        Policies=[
            Policy(PolicyName="CloudWatchLogsFullAccess",
                   PolicyDocument={
                       "Version":
                       "2012-10-17",
                       "Statement": [{
                           "Action": ["logs:*"],
                           "Effect": "Allow",
                           "Resource": "*"
                       }]
                   }),
            Policy(PolicyName="SnsReadOnlyAccess",
                   PolicyDocument={
                       "Version":
                       "2012-10-17",
                       "Statement": [{
                           "Effect":
                           "Allow",
                           "Action": ["sns:GetTopicAttributes", "sns:List*"],
                           "Resource":
                           "*"
                       }]
                   }),
            Policy(PolicyName="LambdaBasicExecutionRole-Test",
                   PolicyDocument={
    "Version": "2012-10-17", …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services python-3.x aws-cloudformation troposphere

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

Perl的Tiescalar

我已经将下面的模块编写为将标量绑定到特定文件内容的模块:

package Scalar;
use strict;
my $count = 0;
use Carp;

sub TIESCALAR{
  print "Inside TIESCALAR function \n";
  my $class = shift;
  my $filename = shift;
  if ( ! -e $filename )
  {
    croak "Filename : $filename does not exist !";
  }
  else
  {
    if ( ! -r $filename || ! -w $filename )
    {
      croak "Filename : $filename is not readable or writable !";
    }
  }
  $count++;
  return \$filename , $class;
}

sub FETCH {
  print "Inside FETCH function …
Run Code Online (Sandbox Code Playgroud)

perl

2
推荐指数
1
解决办法
92
查看次数

Perl中的BEGIN,CHECK,INIT和END块

据我了解Perl代码中的这些特殊函数,BEGIN和CHECK块在编译阶段运行,而INIT和END块在实际执行阶段运行.

我可以理解在实际的Perl代码(Perl库)中使用这些块但是在模块中使用它们呢?那可能吗?

因为当我们使用use <Module-name>模块编译时,所以实际上BEGIN和CHECK块运行.但是INIT和END块如何运行,因为模块代码我不认为是真正意义上运行的.我们只使用模块内部的某些功能.

perl

2
推荐指数
1
解决办法
1264
查看次数

元组的哈希函数如何工作

根据我在Python中的理解,由于元组是不可变的,因此它们应该是可散列的,并且hash()函数应该在它们上起作用。但是似乎不是这样,因为当它们包含列表或字典之类的项目时,哈希函数会发出如下所示的抱怨。

这有效:

>>> t = (1, 2, 'name', 'Subhayan', 'age', 32, 'sex', 'male')
>>> hash(t)
3584505648807432737
Run Code Online (Sandbox Code Playgroud)

这不起作用:

>>> t = ({'First': 1, 'second': 2}, 'age', 32, 'sex', 'male', 'name', 'Subhayan')
>>> hash(t)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'dict'
Run Code Online (Sandbox Code Playgroud)

所以我的问题是哈希函数如何在内部运行?它会遍历元组并尝试哈希各个组件吗?

有人可以给我一些有关它如何工作的参考。

python hash

2
推荐指数
1
解决办法
380
查看次数

在Python中使用global关键字

我有一个简单的Python脚本,该脚本只将列表列表中的两个数字相乘,然后将结果发送到另一个函数,然后将结果附加到列表中。下面是相同的代码:

results = []

def check_results(result):
    results.append(result)

def multiply(x, y):
    return x * y

if __name__ == "__main__":
    numbers = [[1,1], [2,2], [3,3]]
    for x, y in numbers:
        check_results(multiply(x, y))
    print(results)
Run Code Online (Sandbox Code Playgroud)

我的问题是在将它们添加到超出其范围的结果列表之前,是否不应该在check_results函数内使用global关键字?

换句话说,整个代码不应该是这样吗?

results = []

def check_results(result):
    global results
    results.append(result)

def multiply(x, y):
    return x * y

if __name__ == "__main__":
    numbers = [[1,1], [2,2], [3,3]]
    for x, y in numbers:
        check_results(multiply(x, y))
    print(results)
Run Code Online (Sandbox Code Playgroud)

有人可以让我知道我的理解是否错误吗?global关键字应用于什么目的?

python

2
推荐指数
1
解决办法
49
查看次数

测试期间模拟环境变量

我有一个非常简单的 fastapi 应用程序,我想测试它,代码dummy_api.py如下:

import os
from fastapi import FastAPI


app = FastAPI()


@app.get(os.getenv("ENDPOINT", "/get"))
def func():
    return {
        "message": "Endpoint working !!!"
    }
Run Code Online (Sandbox Code Playgroud)

当我想测试这个时,我使用以下文件:

from fastapi.testclient import TestClient
import dummy_api


def test_dummy_api():
    client = TestClient(dummy_api.app)
    response = client.get("/get")
    assert response.status_code == 200


def test_dummy_api_with_envar(monkeypatch):
    monkeypatch.setenv("ENDPOINT", "dummy")
    client = TestClient(dummy_api.app)
    response = client.get("/dummy")
    assert response.status_code == 200
Run Code Online (Sandbox Code Playgroud)

但是,我无法模拟环境变量部分,因为其中一个测试因404.

pytest -s -v
================================================================= test session starts ==================================================================
platform linux -- Python 3.8.5, pytest-6.2.2, py-1.9.0, pluggy-0.13.1 -- /home/subhayan/anaconda3/envs/fastapi/bin/python
cachedir: …
Run Code Online (Sandbox Code Playgroud)

python mocking pytest fastapi pytest-mock

2
推荐指数
1
解决办法
6261
查看次数

UNIX:xargs 和 exec 的区别

"rGEO"我尝试使用以下命令在目录中搜索字符串:

find . -name "*" -type f -print | xargs grep "rGEO" 
./home/oper1/AgencyTape/geo/exe/gngeo.cmd:${WEB_DIR}/exe/web_reports.sh -aGN -d${prev_ccyy}${prev_mm} -rGEO -nomail
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我返回具有匹配行的文件名,以及与上述字符串匹配的行。

find . -name "*" -type f -exec grep "rGEO" {} \;
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我返回:

${WEB_DIR}/exe/web_reports.sh -aGN -d${prev_ccyy}${prev_mm} -rGEO -nomail
Run Code Online (Sandbox Code Playgroud)

包含该行的文件不会被打印 - 并且,正如您所看到的,两个输出之间存在很大差异。

使用xargs可以提供更清晰、更精确的输出。

我的问题是:这两个命令有什么区别?对我来说,他们似乎执行相同的逻辑,但得到不同的结果。

exec xargs

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

Promise 如何在 Node.js 和 AWS lambda 函数中工作

总的来说,我对 Javascript 和 Node.js 很陌生。因此,我试图了解 Node.js 中异步编程的概念以及如何在 AWS lambda 中使用它。

我在亚马逊博客上看到了这篇博文,它解释了 Node.js lambda 函数中对 async/await 的支持:https : //aws.amazon.com/blogs/compute/node-js-8-10-runtime-now-在 aws-lambda/ 中可用

据我所知,生成承诺的函数的概念如下面的代码片段所示:

const func1 = () => {
    console.log("Starting with execution of func1...")
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve("First promise ended after 3 secs")
        }, 3000)
    })
}
Run Code Online (Sandbox Code Playgroud)

所以在这里函数显式地生成一个 Promise 并返回相同的。

但是在上面的 AWS 博客文章中,我看到了一个函数定义:

let AWS = require('aws-sdk');
let lambda = new AWS.Lambda();

exports.handler = async (event) => {
    return await lambda.getAccountSettings().promise() ;
};
Run Code Online (Sandbox Code Playgroud)

现在我已经检查了 Node.js …

javascript amazon-web-services node.js promise aws-lambda

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

使用函数创建哈希

我正在尝试使用perl中的函数创建哈希.实际上我正在研究在perl中创建二叉搜索树.以下是代码:

sub newhash {
  $data = shift;
  $left = undef;
  $right = undef;
  %node = ("data"=>$data,"left"=>$left,"right"=>$right);
  return (\%node);
}

$firstele = newhash(2);
foreach ( keys %$firstele )
{
  print "$_:$firstele->{$_}\n";
}

$node = newhash(1);

foreach ( keys %$node )
{
  print "$_:$node->{$_} \n";
}

foreach ( keys %$firstele )
{
  print "$_:$firstele->{$_}\n";
}
Run Code Online (Sandbox Code Playgroud)

麻烦的是,当我打印原始哈希时,数据键被我传递给newhash函数的任何内容所取代.输出:

left:
right:
data:2
left:
right:
data:1
left:
right:
data:1
Run Code Online (Sandbox Code Playgroud)

任何想法为什么数据键被替换?

perl perl-data-structures

0
推荐指数
1
解决办法
119
查看次数

Python模块中的范围

我有一个模块代码:

X = 88 
def f():
    global X 
    X = 99
Run Code Online (Sandbox Code Playgroud)

另一个使用此模块的文件:

from First import X,f
X = 11
f()
print(X)
Run Code Online (Sandbox Code Playgroud)

现在根据我的理解,因为我们明确地导入符号x和f,它们应该成为导入模块命名空间的一部分.

并且因为函数f改变了全局X. 答案应该是99.

但事实似乎并非如此,因为输出为11.

请帮我理解为什么?

python python-3.x

0
推荐指数
1
解决办法
42
查看次数