class UserService: def __init__(self): self.users_bucket = settings.RIAK_USERS_BUCKET self.riak = RiakClient(host=settings.RIAK_HOST, port=settings.RIAK_PORT) def save(self, user_data): key = self.generate_key() password = user_data['password'] user_data['encrypted_password'] = make_password('sha1', password) del user_data['password'] user = self.riak.bucket(self.users_bucket).new(key, user_data) user.store() return key def get(self, user_id): user = self.riak.bucket(settings.RIAK_USERS_BUCKET).get(str(user_id)) if user.exists(): return user.get_data() else: return None def login(self, username, password): try: user = self.riak.search(settings.RIAK_USERS_BUCKET, "username:%s" % username).run() except ValueError: user = None if user: user = user[0] user.set_bucket(str(user.get_bucket())) user.set_key(str(user.get_key())) user_data = user.get().get_data() if check_password(password, user_data['encrypted_password']): return user else: return False else: return False def generate_key(self): return uuid.uuid1().hex
def get_hosts(hosts,servers): results=list() riak_reply={} for server in servers: mcodata=RiakClient(host=server).bucket_type('puppet').bucket('nodes') if hosts is not None: for host in hosts: #then get specific host riak_reply[server] = mcodata.search("facts.fqdn:%s" % host,index='mco_nodes') if riak_reply[server]['docs']: results.extend(riak_reply[server]['docs']) else: #then get all hosts riak_reply[server] = mcodata.get_keys() if riak_reply[server]: results.extend(riak_reply[server]) results.sort() reply = {'servers':'%s'%servers,'results':results} or None return reply
def get_hosts(hosts, servers): results = list() riak_reply = {} for server in servers: mcodata = RiakClient(host=server).bucket_type('puppet').bucket('nodes') if hosts is not None: for host in hosts: #then get specific host riak_reply[server] = mcodata.search("facts.fqdn:%s" % host, index='mco_nodes') if riak_reply[server]['docs']: results.extend(riak_reply[server]['docs']) else: #then get all hosts riak_reply[server] = mcodata.get_keys() if riak_reply[server]: results.extend(riak_reply[server]) results.sort() reply = {'servers': '%s' % servers, 'results': results} or None return reply
class ImageService: def __init__(self): self.riak = RiakClient(host=settings.RIAK_HOST, port=settings.RIAK_PORT) self._metadata_bucket = self.riak.bucket(settings.RIAK_METADATA_BUCKET) self._image_bucket = self.riak.bucket(settings.RIAK_IMAGE_BUCKET) self._thumbs_bucket = self.riak.bucket(settings.RIAK_THUMBS_BUCKET) def store_from_url(self, address, user): url = urlparse(address) if str(url.scheme) != 'http': raise ImageError('Not a valid URL') if not re.search(r'(jpg|jpeg|png|gif)$', url.path): raise ImageError('Unsupported file format') http = httplib.HTTPConnection(url.netloc) http.request('GET', url.path) response = http.getresponse() image = RemoteImage(response) return self.store(image, user, response.getheader("Content-Type", "image/jpg")) def store(self, image, user, content_type): key = self.create_unique_key() filename = self.filename_for_image(key, content_type) data = {"user": user, "uploaded_at": datetime.utcnow().isoformat(), "filename": filename} thumbnail = self.create_thumbnail(image) metadata = self._metadata_bucket.new(key, data, content_type="application/json") metadata.store() image = self._image_bucket.new_binary(key, image.read(), content_type) image.store() thumb = self._thumbs_bucket.new_binary(key, thumbnail, content_type="image/jpeg") thumb.store() return key def create_thumbnail(self, image): thumbnail = Image.open(image.temporary_file_path()) thumbnail.thumbnail((128, 128), Image.ANTIALIAS) thumbio = StringIO() thumbnail.save(thumbio, format="jpeg") return thumbio.getvalue() def find_metadata(self, image_id): image = self._metadata_bucket.get(image_id) if image.exists(): return image.get_data() else: return None def find(self, image_id, thumb=False): if thumb: image = self._thumbs_bucket.get_binary(image_id) else: image = self._image_bucket.get_binary(image_id) if image.exists(): return image else: return None def find_all(self, user): images = self.riak.search(settings.RIAK_METADATA_BUCKET, "user:%s" % user).map(MAP_DOCID).run() return images def create_unique_key(self, length=6): unique = False while not unique: id = self.unique_key(length) if not self._image_bucket.get(id).exists(): return id def unique_key(self, length=6): return shortuuid.uuid()[0:length] def filename_for_image(self, key, content_type): if content_type in ['image/jpg', 'image/jpeg']: extension = 'jpg' elif content_type == "image/png": extension = 'png' elif content_type == 'image/gif': extension = 'gif' return "%s.%s" % (key, extension)
class ImageService: def __init__(self): self.riak = RiakClient(host=settings.RIAK_HOST, port=settings.RIAK_PORT) self._metadata_bucket = self.riak.bucket(settings.RIAK_METADATA_BUCKET) self._image_bucket = self.riak.bucket(settings.RIAK_IMAGE_BUCKET) self._thumbs_bucket = self.riak.bucket(settings.RIAK_THUMBS_BUCKET) def store_from_url(self, address, user): url = urlparse(address) if str(url.scheme) != 'http': raise ImageError('Not a valid URL') if not re.search(r'(jpg|jpeg|png|gif)$', url.path): raise ImageError('Unsupported file format') http = httplib.HTTPConnection(url.netloc) http.request('GET', url.path) response = http.getresponse() image = RemoteImage(response) return self.store(image, user, response.getheader("Content-Type", "image/jpg")) def store(self, image, user, content_type): key = self.create_unique_key() filename = self.filename_for_image(key, content_type) data = { "user": user, "uploaded_at": datetime.utcnow().isoformat(), "filename": filename } thumbnail = self.create_thumbnail(image) metadata = self._metadata_bucket.new(key, data, content_type="application/json") metadata.store() image = self._image_bucket.new_binary(key, image.read(), content_type) image.store() thumb = self._thumbs_bucket.new_binary(key, thumbnail, content_type="image/jpeg") thumb.store() return key def create_thumbnail(self, image): thumbnail = Image.open(image.temporary_file_path()) thumbnail.thumbnail((128, 128), Image.ANTIALIAS) thumbio = StringIO() thumbnail.save(thumbio, format="jpeg") return thumbio.getvalue() def find_metadata(self, image_id): image = self._metadata_bucket.get(image_id) if image.exists(): return image.get_data() else: return None def find(self, image_id, thumb=False): if thumb: image = self._thumbs_bucket.get_binary(image_id) else: image = self._image_bucket.get_binary(image_id) if image.exists(): return image else: return None def find_all(self, user): images = self.riak.search(settings.RIAK_METADATA_BUCKET, "user:%s" % user).map(MAP_DOCID).run() return images def create_unique_key(self, length=6): unique = False while not unique: id = self.unique_key(length) if not self._image_bucket.get(id).exists(): return id def unique_key(self, length=6): return shortuuid.uuid()[0:length] def filename_for_image(self, key, content_type): if content_type in ['image/jpg', 'image/jpeg']: extension = 'jpg' elif content_type == "image/png": extension = 'png' elif content_type == 'image/gif': extension = 'gif' return "%s.%s" % (key, extension)