add sync to specific projects or listen only

This commit is contained in:
Michael reda 2023-04-05 12:14:06 +02:00
parent 0cdeda5396
commit 122a4dc9db
2 changed files with 37 additions and 4 deletions

View file

@ -124,19 +124,31 @@ def push_to_zou(login, password):
@cli_main.command()
@click.option("-prjs", "--projects", envvar="SYNC_PROJECTS", help="Sync specific kitsu projects")
@click.option("-l", "--login", envvar="KITSU_LOGIN", help="Kitsu login")
@click.option(
"-p", "--password", envvar="KITSU_PWD", help="Password for kitsu username"
)
def sync_service(login, password):
def sync_service(login, password, projects="^"):
"""Synchronize openpype database from Zou sever database.
Args:
login (str): Kitsu user login
password (str): Kitsu user password
projects (str): specific kitsu projects
SYNC_PROJECTS:
*: all projects
^: dont sync any project just listen
"project01 project02 ...": to choose custom projects
"""
from .utils.update_op_with_zou import sync_all_projects
from .utils.sync_service import start_listeners
sync_all_projects(login, password)
projects = projects.strip()
projects = projects.split(' ')
sync_all_projects(login, password, specific_projects=projects)
start_listeners(login, password)

View file

@ -359,7 +359,7 @@ def write_project_to_op(project: dict, dbcon: AvalonMongoDB) -> UpdateOne:
def sync_all_projects(
login: str, password: str, ignore_projects: list = None
login: str, password: str, ignore_projects: list = None, specific_projects: list = None
):
"""Update all OP projects in DB with Zou data.
@ -367,6 +367,7 @@ def sync_all_projects(
login (str): Kitsu user login
password (str): Kitsu user password
ignore_projects (list): List of unsynced project names
specific_projects (list): List of synced project names
Raises:
gazu.exception.AuthFailedException: Wrong user login and/or password
"""
@ -381,7 +382,27 @@ def sync_all_projects(
dbcon = AvalonMongoDB()
dbcon.install()
all_projects = gazu.project.all_projects()
for project in all_projects:
project_to_sync = []
if specific_projects == ['*']:
project_to_sync = all_projects
elif specific_projects == ['^']:
return
elif isinstance(specific_projects, list):
all_kitsu_projects = {p['name']: p for p in all_projects}
for proj_name in specific_projects:
if proj_name in all_kitsu_projects:
project_to_sync.append(all_kitsu_projects[proj_name])
else:
log.info(f'`{proj_name}` project does not exists in kitsu.'
f' Please make sure you write the project correctly.')
else:
return
for project in project_to_sync:
if ignore_projects and project["name"] in ignore_projects:
continue
sync_project_from_kitsu(dbcon, project)