Example #1
0
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
Example #4
0
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)
Example #5
0
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)