From 2e2bd9df4c6838b585baf65efe833511f0889657 Mon Sep 17 00:00:00 2001 From: tanshu Date: Tue, 23 Jun 2015 15:14:41 +0530 Subject: [PATCH] Some minor changes --- soter/__init__.py | 1 + soter/models/master.py | 2 ++ soter/static/app/album/list.html | 4 ++-- soter/static/app/album/pictures.html | 4 +++- soter/static/app/app.module.js | 18 +++++--------- .../static/app/picture/picture.controller.js | 16 ++++++++++++- soter/static/app/picture/view.html | 5 ++++ soter/views/album.py | 9 +++---- soter/views/picture.py | 24 ++++++++++++++++--- 9 files changed, 60 insertions(+), 23 deletions(-) create mode 100644 soter/static/app/picture/view.html diff --git a/soter/__init__.py b/soter/__init__.py index 7826f13..00863a2 100644 --- a/soter/__init__.py +++ b/soter/__init__.py @@ -39,6 +39,7 @@ def main(global_config, **settings): config.add_route('logout', '/logout') add_route(config, 'picture', '/picture') + config.add_route('picture_raw', '/p/{id}') config.add_route('upload', '/upload') config.add_route('api_upload', '/v1/upload') diff --git a/soter/models/master.py b/soter/models/master.py index 0f42607..1d02743 100644 --- a/soter/models/master.py +++ b/soter/models/master.py @@ -118,6 +118,8 @@ class Picture(Base): @classmethod def by_id(cls, id): + if not isinstance(id, uuid.UUID): + id = uuid.UUID(id) return DBSession.query(cls).filter(cls.id == id).first() @classmethod diff --git a/soter/static/app/album/list.html b/soter/static/app/album/list.html index 811d73c..f29821d 100644 --- a/soter/static/app/album/list.html +++ b/soter/static/app/album/list.html @@ -3,7 +3,7 @@
- @@ -12,7 +12,7 @@

{{item.description}}

-

View View Edit

diff --git a/soter/static/app/album/pictures.html b/soter/static/app/album/pictures.html index 2a4f3b3..c11ef49 100644 --- a/soter/static/app/album/pictures.html +++ b/soter/static/app/album/pictures.html @@ -1,6 +1,8 @@
-
+ +
+
diff --git a/soter/static/app/app.module.js b/soter/static/app/app.module.js index b63197e..7859806 100644 --- a/soter/static/app/app.module.js +++ b/soter/static/app/app.module.js @@ -32,18 +32,12 @@ controller: 'AlbumPicturesController', resolve: AlbumPicturesCtrlResolve }) - //.when('/picture', { - // templateUrl: '/app/picture/view.html', - // controller: 'PictureController', - // resolve: PictureCtrl.resolve, - // reloadOnSearch: false - //}) - //.when('/picture/:id', { - // templateUrl: '/app/picture/view.html', - // controller: 'PictureController', - // resolve: PictureCtrl.resolve, - // reloadOnSearch: false - //}) + .when('/picture/:id', { + templateUrl: '/app/picture/view.html', + controller: 'PictureController', + resolve: PictureCtrlResolve, + reloadOnSearch: false + }) .when('/users', { templateUrl: '/app/user/list.html', controller: 'UserListController', diff --git a/soter/static/app/picture/picture.controller.js b/soter/static/app/picture/picture.controller.js index 4401482..cff0413 100644 --- a/soter/static/app/picture/picture.controller.js +++ b/soter/static/app/picture/picture.controller.js @@ -2,7 +2,8 @@ 'use strict'; angular.module('soter') - .controller('UploadController', ['$scope', 'Upload', UploadController]); + .controller('UploadController', ['$scope', 'Upload', UploadController]) + .controller('PictureController', ['$scope', 'picture', PictureController]); function UploadController($scope, Upload) { $scope.upload = function (files) { @@ -22,6 +23,19 @@ } }; } + + function PictureController($scope, picture) { + $scope.picture = picture; + } + })(); var UploadCtrlResolve = {}; + +var PictureCtrlResolve = { + album: ['$route', 'Picture', function ($route, Picture) { + var id = $route.current.params.id; + return Picture.get({id: id}).$promise; + }] +}; + diff --git a/soter/static/app/picture/view.html b/soter/static/app/picture/view.html new file mode 100644 index 0000000..dfff7d4 --- /dev/null +++ b/soter/static/app/picture/view.html @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/soter/views/album.py b/soter/views/album.py index ac7e2bd..5a2b637 100644 --- a/soter/views/album.py +++ b/soter/views/album.py @@ -1,11 +1,10 @@ import uuid +import re import pkg_resources from pyramid.response import FileResponse, Response from pyramid.security import authenticated_userid - from pyramid.view import view_config -import re import transaction from soter.models import DBSession @@ -94,7 +93,8 @@ def show_pics(request): album = Album.by_name(id) info = album_info(album) for item in album.pictures: - info['pictures'].append({'name': item.name, 'url': request.route_url('api_picture_id', id=item.id)}) + info['pictures'].append({'name': item.name, 'url': request.route_url('picture_id', id=item.id), + 'imageUrl': request.route_url('picture_raw', id=item.id)}) return info @@ -103,7 +103,8 @@ def album_info(id): return {'name': "", 'description': "", 'isPublic': False, 'pictures': []} if not isinstance(id, Album): album = Album.by_id(id) - + else: + album = id album = {'id': album.id, 'name': album.name, 'description': album.description, 'isPublic': album.is_public, 'pictures': [], 'user': {'id': album.user_id, 'name': album.user.name}, 'isFixture': album.is_fixture} diff --git a/soter/views/picture.py b/soter/views/picture.py index 3e0291b..da324a3 100644 --- a/soter/views/picture.py +++ b/soter/views/picture.py @@ -4,12 +4,13 @@ import uuid import pkg_resources from pyramid.response import FileResponse + from pyramid.security import authenticated_userid + from pyramid.view import view_config import transaction from soter.models import DBSession - from soter.models.master import Picture @@ -37,8 +38,25 @@ def upload(request): return {'location': file_path} -@view_config(request_method='GET', route_name='api_picture_id', permission='Albums') -def show_id(request): +@view_config(request_method='GET', route_name='picture_raw', permission='Albums') +def show_raw(request): package, resource = ('soter:upload/' + request.matchdict['id'] + '.jpg').split(':', 1) file = pkg_resources.resource_filename(package, resource) return FileResponse(file, request=request) + + +@view_config(request_method='GET', route_name='api_album_id', renderer='json', request_param='pictures', + permission='Albums') +def show_id(request): + return picture_info(request.matchdict['id'], request) + + +def picture_info(id, request): + if not isinstance(id, Picture): + picture = Picture.by_id(id) + else: + picture = id + album = {'id': picture.id, 'name': picture.name, 'imageUrl': request.route_url('picture_raw', id=picture.id), + + 'user': {'id': picture.user_id, 'name': picture.user.name}} + return album