mirror of
				https://github.com/zulip/zulip.git
				synced 2025-10-31 03:53:50 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			67 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			67 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/env python3
 | |
| import argparse
 | |
| import os
 | |
| import sys
 | |
| 
 | |
| ZULIP_PATH = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
 | |
| if ZULIP_PATH not in sys.path:
 | |
|     sys.path.append(ZULIP_PATH)
 | |
| from scripts.lib.setup_path import setup_path
 | |
| 
 | |
| setup_path()
 | |
| 
 | |
| os.environ["DJANGO_SETTINGS_MODULE"] = "zproject.settings"
 | |
| import django
 | |
| 
 | |
| django.setup()
 | |
| 
 | |
| import pyvips
 | |
| 
 | |
| from zerver.lib.integrations import INTEGRATIONS
 | |
| from zerver.lib.storage import static_path
 | |
| from zerver.lib.thumbnail import DEFAULT_AVATAR_SIZE
 | |
| 
 | |
| 
 | |
| def create_integration_bot_avatar(logo_path: str, bot_avatar_path: str) -> None:
 | |
|     os.makedirs(os.path.dirname(bot_avatar_path), exist_ok=True)
 | |
|     avatar = pyvips.Image.thumbnail(logo_path, DEFAULT_AVATAR_SIZE, height=DEFAULT_AVATAR_SIZE)
 | |
|     if avatar.height != avatar.width:
 | |
|         avatar = avatar.gravity(
 | |
|             pyvips.CompassDirection.CENTRE, DEFAULT_AVATAR_SIZE, DEFAULT_AVATAR_SIZE
 | |
|         )
 | |
|     avatar.write_to_file(bot_avatar_path)
 | |
| 
 | |
| 
 | |
| def generate_integration_bots_avatars(check_missing: bool = False) -> None:
 | |
|     missing = set()
 | |
|     for integration in INTEGRATIONS.values():
 | |
|         if not integration.logo_path:
 | |
|             continue
 | |
| 
 | |
|         bot_avatar_path = integration.get_bot_avatar_path()
 | |
|         if bot_avatar_path is None:
 | |
|             continue
 | |
| 
 | |
|         bot_avatar_path = os.path.join(ZULIP_PATH, "static", bot_avatar_path)
 | |
|         if check_missing:
 | |
|             if not os.path.isfile(bot_avatar_path):
 | |
|                 missing.add(integration.name)
 | |
|         else:
 | |
|             create_integration_bot_avatar(static_path(integration.logo_path), bot_avatar_path)
 | |
| 
 | |
|     if missing:
 | |
|         print(
 | |
|             "ERROR: Bot avatars are missing for these webhooks: {}.\n"
 | |
|             "ERROR: Run ./tools/setup/generate_integration_bots_avatars.py "
 | |
|             "to generate them.\nERROR: Commit the newly generated avatars to "
 | |
|             "the repository.".format(", ".join(missing))
 | |
|         )
 | |
|         sys.exit(1)
 | |
| 
 | |
| 
 | |
| if __name__ == "__main__":
 | |
|     parser = argparse.ArgumentParser()
 | |
|     parser.add_argument("--check-missing", action="store_true")
 | |
|     options = parser.parse_args()
 | |
|     generate_integration_bots_avatars(options.check_missing)
 |