def test_correct_decorator_order(self): api = api_decorator([]) @api('whatever', skip_javascript=True) @require_POST def foo(request): pass
def wrong_order(): api = api_decorator([]) @require_POST @api('whatever', skip_javascript=True) def foo(request): pass
from canvas import fact from canvas.api_decorators import api_decorator from canvas.exceptions import ServiceError from canvas.metrics import Metrics urlpatterns = [] api = api_decorator(urlpatterns) @api('metric/record') def metric_record(request, name, info={}): info = dict((str(key), value) for (key, value) in info.items()) metric = Metrics.all.get(name) if not metric: raise ServiceError("Invalid metric name") if metric.ignore_from_api: return metric.record(request, **info) @api('fact/record') def record_fact(request, type, info={}): fact.record(type, request, info)
url(r'^chunk/', include(chunk_uploads)), url(r'^comment/', include('apps.comments.api')), url(r'^comment_hiding/', include('apps.comment_hiding.api')), url(r'^feed/', include('drawquest.apps.feed.api')), url(r'^monster/', include('apps.monster.api')), url(r'^logged_out_homepage/', include('apps.logged_out_homepage.api')), url(r'^share/', include('apps.share_tracking.views')), url(r'^sticky_threads/', include('apps.sticky_threads.api')), url(r'^suggest/', include('apps.suggest.api')), url(r'^tags/', include('apps.tags.api')), url(r'^threads/', include('apps.threads.api')), url(r'^upload$', api_upload), url(r'^', include('apps.analytics.api')), ) api = api_decorator(urls) @api('user/exists', csrf_exempt=True) def user_exists(request, username): """ Returns None if the username is valid and does not exist. """ error_msg = User.validate_username(username or "") if error_msg: raise ServiceError(error_msg) @api('user/actually_exists', csrf_exempt=True) def user_actually_exists(request, username): """ Returns true or false, doesn't validate the username. """ return {'exists': User.objects.filter(username__iexact=username).exists()}
from django.shortcuts import get_object_or_404 from apps.canvas_auth.models import User from canvas.api_decorators import api_decorator from canvas.cache_patterns import CachedCall from canvas.details_models import CommentDetails from canvas.metrics import Metrics from canvas.models import Comment, Category from canvas.view_guards import require_user from django.conf import settings from urbanairship import Airship urlpatterns = [] api = api_decorator(urlpatterns) @api('register_token') @require_user def register_token(request, device_token): from apps.monster.models import MobileUser MobileUser.register(request.user, device_token) ret = { 'username': request.user.username, 'device_token': device_token, } return ret @api('invite_user') @require_user def invite_user(request, username, payload):
url(r'^comment_hiding/', include('apps.comment_hiding.api')), url(r'^feed/', include('apps.feed.api')), url(r'^following/', include('apps.following.api')), url(r'^invite_remixer/', include('apps.invite_remixer.api')), url(r'^monster/', include('apps.monster.api')), url(r'^logged_out_homepage/', include('apps.logged_out_homepage.api')), url(r'^share/', include('apps.share_tracking.views')), url(r'^sticky_threads/', include('apps.sticky_threads.api')), url(r'^suggest/', include('apps.suggest.api')), url(r'^tags/', include('apps.tags.api')), url(r'^threads/', include('apps.threads.api')), url(r'^upload$', api_upload), url(r'^', include('apps.analytics.api')), ) api = api_decorator(urls) @api('user/exists', csrf_exempt=True) def user_exists(request, username): """ Returns None if the username is valid and does not exist. """ error_msg = User.validate_username(username or "") if error_msg: raise ServiceError(error_msg) @api('user/actually_exists', csrf_exempt=True) def user_actually_exists(request, username): """ Returns true or false, doesn't validate the username. """ return {'exists': User.objects.filter(username__iexact=username).exists()} #TODO remove once we stop migrating accounts to drawquest. @api('user/info_for_drawquest_migration', csrf_exempt=True)
filedata = b64decode(data) if filedata: ret = _got_imagedata(filedata, request, url=url) from canvas.cache_patterns import cache from canvas.models import Content util.papertrail.debug('UPLOADS: _got_imagedata, actual cache is {} for content ID {}'.format(cache.get('content:%s:full_details_v26' % ret['content']['id']), ret['content']['id'])) util.papertrail.debug('UPLOADS: _got_imagedata, actual content object for ID {} exists: {}'.format(ret['content']['id'], Content.all_objects.filter(id=ret['content']['id']).exists())) util.papertrail.debug('UPLOADS: _got_imagedata: {} {}'.format(ret.get('success'), ret['content']['id'])) return ret else: raise ServiceError("No file or url.") chunk_uploads = patterns('canvas.upload') api = api_decorator(chunk_uploads) @api('upload') def upload_chunk(request, data): chunk_name = str(uuid.uuid4()) redis.setex("chunk:{0}".format(chunk_name), data, 60 * 60) return { 'chunk_name': chunk_name, } @api('combine') def combine_upload_chunks(request, chunks, metadata, is_quest=False): keys = ['chunk:{0}'.format(chunk) for chunk in chunks]