Skip to content

Commit

Permalink
Add page to list my images.
Browse files Browse the repository at this point in the history
  • Loading branch information
roidrage committed Jul 13, 2011
1 parent 68e9c51 commit f994ac6
Show file tree
Hide file tree
Showing 5 changed files with 31 additions and 21 deletions.
33 changes: 15 additions & 18 deletions images/services.py
Expand Up @@ -9,8 +9,8 @@
class ImageService:
def __init__(self):
self.riak = RiakClient(host=settings.RIAK_HOST, port=settings.RIAK_PORT)
self._image_bucket = None
self._metadata_bucket = None
self._metadata_bucket = self.riak.bucket(settings.RIAK_METADATA_BUCKET)
self._image_bucket = self.riak.bucket(settings.RIAK_IMAGE_BUCKET)

def store(self, file, user, content_type):
key = self.create_unique_key()
Expand All @@ -19,48 +19,45 @@ def store(self, file, user, content_type):
"uploaded_at": datetime.utcnow().isoformat(),
"filename": filename}

metadata = self.metadata_bucket().new(key, data, content_type="application/json")
metadata = self._metadata_bucket.new(key, data, content_type="application/json")
metadata.store()

image = self.image_bucket().new_binary(key, file, content_type)
image = self._image_bucket.new_binary(key, file, content_type)
image.store()
return key

def find_metadata(self, image_id):
image = self.metadata_bucket().get(image_id)
image = self._metadata_bucket.get(image_id)
if image.exists():
return image.get_data()
else:
return None

def find(self, image_id):
image = self.image_bucket().get_binary(image_id)
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("""function(value) {
var doc = Riak.mapValuesJson(value)[0];
doc['id'] = value.key;
return [doc];
}""").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():
if not self._image_bucket.get(id).exists():
return id

def unique_key(self, length=6):
return base64.b64encode(sha.new(uuid.uuid1().hex[0:7]).hexdigest()[0:7])[0:length]

def metadata_bucket(self):
if not self._metadata_bucket:
self._metadata_bucket = self.riak.bucket(settings.RIAK_META_DATA_BUCKET)
return self._metadata_bucket

def image_bucket(self):
if not self._image_bucket:
self._image_bucket = self.riak.bucket(settings.RIAK_IMAGE_BUCKET)

return self._image_bucket

def filename_for_image(self, key, content_type):
if content_type in ['image/jpg', 'image/jpeg']:
extension = 'jpg'
Expand Down
2 changes: 1 addition & 1 deletion images/urls.py
Expand Up @@ -4,5 +4,5 @@
url(r'^upload$', 'upload'),
url(r'^(?P<image_id>[a-zA-Z0-9]{5,6})/$', 'show'),
url(r'^(?P<image_id>[a-zA-Z0-9]{5,6})\.[a-z]{3}/$', 'fetch'),

url(r'^mine$', 'mine')
)
8 changes: 7 additions & 1 deletion images/views.py
Expand Up @@ -25,8 +25,14 @@ def fetch(request, image_id):
image = image_service.find(str(image_id))
if image:
return HttpResponse(content=image.get_data(), mimetype=image.get_content_type())

else:
raise Http404

def mine(request):
if not 'username' in request.session:
return redirect("/")

user = request.session['username']
image_service = ImageService()
images = image_service.find_all(user)
return render_to_response("images/mine.html", {'images': images})
2 changes: 1 addition & 1 deletion settings.py
Expand Up @@ -10,7 +10,7 @@
RIAK_PROTOCOL = "http"
RIAK_USERS_BUCKET = "riagi-users"
RIAK_IMAGE_BUCKET = "riagi-images"
RIAK_META_DATA_BUCKET = "riagi-image-metadata"
RIAK_METADATA_BUCKET = "riagi-image-metadata"

SESSION_ENGINE="django_riak"

Expand Down
7 changes: 7 additions & 0 deletions templates/images/mine.html
@@ -0,0 +1,7 @@
{% extends "layout.html" %}

{% block content %}
{% for image in images %}
<a href="/images/{{ image.id }}"><img src="/images/{{ image.filename }}"/></a>
{% endfor %}
{% endblock %}

0 comments on commit f994ac6

Please sign in to comment.