force all douban tv to be seasons to speed up migration
This commit is contained in:
parent
1dc79e6a00
commit
2f97406c6b
4 changed files with 51 additions and 33 deletions
|
@ -243,7 +243,6 @@ class Item(SoftDeleteMixin, PolymorphicModel):
|
||||||
IdType.ISRC,
|
IdType.ISRC,
|
||||||
IdType.MusicBrainz,
|
IdType.MusicBrainz,
|
||||||
IdType.Feed,
|
IdType.Feed,
|
||||||
IdType.TMDB_TVSeason,
|
|
||||||
IdType.IMDB,
|
IdType.IMDB,
|
||||||
]
|
]
|
||||||
for t in best_id_types:
|
for t in best_id_types:
|
||||||
|
|
|
@ -89,8 +89,16 @@ class AbstractSite:
|
||||||
data = ResourceContent()
|
data = ResourceContent()
|
||||||
return data
|
return data
|
||||||
|
|
||||||
@staticmethod
|
@classmethod
|
||||||
def match_existing_item(resource, model=Item) -> Item | None:
|
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())
|
t, v = model.get_best_lookup_id(resource.get_all_lookup_ids())
|
||||||
matched = None
|
matched = None
|
||||||
if t is not None:
|
if t is not None:
|
||||||
|
@ -108,6 +116,20 @@ class AbstractSite:
|
||||||
).first()
|
).first()
|
||||||
return matched
|
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):
|
def get_item(self):
|
||||||
p = self.get_resource()
|
p = self.get_resource()
|
||||||
if not p:
|
if not p:
|
||||||
|
@ -116,17 +138,7 @@ class AbstractSite:
|
||||||
if not p.ready:
|
if not p.ready:
|
||||||
# raise ValueError(f'resource not ready for {self.url}')
|
# raise ValueError(f'resource not ready for {self.url}')
|
||||||
return None
|
return None
|
||||||
model = p.get_preferred_model()
|
return self.match_or_create_item_for_resource(p)
|
||||||
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
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def ready(self):
|
def ready(self):
|
||||||
|
@ -175,7 +187,7 @@ class AbstractSite:
|
||||||
if not p.ready:
|
if not p.ready:
|
||||||
_logger.error(f"unable to get resource {self.url} ready")
|
_logger.error(f"unable to get resource {self.url} ready")
|
||||||
return None
|
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()
|
self.get_item()
|
||||||
if auto_save:
|
if auto_save:
|
||||||
p.save()
|
p.save()
|
||||||
|
|
|
@ -216,7 +216,7 @@ class DoubanMovie(AbstractSite):
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
pd.metadata["preferred_model"] = (
|
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
|
tmdb_season_id = None
|
||||||
if imdb_code:
|
if imdb_code:
|
||||||
|
|
|
@ -140,6 +140,14 @@ def _movie_tv_convert(entity):
|
||||||
"is_series": entity.is_series,
|
"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:
|
if entity.imdb_code:
|
||||||
content.lookup_ids[IdType.IMDB] = entity.imdb_code
|
content.lookup_ids[IdType.IMDB] = entity.imdb_code
|
||||||
if entity.other_info and entity.other_info.get("TMDB_ID"):
|
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"
|
"--clearlink", help="clear legacy link table", action="store_true"
|
||||||
)
|
)
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
"--doubantv",
|
"--clearmovie",
|
||||||
help="go thru douban tv and generate TMDB_Season link for TVSeason",
|
help="clear movie/tv/TVSeason",
|
||||||
action="store_true",
|
action="store_true",
|
||||||
)
|
)
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
|
@ -214,9 +222,15 @@ class Command(BaseCommand):
|
||||||
if SongLink.objects.filter(old_id=entity.id).count() == 0:
|
if SongLink.objects.filter(old_id=entity.id).count() == 0:
|
||||||
SongLink.objects.create(old_id=entity.id, new_uid=new_uid)
|
SongLink.objects.create(old_id=entity.id, new_uid=new_uid)
|
||||||
|
|
||||||
def douban_tv(self):
|
def clearmovie(self):
|
||||||
"""go thru douban tv and generate TMDB link"""
|
MovieLink.objects.all().delete()
|
||||||
pass
|
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):
|
def handle(self, *args, **options):
|
||||||
if options["song"]:
|
if options["song"]:
|
||||||
|
@ -226,8 +240,8 @@ class Command(BaseCommand):
|
||||||
self.process_song(ci.song)
|
self.process_song(ci.song)
|
||||||
return
|
return
|
||||||
|
|
||||||
if options["doubantv"]:
|
if options["clearmovie"]:
|
||||||
return self.douban_tv()
|
return self.clearmovie()
|
||||||
|
|
||||||
types = options["types"] or [
|
types = options["types"] or [
|
||||||
Legacy_Game,
|
Legacy_Game,
|
||||||
|
@ -263,16 +277,9 @@ class Command(BaseCommand):
|
||||||
if not site.DEFAULT_MODEL and not content.metadata.get(
|
if not site.DEFAULT_MODEL and not content.metadata.get(
|
||||||
"preferred_model"
|
"preferred_model"
|
||||||
):
|
):
|
||||||
if model_map[typ] == Movie and (
|
content.metadata["preferred_model"] = model_map[
|
||||||
entity.is_series or entity.season
|
typ
|
||||||
):
|
].__name__
|
||||||
content.metadata["preferred_model"] = (
|
|
||||||
"TVSeason" if entity.season else "TVShow"
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
content.metadata["preferred_model"] = model_map[
|
|
||||||
typ
|
|
||||||
].__name__
|
|
||||||
item = site.get_resource_ready(
|
item = site.get_resource_ready(
|
||||||
preloaded_content=content,
|
preloaded_content=content,
|
||||||
ignore_existing_content=reload,
|
ignore_existing_content=reload,
|
||||||
|
|
Loading…
Add table
Reference in a new issue