Network Types
ネットワークモジュールには、一般的なネットワーク関連フィールドのタイプが含まれています。
AnyUrl
module-attribute
¶
AnyUrl = Url
すべてのURLの基本タイプ。
- 任意のスキームを使用可能です。
- トップレベルドメイン(TLD)は不要です。
- ホストは必要です。
入力URLがhttp://samuel:pass@example.com:8000/the/path/?query=here#fragment=is;this=bit
の場合、型は次のプロパティをエクスポートします。
-scheme
: URLスキーム(http
)が常に設定されます。
-host
: URLホスト(example.com
)で、常に設定されます。
-username
: オプションのユーザ名(samuel
)がある場合。
-password
: オプションのパスワード(pass
)がある場合。
-port
: オプションのポート(8000
)です。
-path
: オプションのパス(/the/path/
)。
-query
: オプションのURLクエリ(例えばGET
引数やquery=here
のような"search string")。
-fragment
: オプションのfragment(fragment=is;this=bit
)。
AnyHttpUrl
module-attribute
¶
AnyHttpUrl = Annotated[
Url, UrlConstraints(allowed_schemes=["http", "https"])
]
任意のhttpまたはhttps URLを受け入れるタイプ。
- TLDは不要です。
- ホストが必要です。
HttpUrl
module-attribute
¶
HttpUrl = Annotated[
Url,
UrlConstraints(
max_length=2083, allowed_schemes=["http", "https"]
),
]
任意のhttpまたはhttps URLを受け入れるタイプ。
- TLDは不要です。
- ホストが必要です。
- 最大長2083です。
from pydantic import BaseModel, HttpUrl, ValidationError
class MyModel(BaseModel):
url: HttpUrl
m = MyModel(url='http://www.example.com') # (1)!
print(m.url)
#> http://www.example.com/
try:
MyModel(url='ftp://invalid.url')
except ValidationError as e:
print(e)
'''
1 validation error for MyModel
url
URL scheme should be 'http' or 'https' [type=url_scheme, input_value='ftp://invalid.url', input_type=str]
'''
try:
MyModel(url='not a url')
except ValidationError as e:
print(e)
'''
1 validation error for MyModel
url
Input should be a valid URL, relative URL without a base [type=url_parsing, input_value='not a url', input_type=str]
'''
- 注意:mypyは
m=MyModel(url=HttpUrl('http://www.example.com'))
を好みますが、いずれにせよPydanticは文字列をHttpUrlインスタンスに変換します。
「International domains」(たとえば、ホストまたはTLDに非ASCII文字が含まれるURL)は、punycodeによってエンコードされます(これが重要である理由の適切な説明については、this articleを参照してください)。
from pydantic import BaseModel, HttpUrl
class MyModel(BaseModel):
url: HttpUrl
m1 = MyModel(url='http://puny£code.com')
print(m1.url)
#> http://xn--punycode-eja.com/
m2 = MyModel(url='https://www.аррӏе.com/')
print(m2.url)
#> https://www.xn--80ak6aa92e.com/
m3 = MyModel(url='https://www.example.珠宝/')
print(m3.url)
#> https://www.example.xn--pbt977c/
Underscores in Hostnames
Pydanticでは、TLDを除くドメインのすべての部分でアンダースコアを使用できます。 技術的には、これは間違っている可能性があります。理論的には、ホスト名にアンダースコアを付けることはできませんが、サブドメインにはアンダースコアを付けることができます。
これを説明するために、次の2つのケースを考えてみましょう。
exam_ple.co.uk
:ホスト名はexam_ple
ですが、アンダースコアが含まれているため許可されません。foo_bar.example.com
ホスト名はexample
です。アンダースコアはサブドメインにあるので、これは許可されるべきです。
TLDの網羅的なリストがなければ、これら2つを区別することは不可能であろう。したがって、アンダースコアは使用できますが、必要に応じていつでもバリデータでさらに検証を行うことができます。
また、Chrome、Firefox、Safariは現在、URLとしてhttp://exam_ple.com
を受け入れているので、私たちは良い(あるいは少なくとも大きな)会社にいます。
AnyWebsocketUrl
module-attribute
¶
AnyWebsocketUrl = Annotated[
Url, UrlConstraints(allowed_schemes=["ws", "wss"])
]
任意のwsまたはwss URLを受け入れるタイプ。
- TLDは不要です。
- ホストが必要です。
WebsocketUrl
module-attribute
¶
WebsocketUrl = Annotated[
Url,
UrlConstraints(
max_length=2083, allowed_schemes=["ws", "wss"]
),
]
任意のwsまたはwss URLを受け入れるタイプ。
- TLDは不要です。
- ホストが必要です。
- 最大長2083です。
FileUrl
module-attribute
¶
FileUrl = Annotated[
Url, UrlConstraints(allowed_schemes=["file"])
]
任意のファイルURLを受け入れるタイプ。
- ホストは不要です。
FtpUrl
module-attribute
¶
FtpUrl = Annotated[
Url, UrlConstraints(allowed_schemes=["ftp"])
]
ftp URLを受け入れるタイプ。
- TLDは不要です。
- ホストが必要です。
PostgresDsn
module-attribute
¶
PostgresDsn = Annotated[
MultiHostUrl,
UrlConstraints(
host_required=True,
allowed_schemes=[
"postgres",
"postgresql",
"postgresql+asyncpg",
"postgresql+pg8000",
"postgresql+psycopg",
"postgresql+psycopg2",
"postgresql+psycopg2cffi",
"postgresql+py-postgresql",
"postgresql+pygresql",
],
),
]
任意のPostgres DSNを受け入れるタイプ。
- ユーザー情報が必要です。
- TLDは不要です。
- ホストが必要です。
- 複数のホストをサポート
さらに検証が必要な場合は、これらのプロパティをバリデータで使用して、特定の動作を強制できます。
from pydantic import (
BaseModel,
HttpUrl,
PostgresDsn,
ValidationError,
field_validator,
)
class MyModel(BaseModel):
url: HttpUrl
m = MyModel(url='http://www.example.com')
# the repr() method for a url will display all properties of the url
print(repr(m.url))
#> Url('http://www.example.com/')
print(m.url.scheme)
#> http
print(m.url.host)
#> www.example.com
print(m.url.port)
#> 80
class MyDatabaseModel(BaseModel):
db: PostgresDsn
@field_validator('db')
def check_db_name(cls, v):
assert v.path and len(v.path) > 1, 'database must be provided'
return v
m = MyDatabaseModel(db='postgres://user:pass@localhost:5432/foobar')
print(m.db)
#> postgres://user:pass@localhost:5432/foobar
try:
MyDatabaseModel(db='postgres://user:pass@localhost:5432')
except ValidationError as e:
print(e)
'''
1 validation error for MyDatabaseModel
db
Assertion failed, database must be provided
assert (None)
+ where None = MultiHostUrl('postgres://user:pass@localhost:5432').path [type=assertion_error, input_value='postgres://user:pass@localhost:5432', input_type=str]
'''
CockroachDsn
module-attribute
¶
CockroachDsn = Annotated[
Url,
UrlConstraints(
host_required=True,
allowed_schemes=[
"cockroachdb",
"cockroachdb+psycopg2",
"cockroachdb+asyncpg",
],
),
]
任意のCockroach DSNを受け入れるタイプ。
- ユーザー情報が必要です。
- TLDは不要です。
- ホストが必要です。
AmqpDsn
module-attribute
¶
AmqpDsn = Annotated[
Url, UrlConstraints(allowed_schemes=["amqp", "amqps"])
]
任意のAMQP DSNを受け入れるタイプ。
- ユーザー情報が必要です。
- TLDは不要です。
- ホストが必要です。
RedisDsn
module-attribute
¶
RedisDsn = Annotated[
Url,
UrlConstraints(
allowed_schemes=["redis", "rediss"],
default_host="localhost",
default_port=6379,
default_path="/0",
),
]
任意のRedis DSNを受け入れるタイプ。
- ユーザー情報が必要です。
- TLDは不要です。
- ホストが必要です。(例:
rediss://:pass@localhost
)
MongoDsn
module-attribute
¶
MongoDsn = Annotated[
MultiHostUrl,
UrlConstraints(
allowed_schemes=["mongodb", "mongodb+srv"],
default_port=27017,
),
]
任意のMongoDB DSNを受け入れる型。
- ユーザー情報は必要ありません
- データベース名は必要ありません
- ポートは不要です。
- ユーザ情報はユーザパートなしで渡すことができます(例:
mongodb://mongodb0.example.com:27017
)。
KafkaDsn
module-attribute
¶
KafkaDsn = Annotated[
Url,
UrlConstraints(
allowed_schemes=["kafka"],
default_host="localhost",
default_port=9092,
),
]
任意のKafka DSNを受け入れるタイプ。
- ユーザー情報が必要です。
- TLDは不要です。
- ホストが必要です。
NatsDsn
module-attribute
¶
NatsDsn = Annotated[
MultiHostUrl,
UrlConstraints(
allowed_schemes=["nats", "tls", "ws"],
default_host="localhost",
default_port=4222,
),
]
任意のNATS DSNを受け入れるタイプ。
NATSは、ますます高度に接続される世界のために構築された接続技術です。 これは、オンプレミス、エッジ、ウェブとモバイル、デバイスなど、クラウドベンダーのあらゆる組み合わせにわたって、アプリケーションが安全に通信できるようにする単一のテクノロジーです。 詳細:https://nats.io
MySQLDsn
module-attribute
¶
MySQLDsn = Annotated[
Url,
UrlConstraints(
allowed_schemes=[
"mysql",
"mysql+mysqlconnector",
"mysql+aiomysql",
"mysql+asyncmy",
"mysql+mysqldb",
"mysql+pymysql",
"mysql+cymysql",
"mysql+pyodbc",
],
default_port=3306,
),
]
任意のMySQL DSNを受け入れるタイプ。
- ユーザー情報が必要です。。
- TLDは不要です。
- ホストが必要です。
MariaDBDsn
module-attribute
¶
MariaDBDsn = Annotated[
Url,
UrlConstraints(
allowed_schemes=[
"mariadb",
"mariadb+mariadbconnector",
"mariadb+pymysql",
],
default_port=3306,
),
]
任意のMariaDB DSNを受け入れるタイプ。
- ユーザー情報が必要です。
- TLDは不要です。
- ホストが必要です。
ClickHouseDsn
module-attribute
¶
ClickHouseDsn = Annotated[
Url,
UrlConstraints(
allowed_schemes=[
"clickhouse+native",
"clickhouse+asynch",
],
default_host="localhost",
default_port=9000,
),
]
A type that will accept any ClickHouse DSN.
- ユーザー情報が必要です。
- TLDは不要です。
- ホストが必要です。
MAX_EMAIL_LENGTH
module-attribute
¶
MAX_EMAIL_LENGTH = 2048
電子メールの最大長。 ほとんどの実装で許可されている数と比較して、多少任意ですが非常に寛大な数です。
UrlConstraints
dataclass
¶
UrlConstraints(
max_length: int | None = None,
allowed_schemes: list[str] | None = None,
host_required: bool | None = None,
default_host: str | None = None,
default_port: int | None = None,
default_path: str | None = None,
)
Bases: PydanticMetadata
URLの制約。
Attributes:
Name | Type | Description |
---|---|---|
max_length |
int | None
|
URLの最大長。デフォルトは |
allowed_schemes |
list[str] | None
|
許可されたスキーマ。デフォルトは |
host_required |
bool | None
|
ホストが必要です。かどうか。デフォルトは |
default_host |
str | None
|
デフォルトのホスト。デフォルトは |
default_port |
int | None
|
デフォルトのポート。デフォルトは |
default_path |
str | None
|
デフォルトのパス。デフォルトは |
EmailStr ¶
電子メールアドレスを検証します。
from pydantic import BaseModel, EmailStr
class Model(BaseModel):
email: EmailStr
print(Model(email='contact@mail.com'))
#> email='contact@mail.com'
NameEmail ¶
Bases: Representation
RFC 5322で指定されているように、名前と電子メールアドレスの組み合わせを検証します。
NameEmail
にはname
とemail
という2つの属性があります。
name
が指定されていない場合は、メールアドレスから推測されます。
from pydantic import BaseModel, NameEmail
class User(BaseModel):
email: NameEmail
user = User(email='Fred Bloggs <fred.bloggs@example.com>')
print(user.email)
#> Fred Bloggs <fred.bloggs@example.com>
print(user.email.name)
#> Fred Bloggs
user = User(email='fred.bloggs@example.com')
print(user.email)
#> fred.bloggs <fred.bloggs@example.com>
print(user.email.name)
#> fred.bloggs
Source code in pydantic/networks.py
489 490 491 |
|
IPvAnyAddress ¶
IPv4またはIPv6アドレスを検証します。
from pydantic import BaseModel
from pydantic.networks import IPvAnyAddress
class IpModel(BaseModel):
ip: IPvAnyAddress
print(IpModel(ip='127.0.0.1'))
#> ip=IPv4Address('127.0.0.1')
try:
IpModel(ip='http://www.example.com')
except ValueError as e:
print(e.errors())
'''
[
{
'type': 'ip_any_address',
'loc': ('ip',),
'msg': 'value is not a valid IPv4 or IPv6 address',
'input': 'http://www.example.com',
}
]
'''
IPvAnyInterface ¶
IPv4またはIPv6インターフェイスを検証します。
IPvAnyNetwork ¶
IPv4またはIPv6ネットワークを検証します。
validate_email ¶
email-validatorを使用した電子メールアドレスの検証。
Note
Note that:
- 生のIPアドレス(リテラル)ドメイン部分は許可されません。
"John Doe<local_part@domain.com>"
スタイルの"pretty"電子メールアドレスが処理されます。- スペースはアドレスの先頭と末尾からストライプされますが、エラーは発生しません。
Source code in pydantic/networks.py
711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 |
|