def post(self):
    method = self.request.get("_method")
    key = utils.url_to_entity_key(self.request.uri)
    if key:
      playlist = db.get(db.Key(key))
      if playlist:
        current_user = utils.get_current_user()
    
        #Get corresponding link
        library_item = playlist.library_item_for_user(current_user)
    
        if method == "PUT":
          need_version_control = False
          playlist_changed = False
      
          if(self.request.get('position')): #Rights: Can always update this
            current_user.re_sort_playlists(library_item, int(self.request.get('position')))        

          if (playlist.collaborative or library_item.is_owner): #Rights: Owner or collaborators can update this
            if playlist.smart:
              utils.parse_smart_filters(playlist, self.request)
              playlist_changed = True
            if self.request.get('tracks'):
              playlist.tracks = self.request.get('tracks')
              playlist_changed = True

            need_version_control = playlist.collaborative

          if library_item.is_owner: #Rights: Only owner can update this
            if(self.request.get('name') and len(self.request.get('name')) > 0):
              playlist.name = utils.strip_html(self.request.get('name'))
              playlist_changed = True
            if(self.request.get('collaborative')):
              playlist.collaborative = utils.convert_javascript_bool_to_python(self.request.get('collaborative'))
              playlist_changed = True
      
          if playlist_changed:
            if need_version_control: 
              if self.request.get('version') and not int(self.request.get('version')) < playlist.version:
                playlist.version += 1
                playlist.put()
                self.response.out.write(utils.status_code_json(200))
              else:
                self.response.out.write(library_item.serialize())
            else:
              playlist.put()
              self.response.out.write(utils.status_code_json(200))
          else:
            self.response.out.write(utils.status_code_json(200))
            
        elif method == "DELETE":
          library_item.delete()
          current_user.re_index_playlists()
          if not playlist.has_user():
            playlist.delete()
          self.response.out.write(utils.status_code_json(200))
Example #2
0
    def get(self):

        sc_api_url = "http://api.soundcloud.com"
        callback = self.request.get('callback')
        api_parameters = utils.extract_parameters(self.request.uri)
        if api_parameters:
            self.response.headers[
                "Content-Type"] = "text/javascript; charset=utf-8"
            self.response.headers[
                "Cache-Control"] = "max-age=10800, must-revalidate"  # testing force client caching, works in ff3 at least
            parameters_hash = str(hash(api_parameters))
            hit = memcache.get(parameters_hash)
            if hit is None:
                try:
                    response = urlfetch.fetch(
                        url=sc_api_url + urllib.quote_plus(api_parameters),
                        method=urlfetch.GET,
                        headers={
                            'Content-Type': 'text/javascript; charset=utf-8'
                        })
                    memcache.set(parameters_hash, response.content, 10800)
                    utils.print_with_callback(callback, response.content,
                                              self.response)
                except:
                    utils.print_with_callback(callback,
                                              utils.status_code_json(408),
                                              self.response)
            else:
                utils.print_with_callback(callback, hit, self.response)
 def post(self):
   app_user = utils.get_current_user()
   
   if(self.request.get('nickname')):
     app_user.nickname = self.request.get('nickname')
   
   app_user.put()
   
   self.response.out.write(utils.status_code_json(200))
Example #4
0
    def post(self):
        app_user = utils.get_current_user()

        if (self.request.get('nickname')):
            app_user.nickname = self.request.get('nickname')

        app_user.put()

        self.response.out.write(utils.status_code_json(200))
 def get(self):
   sc_api_url = "http://api.soundcloud.com/"
   callback = self.request.get('callback')
   api_parameters = utils.extract_parameters(self.request.uri)
   if api_parameters:
     self.response.headers["Content-Type"] = "text/javascript; charset=utf-8"
     self.response.headers["Cache-Control"] = "max-age=3600, must-revalidate" # testing force client caching, works in ff3 at least
     parameters_hash = str(hash(api_parameters))    
     hit = memcache.get(parameters_hash)
     if hit is None:
       try:
         response = urlfetch.fetch(url = sc_api_url + api_parameters,method=urlfetch.GET, headers={'Content-Type': 'text/javascript; charset=utf-8'})
         memcache.set(parameters_hash, response.content, 3600)
         utils.print_with_callback(callback, response.content. self.response)
       except:
         utils.print_with_callback(callback, utils.status_code_json(408), self.response)
     else:
       utils.print_with_callback(callback, hit, self.response)
Example #6
0
    def post(self):
        method = self.request.get("_method")
        key = utils.url_to_entity_key(self.request.uri)
        if key:
            playlist = db.get(db.Key(key))
            if playlist:
                current_user = utils.get_current_user()

                #Get corresponding link
                library_item = playlist.library_item_for_user(current_user)

                if method == "PUT":
                    need_version_control = False
                    playlist_changed = False

                    if (self.request.get('position')
                        ):  #Rights: Can always update this
                        current_user.re_sort_playlists(
                            library_item, int(self.request.get('position')))

                    if (playlist.collaborative or library_item.is_owner
                        ):  #Rights: Owner or collaborators can update this
                        if playlist.smart:
                            utils.parse_smart_filters(playlist, self.request)
                            playlist_changed = True
                        if self.request.get('tracks'):
                            playlist.tracks = self.request.get('tracks')
                            playlist_changed = True

                        need_version_control = playlist.collaborative

                    if library_item.is_owner:  #Rights: Only owner can update this
                        if (self.request.get('name')
                                and len(self.request.get('name')) > 0):
                            playlist.name = utils.strip_html(
                                self.request.get('name'))
                            playlist_changed = True
                        if (self.request.get('collaborative')):
                            playlist.collaborative = utils.convert_javascript_bool_to_python(
                                self.request.get('collaborative'))
                            playlist_changed = True

                    if playlist_changed:
                        if need_version_control:
                            if self.request.get('version') and not int(
                                    self.request.get(
                                        'version')) < playlist.version:
                                playlist.version += 1
                                playlist.put()
                                self.response.out.write(
                                    utils.status_code_json(200))
                            else:
                                self.response.out.write(
                                    library_item.serialize())
                        else:
                            playlist.put()
                            self.response.out.write(
                                utils.status_code_json(200))
                    else:
                        self.response.out.write(utils.status_code_json(200))

                elif method == "DELETE":
                    library_item.delete()
                    current_user.re_index_playlists()
                    if not playlist.has_user():
                        playlist.delete()
                    self.response.out.write(utils.status_code_json(200))