Skip to content

Commit

Permalink
Draft version of pydantic file v2
Browse files Browse the repository at this point in the history
  • Loading branch information
albertoabellagarcia committed Aug 17, 2024
1 parent 78642a0 commit 6839115
Showing 1 changed file with 275 additions and 0 deletions.
275 changes: 275 additions & 0 deletions SMPost/code/code_for_using_pydantic.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,275 @@
from __future__ import annotations

from enum import Enum
from typing import List, Optional, Union

from pydantic import AnyUrl, AwareDatetime, BaseModel, Field, RootModel, constr


class Address(BaseModel):
addressCountry: Optional[str] = Field(
None, description='The country. For example, Spain'
)
addressLocality: Optional[str] = Field(
None,
description='The locality in which the street address is, and which is in the region',
)
addressRegion: Optional[str] = Field(
None,
description='The region in which the locality is, and which is in the country',
)
district: Optional[str] = Field(
None,
description='A district is a type of administrative division that, in some countries, is managed by the local government',
)
postOfficeBoxNumber: Optional[str] = Field(
None,
description='The post office box number for PO box addresses. For example, 03578',
)
postalCode: Optional[str] = Field(
None, description='The postal code. For example, 24004'
)
streetAddress: Optional[str] = Field(None, description='The street address')
streetNr: Optional[str] = Field(
None, description='Number identifying a specific property on a public street'
)


class InteractionType(Enum):
Comment = 'Comment'
Dislike = 'Dislike'
Favorite = 'Favorite'
Like = 'Like'
Quote = 'Quote'
Reactions = 'Reactions'
Reply = 'Reply'
Retweet = 'Retweet'
Shares = 'Shares'
Views = 'Views'


class HasInteractionCountItem(BaseModel):
count: Optional[float] = None
interactionType: Optional[InteractionType] = None


class Type(Enum):
Point = 'Point'


class Location(BaseModel):
bbox: Optional[List[float]] = Field(None, min_length=4)
coordinates: List[float] = Field(..., min_length=2)
type: Type


class Coordinate(RootModel[List[float]]):
root: List[float]


class Type1(Enum):
LineString = 'LineString'


class Location1(BaseModel):
bbox: Optional[List[float]] = Field(None, min_length=4)
coordinates: List[Coordinate] = Field(..., min_length=2)
type: Type1


class Type2(Enum):
Polygon = 'Polygon'


class Location2(BaseModel):
bbox: Optional[List[float]] = Field(None, min_length=4)
coordinates: List[List[Coordinate]]
type: Type2


class Type3(Enum):
MultiPoint = 'MultiPoint'


class Location3(BaseModel):
bbox: Optional[List[float]] = Field(None, min_length=4)
coordinates: List[List[float]]
type: Type3


class Type4(Enum):
MultiLineString = 'MultiLineString'


class Location4(BaseModel):
bbox: Optional[List[float]] = Field(None, min_length=4)
coordinates: List[List[Coordinate]]
type: Type4


class Type5(Enum):
MultiPolygon = 'MultiPolygon'


class Location5(BaseModel):
bbox: Optional[List[float]] = Field(None, min_length=4)
coordinates: List[List[List[Coordinate]]]
type: Type5


class Type6(Enum):
SMPost = 'SMPost'


