diff --git a/api.py b/api.py index 90ba85e9d9ece334aae86e7c5f8642d07bab7601..055d728b673db8170f308cb3290ebac6dd265023 100755 --- a/api.py +++ b/api.py @@ -106,41 +106,42 @@ app.config = { if __name__ == '__main__': import pymongo import argparse - import ConfigParser import paste.httpserver arg_parser = argparse.ArgumentParser() - arg_parser.add_argument('config_file', help='path to config file') arg_parser.add_argument('--host', default='127.0.0.1', help='IP address to bind to') arg_parser.add_argument('--port', default='8080', help='TCP port to listen on') - arg_parser.add_argument('--db_uri', help='NIMS DB URI') - arg_parser.add_argument('--data_path', help='path to storage area') - arg_parser.add_argument('--log_path', help='path to API log file') - arg_parser.add_argument('--ssl_cert', help='path to SSL certificate file, containing private key and certificate chain') - arg_parser.add_argument('--site_id', help='InterNIMS site ID') - arg_parser.add_argument('--site_name', help='InterNIMS site name') - arg_parser.add_argument('--oauth2_id_endpoint', help='OAuth2 provider ID endpoint') - arg_parser.add_argument('--demo', help='demo mode, enables auto user creation') + arg_parser.add_argument('--db_uri', help='NIMS DB URI', required=True) + arg_parser.add_argument('--data_path', help='path to storage area', required=True) + arg_parser.add_argument('--log_path', help='path to API log file', required=True) + arg_parser.add_argument('--ssl_cert', help='path to SSL certificate file, containing private key and certificate chain', required=True) + arg_parser.add_argument('--site_id', help='site ID for Scitran Central') + arg_parser.add_argument('--site_name', help='site name for Scitran Central', nargs='+') + arg_parser.add_argument('--oauth2_id_endpoint', help='OAuth2 provider ID endpoint', default='https://www.googleapis.com/plus/v1/people/me/openIdConnect') + arg_parser.add_argument('--demo', help='demo mode, enables auto user creation', action='store_true', default=False) + arg_parser.add_argument('--insecure', help='insecure mode, allow user info as urlencoded param', action='store_true', default=False) + arg_parser.add_argument('--log_level', help='log level [info]', default='info') args = arg_parser.parse_args() + args.site_name = ' '.join(args.site_name) if args.site_name else None # site_name as string - app.config['here'] = os.path.dirname(os.path.abspath(args.config_file)) - config = ConfigParser.ConfigParser(app.config) - config.read(args.config_file) - logging.config.fileConfig(args.config_file, disable_existing_loggers=False) + logging.basicConfig() logging.getLogger('paste.httpserver').setLevel(logging.INFO) # silence paste logging - - app.config['site_id'] = args.site_id or app.config['site_id'] - app.config['site_name'] = args.site_name or app.config['site_name'] - app.config['data_path'] = os.path.join(args.data_path or config.get('nims', 'data_path'), 'nims') - app.config['quarantine_path'] = os.path.join(args.data_path or config.get('nims', 'data_path'), 'quarantine') - app.config['log_path'] = args.log_path or app.config['log_path'] - app.config['oauth2_id_endpoint'] = args.oauth2_id_endpoint or config.get('oauth2', 'id_endpoint') - app.config['insecure'] = config.getboolean('nims', 'insecure') - app.config['ssl_cert'] = args.ssl_cert or config.get('nims', 'ssl_cert') # to give to requests - app.config['demo'] = arg.demo or config.getboolean('nims', 'demo') + log.setLevel(getattr(logging, args.log_level.upper())) + + app.config['site_id'] = args.site_id + app.config['site_name'] = args.site_name + app.config['data_path'] = os.path.join(args.data_path, 'nims') + app.config['quarantine_path'] = os.path.join(args.data_path, 'quarantine') + app.config['log_path'] = args.log_path + app.config['oauth2_id_endpoint'] = args.oauth2_id_endpoint + app.config['insecure'] = args.insecure + app.config['ssl_cert'] = args.ssl_cert + app.config['demo'] = args.demo if not app.config['ssl_cert']: log.warning('SSL certificate not specified, interNIMS functionality disabled') + elif not app.config['site_id']: + log.warning('site_id not configured, interNIMS functionality disabled') if not os.path.exists(app.config['data_path']): os.makedirs(app.config['data_path']) @@ -148,8 +149,7 @@ if __name__ == '__main__': os.makedirs(app.config['quarantine_path']) kwargs = dict(tz_aware=True) - db_uri = args.db_uri or config.get('nims', 'db_uri') - db_client = pymongo.MongoReplicaSetClient(db_uri, **kwargs) if 'replicaSet' in db_uri else pymongo.MongoClient(db_uri, **kwargs) + db_client = pymongo.MongoReplicaSetClient(args.db_uri, **kwargs) if 'replicaSet' in args.db_uri else pymongo.MongoClient(args.db_uri, **kwargs) app.db = db_client.get_default_database() app.debug = True # send stack trace for uncaught exceptions to client