~jcsackett/charmworld/bac-tag-constraints

« back to all changes in this revision

Viewing changes to charmworld/views/bundles.py

  • Committer: Curtis Hovey
  • Date: 2013-08-20 22:05:56 UTC
  • mfrom: (358 charmworld)
  • mto: This revision was merged to the branch mainline in revision 359.
  • Revision ID: curtis@canonical.com-20130820220556-zhm7woolfb0hs81x
Merged tip.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
# Copyright 2013 Canonical Ltd.  This software is licensed under the
2
2
# GNU Affero General Public License version 3 (see the file LICENSE).
3
3
 
4
 
 
5
4
from charmworld import cached_view_config
6
5
from charmworld.models import Bundle
7
 
from charmworld.views.helpers import found
 
6
from charmworld.views.api import json_response
8
7
 
9
8
 
10
9
class BundleDetail(Bundle):
71
70
        spec["promulgated"] = True
72
71
    else:
73
72
        spec["owner"] = request.matchdict['owner']
74
 
    return found(request.db.bundles.find_one(spec))
75
 
 
76
 
 
77
 
def _bundle_view(request, bundle_data):
78
 
    bundle = BundleDetail(bundle_data)
 
73
    return Bundle.from_query(spec, request.db)
 
74
 
 
75
 
 
76
def _bundle_view(request, bundle):
 
77
    bundle = BundleDetail(dict(bundle))
79
78
    is_owner = bool((request.user is not None) and
80
79
                    (request.user.nickname == bundle.owner))
81
80
 
91
90
    renderer="charmworld:templates/bundle.pt")
92
91
def personal_bundle(request):
93
92
    return _bundle_view(request, find_bundle(request))
 
93
 
 
94
 
 
95
@cached_view_config(
 
96
    route_name="personal-bundle-json")
 
97
def personal_bundle_json(request):
 
98
    bundle = find_bundle(request)
 
99
    if bundle is None:
 
100
        status = 404
 
101
        id_ = Bundle.construct_id(request.matchdict['owner'],
 
102
                                  request.matchdict['basket'],
 
103
                                  request.matchdict['bundle'])
 
104
        value = {'type': 'no_such_bundle', 'bundle_id': id_}
 
105
    else:
 
106
        status = 200
 
107
        value = {bundle.name: bundle.data}
 
108
    return json_response(status, value)