Example #1
0
 def setUp(self):
     config = {}
     config['name'] = "ResourceSync Simulator"
     config['number_of_resources'] = 1000
     config['change_frequency'] = 0.5
     config['event_types'] = ['create', 'update', 'delete']
     config['average_payload'] = 1000
     config['max_events'] = -1
     self.source = Source(config, "localhost", "8888")
     self.source.bootstrap()
Example #2
0
def main():

    p = optparse.OptionParser(
        description='ResourceSync OAI-PMH adapter',
        usage='usage: %prog [options] uri_path local_path  (-h for help)')

    # Define adapter options
    p.add_option('--config-file',
                 '-c',
                 type=str,
                 action='store',
                 default=DEFAULT_CONFIG_FILE,
                 help="the simulation configuration file")
    p.add_option('--endpoint-url',
                 '-u',
                 type=str,
                 action='store',
                 help="the oai-pmh endpoint")

    p.add_option('--port',
                 '-p',
                 type=int,
                 action='store',
                 default=8888,
                 help="the HTTP interface port")
    p.add_option('--hostname',
                 '-n',
                 type=str,
                 action='store',
                 default="localhost",
                 help="the hostname where the adapter is running")
    p.add_option('--logger',
                 '-l',
                 action='store_true',
                 default=False,
                 help="write detailed logs of source to file")
    p.add_option('--verbose',
                 '-v',
                 action='store_true',
                 default=False,
                 help="verbose")
    p.add_option('--eval',
                 '-e',
                 action='store_true',
                 default=False,
                 help="run in evaluation mode (log all events)")

    # Parse command line arguments
    (args, map) = p.parse_args()
    if (args.logger or args.verbose):
        init_logging(file=args.logger,
                     console=args.verbose,
                     eval_mode=args.eval)

    # Load the YAML configuration file
    config = yaml.load(file(args.config_file, 'r'))

    print "Setting up ResourceSync OAI-Adapter..."

    # Set up the source
    source_settings = config['source']
    source = Source(source_settings, args.hostname, args.port)

    # Set up and register the source inventory (if defined)
    if config.has_key('inventory_builder'):
        klass_name = config['inventory_builder']['class']
        mod = __import__('resync.source', fromlist=[klass_name])
        inventory_builder_klass = getattr(mod, klass_name)
        builder = inventory_builder_klass(source, config['inventory_builder'])
        source.add_inventory_builder(builder)

    # Set up and register change memory (if defined)
    if config.has_key('changememory'):
        klass_name = config['changememory']['class']
        mod = __import__('resync.changememory', fromlist=[klass_name])
        changemem_klass = getattr(mod, klass_name)
        changememory = changemem_klass(source, config['changememory'])
        source.add_changememory(changememory)

    # Set up and register publishers (if defined)
    if config.has_key('publisher'):
        klass_name = config['publisher']['class']
        mod = __import__('resync.publisher', fromlist=[klass_name])
        publisher_klass = getattr(mod, klass_name)
        publisher = publisher_klass(source, config['publisher'])

    # Attach event loggers;
    if config.has_key('logger'):
        klass_name = config['logger']['class']
        mod = __import__('resync.event_log', fromlist=[klass_name])
        logger_class = getattr(mod, klass_name)
        logger = logger_class(source, config['logger'])

    # Bootstrap the source
    print "Bootstrapping the source ..."
    source.bootstrap()
    print "OAI-PMH adapter is now running at %s" % source.base_uri

    # Start the Web interface, run the simulation
    # Attach HTTP interface to source
    http_interface = HTTPInterface(source)
    try:
        http_interface.start()
        if args.endpoint_url is not None:
            source.bootstrap_oai(args.endpoint_url)
        else:
            source.bootstrap_oai(source_settings['endpoint'])
    except KeyboardInterrupt:
        print "\nStopping simulation and exiting gracefully..."
    finally:
        http_interface.stop()
