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.MusicBrainz,
|
||||
IdType.Feed,
|
||||
IdType.TMDB_TVSeason,
|
||||
IdType.IMDB,
|
||||
]
|
||||
for t in best_id_types:
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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,13 +277,6 @@ 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__
|
||||
|
|
Loading…
Add table
Reference in a new issue