class SMPost(BaseModel):
address: Optional[Address] = Field(None, description='The mailing address')
alternateName: Optional[str] = Field(
None, description='An alternative name for this item'
)
areaServed: Optional[str] = Field(
None,
description='The geographic area where a service or offered item is provided',
)
belongsToCollection: Optional[
List[
Union[
constr(
pattern=r'^[\\w\\-\\.\\{\\}\\$\\+\\*\\[\\]`|~^@!,:\\\\]+$',
min_length=1,
max_length=256,
),
AnyUrl,
]
]
] = Field(
None, description='The IDs of the SMCollections, which this post is a part of'
)
createdBy: Optional[
Union[
constr(
pattern=r'^[\\w\\-\\.\\{\\}\\$\\+\\*\\[\\]`|~^@!, :\\\\]+$',
min_length=1,
max_length=256,
),
AnyUrl,
]
] = Field(None, description='The ID of the SMUser that created this post')
dataProvider: Optional[str] = Field(
None,
description='A sequence of characters identifying the provider of the harmonised data entity',
)
dateCreated: Optional[AwareDatetime] = Field(
None,
description='Entity creation timestamp. This will usually be allocated by the storage platform',
)
dateModified: Optional[AwareDatetime] = Field(
None,
description='Timestamp of the last modification of the entity. This will usually be allocated by the storage platform',
)
description: Optional[str] = Field(None, description='A description of this item')
hasAnalysis: Optional[
List[
Union[
constr(
pattern=r'^[\\w\\-\\.\\{\\}\\$\\+\\*\\[\\]`|~^@!,:\\\\]+$',
min_length=1,
max_length=256,
),
AnyUrl,
]
]
] = Field(None, description='The IDs of the SMAnalyses that analyze this post')
hasHashtags: Optional[List[str]] = Field(
None, description='The hashtags of the post'
)
hasImages: Optional[List[str]] = Field(
None, description='The URLs of the content that is in image form'
)
hasInteractionCount: Optional[List[HasInteractionCountItem]] = Field(
None, description='The different interactions of this post'
)
hasLanguage: Optional[str] = Field(None, description='The language of the post')
hasMentions: Optional[
List[
Union[
constr(
pattern=r'^[\\w\\-\\.\\{\\}\\$\\+\\*\\[\\]`|~^@!,:\\\\]+$',
min_length=1,
max_length=256,
),
AnyUrl,
]
]
] = Field(None, description='The IDs of the SMUsers mentioned in this post')
hasPostURL: Optional[str] = Field(None, description='The URL of the post')
hasPrivacyLevel: Optional[str] = Field(
None, description='The privacy setting of the post'
)
hasReferencedLocations: Optional[
List[
Union[
constr(
pattern=r'^[\\w\\-\\.\\{\\}\\$\\+\\*\\[\\]`|~^@!,:\\\\]+$',
min_length=1,
max_length=256,
),
AnyUrl,
]
]
] = Field(None, description='The IDs of the locations referenced in this post')
hasText: Optional[List[str]] = Field(
None, description='The content that is in textual form'
)
hasThumbnails: Optional[List[str]] = Field(
None, description='The thumbnail URLs of the post'
)
hasVideos: Optional[List[str]] = Field(
None, description='The URLs of the content that is in video form'
)
id: Optional[
Union[
constr(
pattern=r'^[\\w\\-\\.\\{\\}\\$\\+\\*\\[\\]`|~^@!, :\\\\]+$',
min_length=1,
max_length=256,
),
AnyUrl,
]
] = Field(None, description='Unique identifier of the entity')
location: Optional[
Union[Location, Location1, Location2, Location3, Location4, Location5]
] = Field(
None,
description='Geojson reference to the item. It can be Point, LineString, Polygon, MultiPoint, MultiLineString or MultiPolygon',
)
name: Optional[str] = Field(None, description='The name of this item')
owner: Optional[
List[
Union[
constr(
pattern=r'^[\\w\\-\\.\\{\\}\\$\\+\\*\\[\\]`|~^@!,:\\\\]+$',
min_length=1,
max_length=256,
),
AnyUrl,
]
]
] = Field(
None,
description='A List containing a JSON encoded sequence of characters referencing the unique Ids of the owner(s)',
)
platform: Optional[str] = Field(None, description='Platform of post')
postCreatedAt: Optional[AwareDatetime] = Field(
None, description='The datetime of the creation of the SMPost'
)
postId: Optional[str] = Field(None, description='The post ID of the SMPost')
seeAlso: Optional[Union[List[AnyUrl], AnyUrl]] = Field(
None, description='list of uri pointing to additional resources about the item'
)
source: Optional[str] = Field(
None,
description='A sequence of characters giving the original source of the entity data as a URL. Recommended to be the fully qualified domain name of the source provider, or the URL to the source object',
)
type: Optional[Type6] = Field(
None, description='NGSI-LD Entity Type. It must be equal to SMPost'
)

0 comments on commit 6839115

Please sign in to comment.