diegokauer/segmentation-backend
0
1import os2import argparse3import logging4import logging.config5import json6 7from creds import get_credentials8 9logging.config.dictConfig({10 "version": 1,11 "formatters": {12 "standard": {13 "format": "[%(asctime)s] [%(levelname)s] [%(name)s::%(funcName)s::%(lineno)d] %(message)s"14 }15 },16 "handlers": {17 "console": {18 "class": "logging.StreamHandler",19 "level": os.getenv('LOG_LEVEL', 'INFO'),20 "stream": "ext://sys.stdout",21 "formatter": "standard"22 }23 },24 "root": {25 "level": os.getenv('LOG_LEVEL', 'INFO'),26 "handlers": [27 "console"28 ],29 "propagate": True30 }31})32 33from label_studio_ml.api import init_app34from model import Model35 36_DEFAULT_CONFIG_PATH = os.path.join(os.path.dirname(__file__), 'config.json')37 38 39def get_kwargs_from_config(config_path=_DEFAULT_CONFIG_PATH):40 if not os.path.exists(config_path):41 return dict()42 with open(config_path) as f:43 config = json.load(f)44 assert isinstance(config, dict)45 return config46 47 48if __name__ == "__main__":49 parser = argparse.ArgumentParser(description='Label studio')50 parser.add_argument(51 '-p', '--port', dest='port', type=int, default=9090,52 help='Server port')53 parser.add_argument(54 '--host', dest='host', type=str, default='0.0.0.0',55 help='Server host')56 parser.add_argument(57 '--kwargs', '--with', dest='kwargs', metavar='KEY=VAL', nargs='+', type=lambda kv: kv.split('='),58 help='Additional LabelStudioMLBase model initialization kwargs')59 parser.add_argument(60 '-d', '--debug', dest='debug', action='store_true',61 help='Switch debug mode')62 parser.add_argument(63 '--log-level', dest='log_level', choices=['DEBUG', 'INFO', 'WARNING', 'ERROR'], default=None,64 help='Logging level')65 parser.add_argument(66 '--model-dir', dest='model_dir', default=os.path.dirname(__file__),67 help='Directory where models are stored (relative to the project directory)')68 parser.add_argument(69 '--check', dest='check', action='store_true',70 help='Validate model instance before launching server')71 72 args = parser.parse_args()73 74 # setup logging level75 if args.log_level:76 logging.root.setLevel(args.log_level)77 78 def isfloat(value):79 try:80 float(value)81 return True82 except ValueError:83 return False84 85 def parse_kwargs():86 param = dict()87 for k, v in args.kwargs:88 if v.isdigit():89 param[k] = int(v)90 elif v == 'True' or v == 'true':91 param[k] = True92 elif v == 'False' or v == 'False':93 param[k] = False94 elif isfloat(v):95 param[k] = float(v)96 else:97 param[k] = v98 return param99 100 kwargs = get_kwargs_from_config()101 102 if args.kwargs:103 kwargs.update(parse_kwargs())104 105 if args.check:106 print('Check "' + Model.__name__ + '" instance creation..')107 model = Model(**kwargs)108 109 app = init_app(model_class=Model)110 111 # pass112 os.environ["GOOGLE_APPLICATION_CREDENTIALS"]= get_credentials()113 print("credentials set")114 115 app.run(host=args.host, port=args.port, debug=args.debug)116 117else:118 # for uWSGI use119 app = init_app(model_class=Model)120 