def write(self, record):
     for i in range(5):
         try:
             # todo: check for timeout and flags
             self.client.set(str(record['id']), 0, 0, json.dumps(record['value']))
             return
         except MemcachedTimeoutException as e:
             pass
         except:
             self.client.done()
             self.client = VBucketAwareMembaseClient(self.server, self.bucket, self.bucket_password, self.verbose)
     print 'unable to set key {0}'.format(str(record['id']))
class CouchbaseWriter(couchmigrator.migrator.Writer):
    def __init__(self, destination):
        # username:[email protected]:8091/bucket        
        m = re.match('^([^:]+):([^@]+)@([^:]+):([^/]+)/(.+)$', destination)
        self.username = m.group(1)
        self.password = m.group(2)
        self.host = m.group(3)
        self.port = m.group(4)
        self.bucket = m.group(5)

        self.bucket_port = 11211
        self.bucket_password = ''

        self.verbose = False

        # todo: use server username/password to query the bucket password/port if needed
        self.server = "http://{2}:{3}/pools/default".format(self.username, self.password, self.host, self.port)
        self.client = VBucketAwareMembaseClient(self.server, self.bucket, self.bucket_password, self.verbose)

    def write(self, record):
        for i in range(5):
            try:
                # todo: check for timeout and flags
                self.client.set(str(record['id']), 0, 0, json.dumps(record['value']))
                return
            except MemcachedTimeoutException as e:
                pass
            except:
                self.client.done()
                self.client = VBucketAwareMembaseClient(self.server, self.bucket, self.bucket_password, self.verbose)
        print 'unable to set key {0}'.format(str(record['id']))

    def close(self):
        self.client.done()
    def __init__(self, destination):
        # username:[email protected]:8091/bucket        
        m = re.match('^([^:]+):([^@]+)@([^:]+):([^/]+)/(.+)$', destination)
        self.username = m.group(1)
        self.password = m.group(2)
        self.host = m.group(3)
        self.port = m.group(4)
        self.bucket = m.group(5)

        self.bucket_port = 11211
        self.bucket_password = ''

        self.verbose = False

        # todo: use server username/password to query the bucket password/port if needed
        self.server = "http://{2}:{3}/pools/default".format(self.username, self.password, self.host, self.port)
        self.client = VBucketAwareMembaseClient(self.server, self.bucket, self.bucket_password, self.verbose)