Example #3
0
class TestSource(unittest.TestCase):

    def setUp(self):
        config = {}
        config['name'] = "ResourceSync Simulator"
        config['number_of_resources'] = 1000
        config['change_frequency'] = 0.5
        config['event_types'] = ['create', 'update', 'delete']
        config['average_payload'] = 1000
        config['max_events'] = -1
        self.source = Source(config, "localhost", "8888")
        self.source.bootstrap()

    def test_init(self):
        self.assertTrue(self.source is not None)
        self.assertTrue(self.source.config is not None)
        self.assertEqual(self.source.port, "8888")
        self.assertEqual(self.source.hostname, "localhost")
        self.assertTrue(self.source.inventory is None)
        self.assertTrue(self.source.changememory is None)
    
    def test_base_uri(self):
        self.assertEqual(self.source.base_uri, "http://localhost:8888")
        
    def test_resource_count(self):
        self.assertEqual(self.source.resource_count, 1000)
        
    def test_resources(self):
        resources = [resource for resource in self.source.resources]
        self.assertEqual(len(resources), 1000)
    
    def test_resource(self):
        # Fetch a random basename from the source repository
        rand_basename = random.choice(self.source._repository.keys())
        self.assertTrue(rand_basename is not None)
        resource = self.source.resource(rand_basename)
        self.assertTrue(resource is not None,
            "Cannot create resource %s" % rand_basename)
        self.assertTrue( isinstance(resource, Resource) )
        self.assertEquals(resource.uri, 
            "http://localhost:8888/resources/%s" % rand_basename)
        self.assertEquals(resource.size,
            self.source._repository[rand_basename]['size'])
        self.assertEquals(resource.timestamp,
            self.source._repository[rand_basename]['timestamp'])
        # Try to fetch non-existing resource
        resource = self.source.resource(-10)
        self.assertTrue(resource is None)
    
    def test_resource_payload(self):
        # Fetch a random basename from the source repository
        rand_basename = random.choice(self.source._repository.keys())        
        size = self.source._repository[rand_basename]['size']
        payload = self.source.resource_payload(rand_basename)
        self.assertEqual(len(payload), size)
    
    def test_random_resources(self):
        self.assertEqual(len(self.source.random_resources()), 1)
        self.assertEqual(len(self.source.random_resources(1)), 1)
        self.assertEqual(len(self.source.random_resources(17)), 17)
    
    def test_create_resource(self):
        len_before = self.source.resource_count
        self.source._create_resource(basename="1177")
        self.assertEqual(self.source.resource_count, len_before+1)
        
    def test_delete_resource(self):
        len_before = self.source.resource_count
        rand_basename = self.source.random_resource.basename
        self.source._delete_resource(basename=rand_basename)
        self.assertEqual(self.source.resource_count, len_before-1)

    def test_update_resource(self):
        len_before = self.source.resource_count
        rand_basename = self.source.random_resource.basename
        self.source._update_resource(basename=rand_basename)
        self.assertEqual(self.source.resource_count, len_before)
Example #4
0
def main():
    
    p = optparse.OptionParser(description='ResourceSync OAI-PMH adapter',
        usage='usage: %prog [options] uri_path local_path  (-h for help)')
        
    # Define adapter options
    p.add_option('--config-file', '-c', type=str, action='store',
                    default=DEFAULT_CONFIG_FILE,
                    help="the simulation configuration file")
    p.add_option('--endpoint-url', '-u', type=str, action='store',
                    help="the oai-pmh endpoint")
                    
    p.add_option('--port', '-p', type=int, action='store',
                    default=8888,
                    help="the HTTP interface port")
    p.add_option('--hostname', '-n', type=str, action='store',
                    default="localhost",
                    help="the hostname where the adapter is running")
    p.add_option('--logger', '-l', action='store_true',
                    default=False,
                    help="write detailed logs of source to file")
    p.add_option('--verbose', '-v', action='store_true',
                    default=False,
                    help="verbose")
    p.add_option('--eval', '-e', action='store_true',
                    default=False,
                    help="run in evaluation mode (log all events)")
    
    # Parse command line arguments
    (args, map) = p.parse_args()
    if(args.logger or args.verbose):
        init_logging(file=args.logger, console=args.verbose,
                     eval_mode=args.eval)
        
    # Load the YAML configuration file
    config = yaml.load(file(args.config_file, 'r'))
    
    print "Setting up ResourceSync OAI-Adapter..."
    
    # Set up the source
    source_settings = config['source']
    source = Source(source_settings, args.hostname, args.port)
    
    # Set up and register the source inventory (if defined)
    if config.has_key('inventory_builder'):
        klass_name = config['inventory_builder']['class']
        mod = __import__('resync.source', fromlist=[klass_name])
        inventory_builder_klass = getattr(mod, klass_name)
        builder = inventory_builder_klass(source, config['inventory_builder'])
        source.add_inventory_builder(builder)
    
    # Set up and register change memory (if defined)
    if config.has_key('changememory'):
        klass_name = config['changememory']['class']
        mod = __import__('resync.changememory', fromlist=[klass_name])
        changemem_klass = getattr(mod, klass_name)
        changememory = changemem_klass(source, config['changememory'])
        source.add_changememory(changememory)
    
    # Set up and register publishers (if defined)
    if config.has_key('publisher'):
        klass_name = config['publisher']['class']
        mod = __import__('resync.publisher', fromlist=[klass_name])
        publisher_klass = getattr(mod, klass_name)
        publisher = publisher_klass(source, config['publisher'])
    
    # Attach event loggers;
    if config.has_key('logger'):
        klass_name = config['logger']['class']
        mod = __import__('resync.event_log', fromlist=[klass_name])
        logger_class = getattr(mod, klass_name)
        logger = logger_class(source, config['logger'])
    
    # Bootstrap the source
    print "Bootstrapping the source ..."
    source.bootstrap()
    print "OAI-PMH adapter is now running at %s" % source.base_uri
    
    # Start the Web interface, run the simulation
    # Attach HTTP interface to source
    http_interface = HTTPInterface(source)
    try:
        http_interface.start()
        if args.endpoint_url is not None:
            source.bootstrap_oai(args.endpoint_url)
        else:
            source.bootstrap_oai(source_settings['endpoint'])
    except KeyboardInterrupt:
        print "\nStopping simulation and exiting gracefully..."
    finally:
        http_interface.stop()