def main(argv=None): """Search a Cheshire3 database based on query in argv.""" global argparser, session, server, db if argv is None: args = argparser.parse_args() else: args = argparser.parse_args(argv) session = Session() server = SimpleServer(session, args.serverconfig) if args.database is None: try: dbid = identify_database(session, os.getcwd()) except EnvironmentError as e: server.log_critical(session, e.message) return 1 server.log_debug(session, "database identifier not specified, discovered: {0}".format(dbid)) else: dbid = args.database try: db = server.get_object(session, dbid) except ObjectDoesNotExistException: msg = """Cheshire3 database {0} does not exist. Please provide a different database identifier using the --database option. """.format( dbid ) server.log_critical(session, msg) return 2 else: qFac = db.get_object(session, "defaultQueryFactory") query = qFac.get_query(session, args.query, format=args.format) resultSet = db.search(session, query) return _format_resultSet(resultSet, maximumRecords=args.maxRecs, startRecord=args.startRec)
def main(argv=None): global argparser, lockfilepath, lgr global session, server, db, lgr if argv is None: args = argparser.parse_args() else: args = argparser.parse_args(argv) session = Session() server = SimpleServer(session, args.serverconfig) if args.database is None: try: dbid = identify_database(session, os.getcwd()) except EnvironmentError as e: server.log_critical(session, e.message) return 1 server.log_debug( session, "database identifier not specified, discovered: {0}".format(dbid)) else: dbid = args.database try: db = server.get_object(session, dbid) except ObjectDoesNotExistException: msg = """Cheshire3 database {0} does not exist. Please provide a different database identifier using the --database option. """.format(dbid) server.log_critical(session, msg) return 2 else: lgr = db.get_path(session, 'defaultLogger') pass return args.func(args)
def main(argv=None): """Load data into a Cheshire3 database based on parameters in argv.""" global argparser, session, server, db if argv is None: args = argparser.parse_args() else: args = argparser.parse_args(argv) session = Session() server = SimpleServer(session, args.serverconfig) if args.database is None: try: dbid = identify_database(session, os.getcwd()) except EnvironmentError as e: server.log_critical(session, e.message) return 1 server.log_debug( session, "database identifier not specified, discovered: {0}".format(dbid)) else: dbid = args.database try: db = server.get_object(session, dbid) except ObjectDoesNotExistException: msg = """Cheshire3 database {0} does not exist. Please provide a different database identifier using the --database option. """.format(dbid) server.log_critical(session, msg) return 2 else: docFac = db.get_object(session, 'defaultDocumentFactory') docFac.load(session, args.data, args.cache, args.format, args.tagname, args.codec) wf = db.get_object(session, 'buildIndexWorkflow') wf.process(session, docFac)
def main(argv=None): """Load data into a Cheshire3 database based on parameters in argv.""" global argparser, session, server, db if argv is None: args = argparser.parse_args() else: args = argparser.parse_args(argv) session = Session() server = SimpleServer(session, args.serverconfig) if args.database is None: try: dbid = identify_database(session, os.getcwd()) except EnvironmentError as e: server.log_critical(session, e.message) return 1 server.log_debug( session, "database identifier not specified, discovered: {0}".format(dbid) ) else: dbid = args.database try: db = server.get_object(session, dbid) except ObjectDoesNotExistException: msg = """Cheshire3 database {0} does not exist. Please provide a different database identifier using the --database option. """.format(dbid) server.log_critical(session, msg) return 2 else: # Allow for multiple data arguments docFac = db.get_object(session, 'defaultDocumentFactory') for dataArg in args.data: try: docFac.load(session, dataArg, args.cache, args.format, args.tagname, args.codec ) except MissingDependencyException as e: server.log_critical(session, e.reason) missingDependencies = e.dependencies raise MissingDependencyException('cheshire3-load script', missingDependencies ) wf = db.get_object(session, 'buildIndexWorkflow') wf.process(session, docFac)
def main(argv=None): """Search a Cheshire3 database based on query in argv.""" global argparser, session, server, db if argv is None: args = argparser.parse_args() else: args = argparser.parse_args(argv) session = Session() server = SimpleServer(session, args.serverconfig) if args.database is None: try: dbid = identify_database(session, os.getcwd()) except EnvironmentError as e: server.log_critical(session, e.message) return 1 server.log_debug( session, "database identifier not specified, discovered: {0}".format(dbid) ) else: dbid = args.database try: db = server.get_object(session, dbid) except ObjectDoesNotExistException: msg = """Cheshire3 database {0} does not exist. Please provide a different database identifier using the --database option. """.format(dbid) server.log_critical(session, msg) return 2 else: qFac = db.get_object(session, 'defaultQueryFactory') query = qFac.get_query(session, args.query, format=args.format) resultSet = db.search(session, query) return _format_resultSet(resultSet, maximumRecords=args.maxRecs, startRecord=args.startRec)
def getCheshire3Env(args): """Init and return Cheshire3 Session, Server and Database. Intialize Cheshire3 Session, Server and Database objects based on ``args``. """ # Create a Session session = Session() # Get the Server based on given serverConfig file server = SimpleServer(session, args.serverconfig) # Try to get the Database if args.database is None: try: dbid = identify_database(session, os.getcwd()) except EnvironmentError as e: server.log_critical(session, e.message) raise server.log_debug( session, "database identifier not specified, discovered: {0}".format(dbid) ) else: dbid = args.database try: db = server.get_object(session, dbid) except ObjectDoesNotExistException: msg = """Cheshire3 database {0} does not exist. Please provide a different database identifier using the --database option. """.format(dbid) server.log_critical(session, msg) raise else: # Attach a default Logger to the Session session.logger = db.get_path(session, 'defaultLogger') return session, server, db
def main(argv=None): """Initialize a Cheshire 3 database based on parameters in argv.""" global argparser, session, server, db if argv is None: args = argparser.parse_args() else: args = argparser.parse_args(argv) session = Session() server = SimpleServer(session, args.serverconfig) if args.database is None: if args.directory.endswith(os.path.sep): args.directory = args.directory[:-1] # Find local database name to use as basis of database id dbid = "db_{0}".format(os.path.basename(args.directory)) server.log_debug(session, ("database identifier not specified, defaulting to: " "{0}".format(dbid))) else: dbid = args.database try: db = server.get_object(session, dbid) except ObjectDoesNotExistException: # Doesn't exists, so OK to init it pass else: # TODO: check for --force ? msg = """database with id '{0}' has already been init'd. \ Please specify a different id using the --database option.""".format(dbid) server.log_critical(session, msg) raise ValueError(msg) # Create a .cheshire3 directory and populate it c3_dir = os.path.join(os.path.abspath(args.directory), '.cheshire3') for dir_path in [ c3_dir, os.path.join(c3_dir, 'stores'), os.path.join(c3_dir, 'indexes'), os.path.join(c3_dir, 'logs') ]: try: os.makedirs(dir_path) except OSError: # Directory already exists server.log_warning(session, "directory already exists {0}".format(dir_path)) # Generate config file(s) xmlFilesToWrite = {} # Generate Protocol Map(s) (ZeeRex) zrx = create_defaultZeerex(dbid, args) zrxPath = os.path.join(c3_dir, 'zeerex_sru.xml') args.zeerexPath = zrxPath xmlFilesToWrite[zrxPath] = zrx # Generate generic database config dbConfig = create_defaultConfig(dbid, args) dbConfigPath = os.path.join(c3_dir, 'config.xml') xmlFilesToWrite[dbConfigPath] = dbConfig # Generate config for generic selectors selectorConfig = create_defaultConfigSelectors() path = os.path.join(c3_dir, 'configSelectors.xml') dbConfig = include_configByPath(dbConfig, path) xmlFilesToWrite[path] = selectorConfig # Generate config for generic indexes indexConfig = create_defaultConfigIndexes() path = os.path.join(c3_dir, 'configIndexes.xml') dbConfig = include_configByPath(dbConfig, path) xmlFilesToWrite[path] = indexConfig # Generate config for default Workflows workflowConfig = create_defaultConfigWorkflows() path = os.path.join(c3_dir, 'configWorkflows.xml') dbConfig = include_configByPath(dbConfig, path) xmlFilesToWrite[path] = workflowConfig # Write configs to files for path, node in xmlFilesToWrite.iteritems(): with open(path, 'w') as conffh: conffh.write( etree.tostring(node, pretty_print=True, encoding="utf-8")) # Tell the server to register the config file server.register_databaseConfigFile(session, dbConfigPath) return 0
def main(argv=None): """Load data into a Cheshire3 database based on parameters in argv.""" global argparser, session, server, db if argv is None: args = argparser.parse_args() else: args = argparser.parse_args(argv) if irods is None: raise MissingDependencyException('icheshire3-load script', 'irods (PyRods)' ) session = Session() server = SimpleServer(session, args.serverconfig) if args.database is None: try: dbid = identify_database(session, os.getcwd()) except EnvironmentError as e: server.log_critical(session, e.message) return 1 server.log_debug( session, "database identifier not specified, discovered: {0}".format(dbid)) else: dbid = args.database try: db = server.get_object(session, dbid) except ObjectDoesNotExistException: msg = """Cheshire3 database {0} does not exist. Please provide a different database identifier using the --database option. """.format(dbid) server.log_critical(session, msg) return 2 else: # Allow for multiple data arguments docFac = db.get_object(session, 'defaultDocumentFactory') for dataArg in args.data: if dataArg.startswith('irods://'): parsed = urlsplit(dataArg) else: # Examine current environment status, myEnv = irods.getRodsEnv() try: host = myEnv.getRodsHost() except AttributeError: host = myEnv.rodsHost # Port try: myEnv.getRodsPort() except AttributeError: port = myEnv.rodsPort # User try: username = myEnv.getRodsUserName() except AttributeError: username = myEnv.rodsUserName netloc = '{0}@{1}:{2}'.format(username, host, port) try: cqm = myEnv.getRodsCwd() except AttributeError: cwd = myEnv.rodsCwd path = '/'.join([cwd, dataArg]) parsed = SplitResult('irods', netloc, path, None, None) dataArg = urlunsplit(parsed) server.log_debug(session, dataArg) if args.format is None or not args.format.startswith('i'): fmt = 'irods' else: fmt = args.format server.log_debug(session, fmt) try: docFac.load(session, dataArg, args.cache, fmt, args.tagname, args.codec) except MissingDependencyException as e: server.log_critical(session, e.reason) missingDependencies = e.dependencies raise MissingDependencyException('cheshire3-load script', missingDependencies) wf = db.get_object(session, 'buildIndexWorkflow') wf.process(session, docFac)
def main(argv=None): """Initialize a Cheshire 3 database based on parameters in argv.""" global argparser, session, server, db if argv is None: args = argparser.parse_args() else: args = argparser.parse_args(argv) session = Session() server = SimpleServer(session, args.serverconfig) if args.database is None: if args.directory.endswith(os.path.sep): args.directory = args.directory[:-1] # Find local database name to use as basis of database id dbid = "db_{0}".format(os.path.basename(args.directory)) server.log_debug(session, ("database identifier not specified, defaulting to: " "{0}".format(dbid))) else: dbid = args.database try: db = server.get_object(session, dbid) except ObjectDoesNotExistException: # Doesn't exists, so OK to init it pass else: # TODO: check for --force ? msg = """database with id '{0}' has already been init'd. \ Please specify a different id using the --database option.""".format(dbid) server.log_critical(session, msg) raise ValueError(msg) # Create a .cheshire3 directory and populate it c3_dir = os.path.join(os.path.abspath(args.directory), '.cheshire3') for dir_path in [c3_dir, os.path.join(c3_dir, 'stores'), os.path.join(c3_dir, 'indexes'), os.path.join(c3_dir, 'logs')]: try: os.makedirs(dir_path) except OSError: # Directory already exists server.log_warning( session, "directory already exists {0}".format(dir_path) ) # Generate config file(s) xmlFilesToWrite = {} # Generate Protocol Map(s) (ZeeRex) zrx = create_defaultZeerex(dbid, args) zrxPath = os.path.join(c3_dir, 'zeerex_sru.xml') args.zeerexPath = zrxPath xmlFilesToWrite[zrxPath] = zrx # Generate generic database config dbConfig = create_defaultConfig(dbid, args) dbConfigPath = os.path.join(c3_dir, 'config.xml') xmlFilesToWrite[dbConfigPath] = dbConfig # Generate config for generic selectors selectorConfig = create_defaultConfigSelectors() path = os.path.join(c3_dir, 'configSelectors.xml') dbConfig = include_configByPath(dbConfig, path) xmlFilesToWrite[path] = selectorConfig # Generate config for generic indexes indexConfig = create_defaultConfigIndexes() path = os.path.join(c3_dir, 'configIndexes.xml') dbConfig = include_configByPath(dbConfig, path) xmlFilesToWrite[path] = indexConfig # Generate config for default Workflows workflowConfig = create_defaultConfigWorkflows() path = os.path.join(c3_dir, 'configWorkflows.xml') dbConfig = include_configByPath(dbConfig, path) xmlFilesToWrite[path] = workflowConfig # Write configs to files for path, node in xmlFilesToWrite.iteritems(): with open(path, 'w') as conffh: conffh.write(etree.tostring(node, pretty_print=True, encoding="utf-8" ) ) # Tell the server to register the config file server.register_databaseConfigFile(session, dbConfigPath) return 0