从 pydantic 数据模型的打印和调用中隐藏变量(例如 'password')
Hide variable (e.g. 'password') from print and call of pydantic data model
我正在为某些 user/password 数据模型使用 pydantic。打印模型时,我想用其他内容(例如 ***
)替换密码的值,以防止密码是例如意外写入日志文件或控制台。
from pydantic import BaseModel
class myUserClass(BaseModel):
User = 'foo'
Password = 'bar'
def __str__(self):
return "Hidden parameters."
U = myUserClass()
print(U)
# > Hidden parameters. # Should be User='foo', Password='***' or similar
U # This will still show my password.
#> myUserClass(User='foo', Password='bar')
如何访问正常打印的字符串并仅将 'bar' 替换为 '***',但保留所有参数?
我怎样才能在调用 U
时也这样做?这可能不像日志记录和控制台输出一样重要,通常 print
被调用。
Pydantic 提供 SecretStr
数据类型。转换为 str 时被 *** 替换(例如打印),实际值可以通过 get_secret_value()
方法获得:
class Foobar(BaseModel):
password: SecretStr
empty_password: SecretStr
# Initialize the model.
f = Foobar(password='1234', empty_password='')
# Assert str and repr are correct.
assert str(f.password) == '**********'
assert str(f.empty_password) == ''
# Assert retrieval of secret value is correct
assert f.password.get_secret_value() == '1234'
assert f.empty_password.get_secret_value() == ''
我正在为某些 user/password 数据模型使用 pydantic。打印模型时,我想用其他内容(例如 ***
)替换密码的值,以防止密码是例如意外写入日志文件或控制台。
from pydantic import BaseModel
class myUserClass(BaseModel):
User = 'foo'
Password = 'bar'
def __str__(self):
return "Hidden parameters."
U = myUserClass()
print(U)
# > Hidden parameters. # Should be User='foo', Password='***' or similar
U # This will still show my password.
#> myUserClass(User='foo', Password='bar')
如何访问正常打印的字符串并仅将 'bar' 替换为 '***',但保留所有参数?
我怎样才能在调用 U
时也这样做?这可能不像日志记录和控制台输出一样重要,通常 print
被调用。
Pydantic 提供 SecretStr
数据类型。转换为 str 时被 *** 替换(例如打印),实际值可以通过 get_secret_value()
方法获得:
class Foobar(BaseModel):
password: SecretStr
empty_password: SecretStr
# Initialize the model.
f = Foobar(password='1234', empty_password='')
# Assert str and repr are correct.
assert str(f.password) == '**********'
assert str(f.empty_password) == ''
# Assert retrieval of secret value is correct
assert f.password.get_secret_value() == '1234'
assert f.empty_password.get_secret_value() == ''