我有一个工作流程,在其中一个步骤中,如果命令以退出代码 1(失败)结束,我想运行下一个命令/作业(修复导致上一个命令失败的问题),但我不希望这样退出代码 1 影响工作流结果状态。
在这种情况下,如果我的退出代码为 1,即使我解决了问题,结果状态也将为failure,但我希望结果状态为success如果第二个命令解决了问题。
这可能吗?
这是我的workflow.yml:
\
name: autoblack
on: [pull_request, push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Set up Python 3.8
uses: actions/setup-python@v2.2.2
with:
python-version: 3.8
- name: Install Black
run: pip3 install git+git://github.com/psf/black
- name: Run black --check .
run: black --check .
reformat:
runs-on: ubuntu-latest
needs: [build]
if: always() && (needs.build.result == 'failure')
steps:
- uses: actions/checkout@v2.3.4
- name: Set up Python 3.8
uses: actions/setup-python@v2.2.2
with:
python-version: 3.8 …Run Code Online (Sandbox Code Playgroud) 我目前正在尝试在我的 Django 应用程序中实现双因素身份验证。我做的第一件事是修改Meta类中的类UserSerializer以添加两个字段enabled(指示用户是否启用 2FA 的布尔值)和secret_key(生成 OTP 的密钥,当用户启用 2FA 时共享给用户)。
为了最大限度地修改登录流程,我修改了发送以生成访问令牌的表单,以包含新字段“otp”。用户可以填写也可以不填写,后端会检查用户是否启用了2FA,如果是,OTP是否正确。
如果没有 2FA,登录只是一个带有 body 的 POST 请求{"username": usr, "password": pwd}。这已成为带有 body 的 POST 请求{"username": usr, "password": pwd, "otp": otp}。如果用户尚未启用 2FA,他只需将该opt字段留空即可。
我的urls.py看起来像这样:
path("api/token/", TokenObtainPairView.as_view(), name="token_obtain_pair")
Run Code Online (Sandbox Code Playgroud)
我的想法是重写 TokenObtainPairView 以适应新的请求。根据我的发现,我必须改变validate方法,但我真的不知道如何做到这一点。enabled我可能必须获取用户的和字段的值secret_key(基于用户名)来生成 OTP(如果相关)并根据字段进行检查otp。问题是,我不知道该怎么做,而且我在 simple-jwt 实现中有点迷失了。
python django jwt django-rest-framework multi-factor-authentication
我正在尝试将条纹支付集成到 flutter 移动应用程序中。完成付款后,我希望应用程序执行Navigator.pop(context)。但是,我收到错误消息:
未处理的异常:查找已停用小部件的祖先是不安全的。E/flutter (2773):此时 widget 元素树的状态不再稳定。
这是我的条纹支付代码
class ExistingCardsPage extends StatefulWidget {
static const String id = 'exsiting-card';
ExistingCardsPage({Key key}) : super(key: key);
@override
ExistingCardsPageState createState() => ExistingCardsPageState();
}
class ExistingCardsPageState extends State<ExistingCardsPage> {
List cards = [];
StripeService _service = StripeService();
Future<StripeTransactionResponse> payViaExistingCard(
BuildContext context, card, amount) async {
await EasyLoading.show(status: "Please wait....");
var expiryArr = card['expiryDate'].split('/');
CreditCard stripeCard = CreditCard(
number: card['cardNumber'],
expMonth: int.parse(expiryArr[0]),
expYear: int.parse(expiryArr[1]),
);
var response = await StripeService.payViaExistingCard(
amount: '${amount}00', currency: …Run Code Online (Sandbox Code Playgroud) 我有一个foo在执行过程中记录一些信息的函数:
import logging
logging.basicConfig()
def foo(x):
for i in range(10):
logging.info(f"This is iteration number {i}.")
x += i
return x
Run Code Online (Sandbox Code Playgroud)
问题:是否可以创建一个装饰器,log_or_not以便我可以foo使用添加的参数来调用我的装饰函数,如下所示:
foo(x=x, level=logging.INFO)
Run Code Online (Sandbox Code Playgroud)
现在我所拥有的就是这个,一个将日志记录级别设置为 INFO 的装饰器,执行该函数,然后将日志记录级别返回到原始级别:
def log_or_not(func):
def wrap_function(*args, **kwargs):
original_level = logging.root.level
print(original_level)
logging.getLogger().setLevel(logging.INFO)
y = func(*args, **kwargs)
logging.getLogger().setLevel(original_level)
return y
return wrap_function
@log_or_not
def foo(x):
for i in range(10):
logging.info(f"This is iteration number {i}.")
x += i
return x
Run Code Online (Sandbox Code Playgroud) 我最近安装了 Prometheus 并使用 Grafana 进行报告。
我在安装过程中将 Prometheus 设置为保留时间为 1 年:
--storage.tsdb.retention.time=1y
Run Code Online (Sandbox Code Playgroud)
现在,我们从昨天开始注意到 15 天前的数据不再显示。我的代码有问题吗?是1y不是不被认可?
python ×2
decorator ×1
django ×1
flutter ×1
github ×1
jwt ×1
multi-factor-authentication ×1
prometheus ×1
prometheus-blackbox-exporter ×1
python-3.x ×1