force all douban tv to be seasons to speed up migration

This commit is contained in:
Your Name 2023-01-08 00:32:25 -05:00
parent 1dc79e6a00
commit 2f97406c6b
4 changed files with 51 additions and 33 deletions

View file

@ -243,7 +243,6 @@ class Item(SoftDeleteMixin, PolymorphicModel):
IdType.ISRC,
IdType.MusicBrainz,
IdType.Feed,
IdType.TMDB_TVSeason,
IdType.IMDB,
]
for t in best_id_types:

View file

@ -89,8 +89,16 @@ class AbstractSite:
data = ResourceContent()
return data
@staticmethod
def match_existing_item(resource, model=Item) -> Item | None:
@classmethod
def get_model_for_resource(cls, resource):
model = resource.get_preferred_model()
return model or cls.DEFAULT_MODEL
@classmethod
def match_existing_item_for_resource(cls, resource) -> Item | None:
model = cls.get_model_for_resource(resource)
if not model:
return None
t, v = model.get_best_lookup_id(resource.get_all_lookup_ids())
matched = None
if t is not None:
@ -108,6 +116,20 @@ class AbstractSite:
).first()
return matched
@classmethod
def match_or_create_item_for_resource(cls, resource):
resource.item = cls.match_existing_item_for_resource(resource)
if resource.item is None:
model = cls.get_model_for_resource(resource)
if not model:
return None
t, v = model.get_best_lookup_id(resource.get_all_lookup_ids())
obj = model.copy_metadata(resource.metadata)
obj["primary_lookup_id_type"] = t
obj["primary_lookup_id_value"] = v
resource.item = model.objects.create(**obj)
return resource.item
def get_item(self):
p = self.get_resource()
if not p:
@ -116,17 +138,7 @@ class AbstractSite:
if not p.ready:
# raise ValueError(f'resource not ready for {self.url}')
return None
model = p.get_preferred_model()
if not model:
model = self.DEFAULT_MODEL
p.item = self.match_existing_item(p, model)
if p.item is None:
t, v = model.get_best_lookup_id(p.get_all_lookup_ids())
obj = model.copy_metadata(p.metadata)
obj["primary_lookup_id_type"] = t
obj["primary_lookup_id_value"] = v
p.item = model.objects.create(**obj)
return p.item
return self.match_or_create_item_for_resource(p)
@property
def ready(self):
@ -175,7 +187,7 @@ class AbstractSite:
if not p.ready:
_logger.error(f"unable to get resource {self.url} ready")
return None
if auto_create and p.item is None:
if auto_create: # and (p.item is None or p.item.is_deleted):
self.get_item()
if auto_save:
p.save()

View file

@ -216,7 +216,7 @@ class DoubanMovie(AbstractSite):
}
)
pd.metadata["preferred_model"] = (
("TVSeason" if season else "TVShow") if is_series else "Movie"
("TVShow" if is_series else "Movie") if not season else "TVSeason"
)
tmdb_season_id = None
if imdb_code:

View file

@ -140,6 +140,14 @@ def _movie_tv_convert(entity):
"is_series": entity.is_series,
}
)
if entity.source_site == "douban":
content.metadata["preferred_model"] = (
"TVSeason"
if entity.is_series or entity.episodes or entity.season
else "Movie"
)
else:
content.metadata["preferred_model"] = "TVShow" if entity.is_series else "Movie"
if entity.imdb_code:
content.lookup_ids[IdType.IMDB] = entity.imdb_code
if entity.other_info and entity.other_info.get("TMDB_ID"):
@ -191,8 +199,8 @@ class Command(BaseCommand):
"--clearlink", help="clear legacy link table", action="store_true"
)
parser.add_argument(
"--doubantv",
help="go thru douban tv and generate TMDB_Season link for TVSeason",
"--clearmovie",
help="clear movie/tv/TVSeason",
action="store_true",
)
parser.add_argument(
@ -214,9 +222,15 @@ class Command(BaseCommand):
if SongLink.objects.filter(old_id=entity.id).count() == 0:
SongLink.objects.create(old_id=entity.id, new_uid=new_uid)
def douban_tv(self):
"""go thru douban tv and generate TMDB link"""
pass
def clearmovie(self):
MovieLink.objects.all().delete()
for cls in [Movie, TVShow, TVSeason]:
print(cls)
cls.objects.all().update(
primary_lookup_id_type=None,
primary_lookup_id_value=None,
is_deleted=True,
)
def handle(self, *args, **options):
if options["song"]:
@ -226,8 +240,8 @@ class Command(BaseCommand):
self.process_song(ci.song)
return
if options["doubantv"]:
return self.douban_tv()
if options["clearmovie"]:
return self.clearmovie()
types = options["types"] or [
Legacy_Game,
@ -263,16 +277,9 @@ class Command(BaseCommand):
if not site.DEFAULT_MODEL and not content.metadata.get(
"preferred_model"
):
if model_map[typ] == Movie and (
entity.is_series or entity.season
):
content.metadata["preferred_model"] = (
"TVSeason" if entity.season else "TVShow"
)
else:
content.metadata["preferred_model"] = model_map[
typ
].__name__
content.metadata["preferred_model"] = model_map[
typ
].__name__
item = site.get_resource_ready(
preloaded_content=content,
ignore_existing_content=reload,