[27] add tmdb_region

pull/811/head
meisnate12 3 years ago
parent 9a1a1adf33
commit c12aa54fec

@ -1 +1 @@
1.16.2-develop26 1.16.2-develop27

@ -161,7 +161,7 @@ The default and recommended path is `/config/<<MAPPING_NAME>>_missing.yml` where
```yaml ```yaml
libraries: libraries:
Movies: Movies:
missing_path: /config/Movies_movies.yml missing_path: /config/Movies_missing.yml
``` ```
Alternatively, "missing items" YAML files can be placed in their own directory, as below: Alternatively, "missing items" YAML files can be placed in their own directory, as below:

@ -11,10 +11,11 @@ tmdb:
language: en language: en
``` ```
| Attribute | Allowed Values | Default | Required | | Attribute | Allowed Values | Default | Required |
|:-------------------|:--------------------------------------------------------------------------|:-------:|:--------:| |:-------------------|:----------------------------------------------------------------------------------------------------------|:-------:|:--------:|
| `apikey` | User TMDb V3 API Key | N/A | &#9989; | | `apikey` | User TMDb V3 API Key | N/A | &#9989; |
| `language` | User Language | en | &#10060; | | `language` | [ISO 639-1 Code](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) of the User Language | en | &#10060; |
| `cache_expiration` | Number of days before each cache mapping expires and has to be re-cached. | 60 | &#10060; | | `region` | [ISO 3166-1 Code](https://en.wikipedia.org/wiki/ISO_3166-1#Current_codes) of the User Region for Searches | None | &#10060; |
| `cache_expiration` | Number of days before each cache mapping expires and has to be re-cached. | 60 | &#10060; |
If you do not have a TMDb V3 API key please refer to this [guide](https://developers.themoviedb.org/3/getting-started/introduction). If you do not have a TMDb V3 API key please refer to this [guide](https://developers.themoviedb.org/3/getting-started/introduction).

@ -39,6 +39,9 @@ You can find items using the features of [TheMovieDb.org](https://www.themoviedb
| [`tmdb_popular`](#tmdb-popular) | Finds the movies/shows in TMDb's [Popular Movies](https://www.themoviedb.org/movie)/[Popular Shows](https://www.themoviedb.org/tv) list | &#9989; | &#9989; | &#9989; | | [`tmdb_popular`](#tmdb-popular) | Finds the movies/shows in TMDb's [Popular Movies](https://www.themoviedb.org/movie)/[Popular Shows](https://www.themoviedb.org/tv) list | &#9989; | &#9989; | &#9989; |
| [`tmdb_now_playing`](#tmdb-now-playing) | Finds the movies in TMDb's [Now Playing](https://www.themoviedb.org/movie/now-playing) list | &#9989; | &#10060; | &#9989; | | [`tmdb_now_playing`](#tmdb-now-playing) | Finds the movies in TMDb's [Now Playing](https://www.themoviedb.org/movie/now-playing) list | &#9989; | &#10060; | &#9989; |
| [`tmdb_top_rated`](#tmdb-top-rated) | Finds the movies/shows in TMDb's [Top Rated Movies](https://www.themoviedb.org/movie/top-rated)/[Top Rated Shows](https://www.themoviedb.org/tv/top-rated) list | &#9989; | &#9989; | &#9989; | | [`tmdb_top_rated`](#tmdb-top-rated) | Finds the movies/shows in TMDb's [Top Rated Movies](https://www.themoviedb.org/movie/top-rated)/[Top Rated Shows](https://www.themoviedb.org/tv/top-rated) list | &#9989; | &#9989; | &#9989; |
| [`tmdb_upcoming`](#tmdb-upcoming) | Finds the movies in TMDb's [Upcoming Movies](https://www.themoviedb.org/movie/upcoming) list | &#9989; | &#10060; | &#9989; |
| [`tmdb_airing_today`](#tmdb-airing-today) | Finds the shows in TMDb's [Airing Today Shows](https://www.themoviedb.org/tv/airing-today) list | &#10060; | &#9989; | &#9989; |
| [`tmdb_on_the_air`](#tmdb-on-the-air) | Finds the shows in TMDb's [On TV Shows](https://www.themoviedb.org/tv/on-the-air) list | &#10060; | &#9989; | &#9989; |
| [`tmdb_trending_daily`](#tmdb-trending-daily) | Finds the movies/shows in TMDb's Trending Daily list | &#9989; | &#9989; | &#9989; | | [`tmdb_trending_daily`](#tmdb-trending-daily) | Finds the movies/shows in TMDb's Trending Daily list | &#9989; | &#9989; | &#9989; |
| [`tmdb_trending_weekly`](#tmdb-trending-weekly) | Finds the movies/shows in TMDb's Trending Weekly list | &#9989; | &#9989; | &#9989; | | [`tmdb_trending_weekly`](#tmdb-trending-weekly) | Finds the movies/shows in TMDb's Trending Weekly list | &#9989; | &#9989; | &#9989; |
| [`tmdb_discover`](#tmdb-discover) | Uses [TMDb's Discover Search](https://www.themoviedb.org/documentation/api/discover) to find every movie/show based on the [movie search parameters](https://developers.themoviedb.org/3/discover/movie-discover) or [show search parameters](https://developers.themoviedb.org/3/discover/tv-discover) provided | &#9989; | &#9989; | &#9989; | | [`tmdb_discover`](#tmdb-discover) | Uses [TMDb's Discover Search](https://www.themoviedb.org/documentation/api/discover) to find every movie/show based on the [movie search parameters](https://developers.themoviedb.org/3/discover/movie-discover) or [show search parameters](https://developers.themoviedb.org/3/discover/tv-discover) provided | &#9989; | &#9989; | &#9989; |
@ -295,6 +298,8 @@ collections:
Finds the movies/shows in TMDb's [Popular Movies](https://www.themoviedb.org/movie)/[Popular Shows](https://www.themoviedb.org/tv) list. Finds the movies/shows in TMDb's [Popular Movies](https://www.themoviedb.org/movie)/[Popular Shows](https://www.themoviedb.org/tv) list.
Use `tmdb_region` with this builder to set the region.
The `sync_mode: sync` and `collection_order: custom` Details are recommended since the lists are continuously updated and in a specific order. The `sync_mode: sync` and `collection_order: custom` Details are recommended since the lists are continuously updated and in a specific order.
```yaml ```yaml
@ -309,6 +314,8 @@ collections:
Finds the movies in TMDb's [Now Playing](https://www.themoviedb.org/movie/now-playing) list. Finds the movies in TMDb's [Now Playing](https://www.themoviedb.org/movie/now-playing) list.
Use `tmdb_region` with this builder to set the region.
The `sync_mode: sync` and `collection_order: custom` Details are recommended since the lists are continuously updated and in a specific order. The `sync_mode: sync` and `collection_order: custom` Details are recommended since the lists are continuously updated and in a specific order.
```yaml ```yaml
@ -323,6 +330,8 @@ collections:
Finds the movies/shows in TMDb's [Top Rated Movies](https://www.themoviedb.org/movie/top-rated)/[Top Rated Shows](https://www.themoviedb.org/tv/top-rated) list. Finds the movies/shows in TMDb's [Top Rated Movies](https://www.themoviedb.org/movie/top-rated)/[Top Rated Shows](https://www.themoviedb.org/tv/top-rated) list.
Use `tmdb_region` with this builder to set the region.
The `sync_mode: sync` and `collection_order: custom` Details are recommended since the lists are continuously updated and in a specific order. The `sync_mode: sync` and `collection_order: custom` Details are recommended since the lists are continuously updated and in a specific order.
```yaml ```yaml
@ -333,6 +342,50 @@ collections:
sync_mode: sync sync_mode: sync
``` ```
## TMDb Upcoming
Finds the movies in TMDb's [Upcoming Movies](https://www.themoviedb.org/movie/upcoming) list.
Use `tmdb_region` with this builder to set the region.
The `sync_mode: sync` and `collection_order: custom` Details are recommended since the lists are continuously updated and in a specific order.
```yaml
collections:
TMDb Upcoming:
tmdb_upcoming: 30
collection_order: custom
sync_mode: sync
```
## TMDb Airing Today
Finds the shows in TMDb's [Airing Today Shows](https://www.themoviedb.org/tv/airing-today) list.
The `sync_mode: sync` and `collection_order: custom` Details are recommended since the lists are continuously updated and in a specific order.
```yaml
collections:
TMDb Airing Today:
tmdb_airing_today: 30
collection_order: custom
sync_mode: sync
```
## TMDb On the Air
Finds the shows in TMDb's [On TV Shows](https://www.themoviedb.org/tv/on-the-air) list.
The `sync_mode: sync` and `collection_order: custom` Details are recommended since the lists are continuously updated and in a specific order.
```yaml
collections:
TMDb On the Air:
tmdb_on_the_air: 30
collection_order: custom
sync_mode: sync
```
## TMDb Trending Daily ## TMDb Trending Daily
Finds the movies/shows in TMDb's Trending Daily list. Finds the movies/shows in TMDb's Trending Daily list.

@ -12,6 +12,7 @@ All the following attributes serve various functions as how the collection/playl
| `minimum_items` | **Description:** Minimum items that must be found to add to a collection/playlist.<br>**Default:** `minimum_items` [settings value](../../config/settings) in the Configuration File<br>**Values:** number greater then 0 | | `minimum_items` | **Description:** Minimum items that must be found to add to a collection/playlist.<br>**Default:** `minimum_items` [settings value](../../config/settings) in the Configuration File<br>**Values:** number greater then 0 |
| `delete_below_minimum` | **Description:** Deletes the collection/playlist if below the minimum.<br>**Default:** `delete_below_minimum` [settings value](../../config/settings) in the Configuration File<br>**Values:** `true` or `false` | | `delete_below_minimum` | **Description:** Deletes the collection/playlist if below the minimum.<br>**Default:** `delete_below_minimum` [settings value](../../config/settings) in the Configuration File<br>**Values:** `true` or `false` |
| `delete_not_scheduled` | **Description:** Deletes the collection/playlist if its skipped because its not scheduled.<br>**Default:** `delete_not_scheduled` [settings value](../../config/settings) in the Configuration File<br>**Values:** `true` or `false` | | `delete_not_scheduled` | **Description:** Deletes the collection/playlist if its skipped because its not scheduled.<br>**Default:** `delete_not_scheduled` [settings value](../../config/settings) in the Configuration File<br>**Values:** `true` or `false` |
| `tmdb_region` | **Description:** Sets the region for `tmdb_popular`, `tmdb_now_playing`, `tmdb_top_rated`, and `tmdb_upcoming` |
| `validate_builders` | **Description:** When set to false the collection/playlist will not fail if one builder fails.<br>**Default:** `true`<br>**Values:** `true` or `false` | | `validate_builders` | **Description:** When set to false the collection/playlist will not fail if one builder fails.<br>**Default:** `true`<br>**Values:** `true` or `false` |
| `cache_builders` | **Description:** Caches the items found by the builders for a number of days. This is useful if you run the same configuration on multiple libraries/servers in one run just set the value to `1`.<br>**Default:** `0` <br>**Values:** number 0 or greater | | `cache_builders` | **Description:** Caches the items found by the builders for a number of days. This is useful if you run the same configuration on multiple libraries/servers in one run just set the value to `1`.<br>**Default:** `0` <br>**Values:** number 0 or greater |
| `blank_collection` | **Description:** When set to true the collection will be created with no builders and no items added.<br>**Default:** `false`<br>**Values:** `true` or `false` | | `blank_collection` | **Description:** When set to true the collection will be created with no builders and no items added.<br>**Default:** `false`<br>**Values:** `true` or `false` |

@ -100,8 +100,10 @@ ignored_details = [
"delete_not_scheduled", "tmdb_person", "build_collection", "collection_order", "collection_level", "delete_not_scheduled", "tmdb_person", "build_collection", "collection_order", "collection_level",
"validate_builders", "libraries", "sync_to_users", "collection_name", "playlist_name", "name", "blank_collection" "validate_builders", "libraries", "sync_to_users", "collection_name", "playlist_name", "name", "blank_collection"
] ]
details = ["ignore_ids", "ignore_imdb_ids", "server_preroll", "changes_webhooks", "collection_mode", "limit", "url_theme", "file_theme", details = [
"minimum_items", "label", "album_sorting", "cache_builders"] + boolean_details + scheduled_boolean + string_details "ignore_ids", "ignore_imdb_ids", "server_preroll", "changes_webhooks", "collection_mode", "limit", "url_theme",
"file_theme", "minimum_items", "label", "album_sorting", "cache_builders", "tmdb_region"
] + boolean_details + scheduled_boolean + string_details
collectionless_details = ["collection_order", "plex_collectionless", "label", "label_sync_mode", "test"] + \ collectionless_details = ["collection_order", "plex_collectionless", "label", "label_sync_mode", "test"] + \
poster_details + background_details + summary_details + string_details poster_details + background_details + summary_details + string_details
item_false_details = ["item_lock_background", "item_lock_poster", "item_lock_title"] item_false_details = ["item_lock_background", "item_lock_poster", "item_lock_title"]
@ -303,6 +305,7 @@ class CollectionBuilder:
self.limit = 0 self.limit = 0
self.beginning_count = 0 self.beginning_count = 0
self.minimum = self.library.minimum_items self.minimum = self.library.minimum_items
self.tmdb_region = None
self.ignore_ids = [i for i in self.library.ignore_ids] self.ignore_ids = [i for i in self.library.ignore_ids]
self.ignore_imdb_ids = [i for i in self.library.ignore_imdb_ids] self.ignore_imdb_ids = [i for i in self.library.ignore_imdb_ids]
self.server_preroll = None self.server_preroll = None
@ -784,6 +787,8 @@ class CollectionBuilder:
self.file_theme = os.path.abspath(method_data) self.file_theme = os.path.abspath(method_data)
else: else:
logger.error(f"{self.Type} Error: Theme Path Does Not Exist: {os.path.abspath(method_data)}") logger.error(f"{self.Type} Error: Theme Path Does Not Exist: {os.path.abspath(method_data)}")
elif method_name == "tmdb_region":
self.tmdb_region = util.parse(self.Type, method_name, str(method_data).upper(), options=self.config.TMDb.iso_3166_1)
elif method_name == "collection_mode": elif method_name == "collection_mode":
self.details[method_name] = util.check_collection_mode(method_data) self.details[method_name] = util.check_collection_mode(method_data)
elif method_name == "minimum_items": elif method_name == "minimum_items":
@ -1355,7 +1360,7 @@ class CollectionBuilder:
elif "mdblist" in method: elif "mdblist" in method:
ids = self.config.Mdblist.get_imdb_ids(method, value) ids = self.config.Mdblist.get_imdb_ids(method, value)
elif "tmdb" in method: elif "tmdb" in method:
ids = self.config.TMDb.get_tmdb_ids(method, value, self.library.is_movie) ids = self.config.TMDb.get_tmdb_ids(method, value, self.library.is_movie, self.tmdb_region)
elif "trakt" in method: elif "trakt" in method:
ids = self.config.Trakt.get_trakt_ids(method, value, self.library.is_movie) ids = self.config.Trakt.get_trakt_ids(method, value, self.library.is_movie)
else: else:

@ -381,6 +381,7 @@ class ConfigFile:
"language": check_for_attribute(self.data, "language", parent="tmdb", default="en"), "language": check_for_attribute(self.data, "language", parent="tmdb", default="en"),
"expiration": check_for_attribute(self.data, "cache_expiration", parent="tmdb", var_type="int", default=60) "expiration": check_for_attribute(self.data, "cache_expiration", parent="tmdb", var_type="int", default=60)
}) })
self.TMDb.region = check_for_attribute(self.data, "region", parent="tmdb", test_list=self.TMDb.iso_3166_1, default_is_none=True)
logger.info(f"TMDb Connection {'Failed' if self.TMDb is None else 'Successful'}") logger.info(f"TMDb Connection {'Failed' if self.TMDb is None else 'Successful'}")
else: else:
raise Failed("Config Error: tmdb attribute not found") raise Failed("Config Error: tmdb attribute not found")

@ -151,12 +151,14 @@ class TMDb:
self.config = config self.config = config
self.apikey = params["apikey"] self.apikey = params["apikey"]
self.language = params["language"] self.language = params["language"]
self.region = None
self.expiration = params["expiration"] self.expiration = params["expiration"]
logger.secret(self.apikey) logger.secret(self.apikey)
try: try:
self.TMDb = TMDbAPIs(self.apikey, language=self.language, session=self.config.session) self.TMDb = TMDbAPIs(self.apikey, language=self.language, session=self.config.session)
except TMDbException as e: except TMDbException as e:
raise Failed(f"TMDb Error: {e}") raise Failed(f"TMDb Error: {e}")
self.iso_3166_1 = [i.upper() for i in self.TMDb._iso_3166_1]
def convert_from(self, tmdb_id, convert_to, is_movie): def convert_from(self, tmdb_id, convert_to, is_movie):
item = self.get_movie(tmdb_id) if is_movie else self.get_show(tmdb_id) item = self.get_movie(tmdb_id) if is_movie else self.get_show(tmdb_id)
@ -255,7 +257,9 @@ class TMDb:
elif tmdb_type == "List": self.get_list(tmdb_id) elif tmdb_type == "List": self.get_list(tmdb_id)
return tmdb_id return tmdb_id
def get_tmdb_ids(self, method, data, is_movie): def get_tmdb_ids(self, method, data, is_movie, region):
if not region and self.region:
region = self.region
pretty = method.replace("_", " ").title().replace("Tmdb", "TMDb") pretty = method.replace("_", " ").title().replace("Tmdb", "TMDb")
media_type = "Movie" if is_movie else "Show" media_type = "Movie" if is_movie else "Show"
result_type = "tmdb" if is_movie else "tmdb_show" result_type = "tmdb" if is_movie else "tmdb_show"
@ -286,13 +290,13 @@ class TMDb:
logger.info(f" {attr}: {value}") logger.info(f" {attr}: {value}")
elif method in int_builders: elif method in int_builders:
if method == "tmdb_popular": if method == "tmdb_popular":
results = self.TMDb.popular_movies() if is_movie else self.TMDb.popular_tv() results = self.TMDb.popular_movies(region=region) if is_movie else self.TMDb.popular_tv()
elif method == "tmdb_top_rated": elif method == "tmdb_top_rated":
results = self.TMDb.top_rated_movies() if is_movie else self.TMDb.top_rated_tv() results = self.TMDb.top_rated_movies(region=region) if is_movie else self.TMDb.top_rated_tv()
elif method == "tmdb_now_playing": elif method == "tmdb_now_playing":
results = self.TMDb.now_playing_movies() results = self.TMDb.now_playing_movies(region=region)
elif method == "tmdb_upcoming": elif method == "tmdb_upcoming":
results = self.TMDb.upcoming_movies() results = self.TMDb.upcoming_movies(region=region)
elif method == "tmdb_airing_today": elif method == "tmdb_airing_today":
results = self.TMDb.tv_airing_today() results = self.TMDb.tv_airing_today()
elif method == "tmdb_on_the_air": elif method == "tmdb_on_the_air":

Loading…
Cancel
Save