datopy.models.media.IMDbFilm#

pydantic model IMDbFilm[source]#

Bases: BaseModel

Data model for processed imdb metadata.

Example

>>> from pydantic import ValidationError
>>> from datopy.models.media import IMDbFilm
>>> from datopy._examples import imdb_film_retrieve
>>> valid_film = IMDbFilm(
...     title='name 10!', imdb_id='tt1234567', kind='movie',
...     year=1990, rating=7.2, votes=122,
...     genres='romantic comedy, thriller', cast='mrs smith,mr smith',
...     plot='alas! once upon a time, ...',
...     budget_mil=1123929)
>>> invalid_film = dict(
...     title='name', imdb_id='tt12', year=1975, votes=-2, rating=5.0)
>>> try:
...     IMDbFilm(**invalid_film)
... except ValidationError as e:
...     print(e)          # use pprint.pp(e.errors()) for easy-to-read list
3 validation errors for IMDbFilm
imdb_id
  String should match pattern '^tt.*\d{7}$' [type=string_pattern_mismatch, input_value='tt12', input_type=str]
    For further information visit https://errors.pydantic.dev/2.7/v/string_pattern_mismatch
kind
  Field required [type=missing, input_value={'title': 'name', 'imdb_i...tes': -2, 'rating': 5.0}, input_type=dict]
    For further information visit https://errors.pydantic.dev/2.7/v/missing
votes
  Input should be greater than or equal to 0 [type=greater_than_equal, input_value=-2, input_type=int]
    For further information visit https://errors.pydantic.dev/2.7/v/greater_than_equal

Survey available fields and types

>>> import pprint
>>> from datopy.models.media import Film
>>> from datopy._examples import imdb_film_retrieve
>>> from datopy.modeling import apply_recursive
>>> film = imdb_film_retrieve(Film('spirited away'))

Show JSON schema
{
   "title": "IMDbFilm",
   "description": "Data model for processed imdb metadata.\n\n\nExample\n-------\n>>> from pydantic import ValidationError\n>>> from datopy.models.media import IMDbFilm\n>>> from datopy._examples import imdb_film_retrieve\n\n>>> valid_film = IMDbFilm(\n...     title='name 10!', imdb_id='tt1234567', kind='movie',\n...     year=1990, rating=7.2, votes=122,\n...     genres='romantic comedy, thriller', cast='mrs smith,mr smith',\n...     plot='alas! once upon a time, ...',\n...     budget_mil=1123929)\n\n>>> invalid_film = dict(\n...     title='name', imdb_id='tt12', year=1975, votes=-2, rating=5.0)\n>>> try:\n...     IMDbFilm(**invalid_film)\n... except ValidationError as e:\n...     print(e)          # use pprint.pp(e.errors()) for easy-to-read list\n3 validation errors for IMDbFilm\nimdb_id\n  String should match pattern '^tt.*\\d{7}$' [type=string_pattern_mismatch, input_value='tt12', input_type=str]\n    For further information visit https://errors.pydantic.dev/2.7/v/string_pattern_mismatch\nkind\n  Field required [type=missing, input_value={'title': 'name', 'imdb_i...tes': -2, 'rating': 5.0}, input_type=dict]\n    For further information visit https://errors.pydantic.dev/2.7/v/missing\nvotes\n  Input should be greater than or equal to 0 [type=greater_than_equal, input_value=-2, input_type=int]\n    For further information visit https://errors.pydantic.dev/2.7/v/greater_than_equal\n\nSurvey available fields and types\n\n>>> import pprint\n>>> from datopy.models.media import Film\n>>> from datopy._examples import imdb_film_retrieve\n>>> from datopy.modeling import apply_recursive\n>>> film = imdb_film_retrieve(Film('spirited away'))\n\n..\n    # >>> film.keys()\n    # >>> pprint.pp(apply_recursive(lambda x: type(x).__name__, film), depth=3)",
   "type": "object",
   "properties": {
      "title": {
         "description": "Allows numerics",
         "pattern": "^[a-z0-9,.! ]+$",
         "title": "Title",
         "type": "string"
      },
      "imdb_id": {
         "description": "Unique 7-digit IMDb tt identifier",
         "pattern": "^tt.*\\d{7}$",
         "title": "Imdb Id",
         "type": "string"
      },
      "kind": {
         "description": "Retrieved from: `type`",
         "examples": [
            "movie",
            "tv series"
         ],
         "pattern": "^[a-z, ]+$",
         "title": "Kind",
         "type": "string"
      },
      "year": {
         "maximum": 3000,
         "minimum": 1880,
         "title": "Year",
         "type": "integer"
      },
      "rating": {
         "maximum": 10.0,
         "minimum": 0.0,
         "title": "Rating",
         "type": "number"
      },
      "votes": {
         "minimum": 0,
         "title": "Votes",
         "type": "integer"
      },
      "runtime_mins": {
         "default": null,
         "exclusiveMinimum": 0.0,
         "title": "Runtime Mins",
         "type": "number"
      },
      "genres": {
         "default": null,
         "description": "Custom lowercase comma-separated string type. Excludes num and special chars",
         "pattern": "^[a-z, ]+$",
         "title": "Genres",
         "type": "string"
      },
      "countries": {
         "default": null,
         "description": "Custom lowercase comma-separated string type. Excludes num and special chars",
         "pattern": "^[a-z, ]+$",
         "title": "Countries",
         "type": "string"
      },
      "director": {
         "default": null,
         "description": "Custom lowercase comma-separated string type. Excludes num and special chars",
         "pattern": "^[a-z, ]+$",
         "title": "Director",
         "type": "string"
      },
      "writer": {
         "default": null,
         "description": "Custom lowercase comma-separated string type. Excludes num and special chars",
         "pattern": "^[a-z, ]+$",
         "title": "Writer",
         "type": "string"
      },
      "composer": {
         "default": null,
         "description": "Custom lowercase comma-separated string type. Excludes num and special chars",
         "pattern": "^[a-z, ]+$",
         "title": "Composer",
         "type": "string"
      },
      "cast": {
         "default": null,
         "description": "Custom lowercase comma-separated string type. Excludes num and special chars",
         "pattern": "^[a-z, ]+$",
         "title": "Cast",
         "type": "string"
      },
      "plot": {
         "default": null,
         "pattern": "^[a-z0-9,.! ]+$",
         "title": "Plot",
         "type": "string"
      },
      "synopsis": {
         "default": null,
         "pattern": "^[a-z0-9,.! ]+$",
         "title": "Synopsis",
         "type": "string"
      },
      "plot_outline": {
         "default": null,
         "pattern": "^[a-z0-9,.! ]+$",
         "title": "Plot Outline",
         "type": "string"
      },
      "budget_mil": {
         "default": null,
         "description": "Strip $/, & text after first space",
         "minimum": 0.0,
         "title": "Budget Mil",
         "type": "number"
      },
      "opening_weekend_gross_mil": {
         "default": null,
         "minimum": 0.0,
         "title": "Opening Weekend Gross Mil",
         "type": "number"
      },
      "cumulative_worldwide_gross_mil": {
         "default": null,
         "minimum": 0.0,
         "title": "Cumulative Worldwide Gross Mil",
         "type": "number"
      }
   },
   "required": [
      "title",
      "imdb_id",
      "kind",
      "year",
      "rating",
      "votes"
   ]
}