def thread_function(q: Queue, thread_lock: threading.Lock, count: int, total: int, client: StashInterface): log.LogDebug(f"Created {threading.current_thread().name}") while not q.empty(): image = q.get() image_data = { 'id': image.get('id'), 'title': image.get('title') } if image.get('rating'): image_data['rating'] = image.get('rating') if image.get('studio'): image_data['studio_id'] = image.get('studio').get('id') if image.get('performers'): performer_ids = [p.get('id') for p in image.get('performers')] image_data['performer_ids'] = performer_ids if image.get('tags'): tag_ids = [t.get('id') for t in image.get('tags')] image_data['tag_ids'] = tag_ids if image.get('galleries'): gallery_ids = [g.get('id') for g in image.get('galleries')] image_data['gallery_ids'] = gallery_ids client.updateImage(image_data) thread_lock.acquire() count += 1 log.LogProgress(count / total) thread_lock.release() q.task_done() log.LogDebug(f"{threading.current_thread().name} finished") return True
def run(json_input, output): mode_arg = json_input['args']['mode'] try: client = StashInterface(json_input["server_connection"]) if mode_arg == "" or mode_arg == "download": read_urls_and_download() client.scan_for_new_files() elif mode_arg == "tag": tag_scenes(client) except Exception: raise output["output"] = "ok"
def run(json_input, output): mode_arg = json_input['args']['mode'] try: if mode_arg == "" or mode_arg == "scrape": client = StashInterface(json_input["server_connection"]) bulk_scrape(client) elif mode_arg == "create": client = StashInterface(json_input["server_connection"]) add_tag(client) elif mode_arg == "remove": client = StashInterface(json_input["server_connection"]) remove_tag(client) except Exception: raise output["output"] = "ok"
def main(): json_input = readJSONInput() client = StashInterface(json_input.get('server_connection')) add_ph_urls(client) output = {'output': 'ok'} print(json.dumps(output) + '\n')
def run(input, output): modeArg = input['args']["mode"] try: if modeArg == "" or modeArg == "add": client = StashInterface(input["server_connection"]) addTag(client) elif modeArg == "remove": client = StashInterface(input["server_connection"]) removeTag(client) elif modeArg == "long": doLongTask() elif modeArg == "indef": doIndefiniteTask() except Exception as e: raise #output["error"] = str(e) #return output["output"] = "ok"
def main(): json_input = readJSONInput() client = StashInterface(json_input.get('server_connection')) update_image_titles(client) output = { 'output': 'ok' } print(json.dumps(output) + '\n')
def run(json_input, output): mode_arg = json_input['args']['mode'] try: if mode_arg == "" or mode_arg == "create": client = StashInterface(json_input["server_connection"]) add_tag(client) elif mode_arg == "remove": client = StashInterface(json_input["server_connection"]) remove_tag(client) elif mode_arg == "copy": client = StashInterface(json_input["server_connection"]) copy_tags(client) elif mode_arg == "copyall": client = StashInterface(json_input["server_connection"]) copy_all_tags(client) elif mode_arg == "studioImageCopy": client = StashInterface(json_input["server_connection"]) image_studio_copy(client) except Exception: raise output["output"] = "ok"
def run(json_input, output): mode_arg = json_input['args']['mode'] try: client = StashInterface(json_input["server_connection"]) # Personnal things if mode_arg == "JAV": findScene(client, "1. JAV") if mode_arg == "Anime": findScene(client, "1. Anime") if mode_arg == "Western": findScene(client, "1. Western") except Exception: raise output["output"] = "ok"
def update_entity(client: StashInterface, entity, entity_type: Entity, scraped_data, create_missing_tags: bool, create_missing_performers: bool, create_missing_studios: bool, create_missing_movies: bool): # Create dict with entity data update_data = {'id': entity.get('id')} if scraped_data.get('title'): update_data['title'] = scraped_data.get('title') if scraped_data.get('details'): update_data['details'] = scraped_data.get('details') if scraped_data.get('date'): update_data['date'] = scraped_data.get('date') if entity_type is Entity.Scene: # Images are only supported for scenes if scraped_data.get('image'): update_data['cover_image'] = scraped_data.get('image') if scraped_data.get('tags'): tag_ids = list() for tag in scraped_data.get('tags'): if tag.get('stored_id'): tag_ids.append(tag.get('stored_id')) else: if create_missing_tags and tag.get('name') != "": # Capitalize each word tag_name = " ".join(x.capitalize() for x in tag.get('name').split(" ")) log.LogInfo(f'Create missing tag: {tag_name}') tag_id = client.createTagWithName(tag_name) if tag_id is not None: tag_ids.append(tag_id) if len(tag_ids) > 0: update_data['tag_ids'] = tag_ids if scraped_data.get('performers'): performer_ids = list() for performer in scraped_data.get('performers'): if performer.get('stored_id'): performer_ids.append(performer.get('stored_id')) else: if create_missing_performers and performer.get('name') != "": performer_name = " ".join( x.capitalize() for x in performer.get('name').split(" ")) log.LogInfo(f'Create missing performer: {performer_name}') performer_id = client.createPerformerByName(performer_name) if performer_id is not None: performer_ids.append(performer_id) if len(performer_ids) > 0: update_data['performer_ids'] = performer_ids if scraped_data.get('studio'): studio = scraped_data.get('studio') if studio.get('stored_id'): update_data['studio_id'] = studio.get('stored_id') else: if create_missing_studios: studio_name = " ".join(x.capitalize() for x in studio.get('name').split(" ")) log.LogInfo(f'Creating missing studio {studio_name}') studio_url = '{uri.scheme}://{uri.netloc}'.format( uri=urlparse(entity.get('url'))) studio_id = client.createStudio(studio_name, studio_url) if studio_id is not None: update_data['studio_id'] = studio_id if scraped_data.get('movies'): movies = list() for movie in scraped_data.get('movies'): if movie.get('stored_id'): movies.append({'movie_id': movie.get('stored_id')}) else: if create_missing_movies and movie.get('name') != '': log.LogInfo(f'Create missing movie: {movie.get("name")}') if movie.get('url') is not None and movie.get('url') != '': movie_id = client.createMovie(movie.get('name'), movie.get('url')) else: movie_id = client.createMovie(movie.get('name')) if movie_id is not None: movies.append({'movie_id': movie_id}) if len(movies) > 0: update_data['movies'] = movies # Update entity with scraped scene data if entity_type is Entity.Scene: client.updateScene(update_data) elif entity_type is Entity.Gallery: client.updateGallery(update_data) else: raise TypeError(f"Unexpected Entity type: {entity_type}")