コード例 #1
0
    def get(self):

        self.set_content_text_plain()
        response = {}

        # get stream name
        stream_id = self.get_request_param(fh.stream_id_parm)
        response[fh.stream_id_parm] = stream_id
        if stream_id is None or stream_id == "":
            fh.bad_request_error(
                self, response,
                'No parameter {} found'.format(fh.stream_id_parm))
            return

        # get the stream
        stream = Stream.get_by_id(stream_id)

        if stream is None:
            fh.bad_request_error(self, response, 'Invalid Stream ID')
            return

        # check that user is the owner of the stream
        user_id = self.get_request_param(fh.user_id_parm)
        if user_id != stream.get_owner_from_db().user_id():
            fh.bad_request_error(self, response, 'Not stream owner')
            return

        # remove stream name entries from the search index
        fh.remove_stream_from_search_index(stream, response)

        # delete the stream
        stream.delete()

        self.write_response(json.dumps(response))
コード例 #2
0
    def get(self):

        self.set_content_text_plain()
        response = {}

        # get current user
        user_id = self.get_request_param(fh.user_id_parm)
        if user_id in ['', None]:
            fh.bad_request_error(
                self, response,
                'No parameter {} found'.format(fh.user_id_parm))
            return

        user = StreamUser.get_by_id(user_id)
        if user is None:
            fh.bad_request_error(self, response, 'Invalid user')
            return

        # query for all streams owned by user
        my_streams = Stream.get_ids_by_owner(user)

        # query for all streams subscribed to by user
        sub_streams = StreamSubscriber.get_by_user(user)

        # write some stream info
        response['owned_streams'] = [s for s in my_streams]
        response['subscribed_streams'] = [s.stream.id() for s in sub_streams]
        self.write_response(json.dumps(response))
コード例 #3
0
    def get(self):

        #If parameter of id=, then return only the items with that streams ID.
        #Otherwise return all items.
        
        self.set_content_text_json()
        response = []
        
        streamid = self.get_request_param("streamid")
        
        if (streamid == None) or (streamid == ''):        
            my_stream_items = StreamItem.get_all_stream_items()

        else:
            my_stream_items = StreamItem.get_stream_items_by_key(long(streamid))
        
        for item in my_stream_items:
            dictItem = {"streamid": item.stream.id(),
                        "streamname": Stream.get_by_id(item.stream.id()).name,
                        "imageurl": item.URL,
                        "dateadded": item.dateAdded.strftime('%Y-%m-%d %H:%M:%S'),
                        "lat": item.latitude,
                        "lng": item.longitude}
                
            response.append(dictItem)
                
        print(response)

        self.write_response(json.dumps(response))
コード例 #4
0
    def get(self):

        self.set_content_text_plain()
        response = {}

        # get current user
        owner_id = self.get_request_param(fh.user_id_parm)
        owner = StreamUser.get_by_id(owner_id)

        if owner is None:
            fh.bad_request_error(self, response, 'Not logged in')
            return

        # get stream name
        stream_name = self.get_request_param(fh.stream_name_parm)
        response[fh.stream_name_parm] = stream_name
        if stream_name is None or stream_name == "":
            fh.bad_request_error(
                self, response,
                'No parameter {} found'.format(fh.stream_name_parm))
            return

        # get cover image URL
        cover_url = self.get_request_param(fh.cover_url_parm)
        response[fh.cover_url_parm] = cover_url

        # create new stream
        stream = Stream.create(name=stream_name,
                               owner=owner,
                               cover_url=cover_url)

        if stream is None:
            fh.bad_request_error(
                self, response,
                'Stream {0} already exists for user {1}'.format(
                    stream_name, owner.nickName))
            return

        response[fh.stream_id_parm] = stream.key.id()

        # add stream to document index for searching
        fh.searchablize_stream(stream, response)

        # process subscribers list
        subs = self.get_request_param(fh.subscribers_parm)
        response[fh.subscribers_parm] = subs
        num_added = StreamSubscriber.add_subscribers_by_emails(
            stream, subs.split(';'))
        response['num_new_subscribers'] = num_added

        # process tags list
        #TODO: tags list in create
        tags = self.get_request_param(fh.tags_parm)
        StreamTag.add_tags_to_stream_by_name(stream, tags.split(';'))
        response[fh.tags_parm] = tags

        response['status'] = "Created new stream: {}".format(stream_name)
        self.write_response(json.dumps(response))
コード例 #5
0
    def get(self):

        self.set_content_text_plain()
        response = {}

        # get stream name
        stream_id = self.get_request_param(fh.stream_id_parm)
        response[fh.stream_id_parm] = stream_id
        if stream_id in [None, '']:
            fh.bad_request_error(
                self, response,
                'No parameter {} found'.format(fh.stream_id_parm))
            return

        # get the stream
        stream = Stream.get_by_id(stream_id)

        if stream is None:
            fh.bad_request_error(self, response, 'Invalid Stream ID')
            return

        # get tag name
        tag_name = self.get_request_param(fh.tag_name_parm)
        if tag_name in [None, '']:
            fh.bad_request_error(
                self, response,
                'No parameter {} found'.format(fh.tag_name_parm))
            return

        # check how many streams have this tag
        st = StreamTag.get_batch_by_tag_name(tag_name)
        n_streams = len(st)

        # get the tag
        tag = Tag.get_by_name(tag_name)
        if tag is not None:
            # remove streamtags
            StreamTag.delete_tag_from_stream(stream, tag)

            # block until new tag is found
            time.sleep(0.01)
            while StreamTag.get_by_stream_and_tag(stream, tag) is not None:
                time.sleep(0.01)

            if n_streams == 1:
                fh.remove_tag_from_search_index(tag_name, {})
                tag.delete()

        redirect_url = str(self.get_request_param(fh.redirect_parm))

        if redirect_url in ['', None]:
            self.write_response(json.dumps(response))
        else:
            self.redirect(redirect_url)
コード例 #6
0
    def get(self):

        self.set_content_text_json()
        response = []

        # get stream IDs
        # if none found, return all
        stream_id = self.get_request_param(fh.stream_id_parm)
        if stream_id in ['', None]:
            all_streams = Stream.get_all_streams_by_updated()
            for stream in all_streams:
                response.append(stream.get_meta_dict())
        else:
            ids = json.loads(stream_id)
            try:
                for id in ids:
                    response.append(Stream.get_meta_dict_by_id(id))
            except TypeError:
                response.append(Stream.get_meta_dict_by_id(ids))

        print(response)

        self.write_response(json.dumps(response))
コード例 #7
0
    def get(self):

        self.set_content_text_plain()
        response = {}

        # get stream name
        stream_id = self.get_request_param(fh.stream_id_parm)
        response[fh.stream_id_parm] = stream_id
        if stream_id in ['', None]:
            fh.bad_request_error(
                self, response,
                'No parameter {} found'.format(fh.stream_id_parm))
            return

        # get the stream
        stream = Stream.get_by_id(stream_id)

        if stream is None:
            fh.bad_request_error(self, response, 'Invalid Stream ID')
            return

        # get tag name
        tag_name = self.get_request_param(fh.tag_name_parm)
        if tag_name in ['', None]:
            fh.bad_request_error(
                self, response,
                'No parameter {} found'.format(fh.tag_name_parm))
            return

        # get the tag
        tag = Tag.get_or_create_by_name(tag_name.strip().lower())

        # create new streamtag
        StreamTag.add_tags_to_stream_by_name(stream, [tag.name])

        # block until new tag is found
        time.sleep(0.01)
        while StreamTag.get_by_stream_and_tag(stream, tag) is None:
            time.sleep(0.01)

        redirect_url = str(self.get_request_param(fh.redirect_parm))

        if redirect_url in ['', None]:
            self.write_response(json.dumps(response))
        else:
            self.redirect(redirect_url)
コード例 #8
0
    def get(self):

        user = StreamUser.get_current_user(self)

        if user:
            login_url = fh.get_logout_url(self, '/')
            login_text = 'Sign out'
        else:
            self.redirect("/")
            return

        template_values = {
            'html_template': 'MasterTemplate.html',
            'user': user.nickName,
            'login_url': login_url,
            'login_text': login_text,
            'stream_name_parm': fh.stream_name_parm,
            'tags_parm': fh.tags_parm,
            'cover_url_parm': fh.cover_url_parm,
            'subs_parm': fh.subscribers_parm
        }

        search_string = self.get_request_param(fh.search_string_parm)
        if search_string is not None:
            template_values['search_string'] = search_string

        tags = self.get_request_param(fh.tags_parm)
        if tags not in [None, '']:
            s = urllib.unquote(tags).decode('utf8')
            tags = eval(s)
            template_values['search_tags'] = [{
                'name': tag,
                'url': fh.get_viewtag_url(tag)
            } for tag in tags]

        stream_ids = self.get_request_param(fh.stream_id_parm)
        if stream_ids not in [None, '']:
            s = urllib.unquote(stream_ids).decode('utf8')
            ids = eval(s)
            template_values['search_streams'] = Stream.get_batch_by_ids(ids)

        path = os.path.join(os.path.dirname(__file__),
                            '../../templates/StreamSearch.html')
        self.set_content_text_html()
        self.write_response(fh.render_html_template(path, template_values))
コード例 #9
0
def rebuild_stream_index():
    # get all existing stream names
    all_streams = Stream.get_all_streams()

    # define new tag search index name
    if fh.get_stream_index_name() == "stream_index":
        new_index_name = "stream_index_alt"
    else:
        new_index_name = "stream_index"

    # empty the new index
    empty_index(new_index_name)

    # add all tags to new index
    for stream in all_streams:
        fh.searchablize_tag_or_stream(stream, new_index_name, {})

    # switch primary search
    fh.set_stream_index_name(new_index_name)
コード例 #10
0
    def post(self):
        user = StreamUser.get_current_user(self)

        if user is None:
            self.redirect("/")
            return

        # make call to deleteStream service

        button = self.get_request_param('button')
        if button == "Cancel":
            self.redirect('/manage?{0}=Delete cancelled'.format(fh.message_parm))
            return

        reg = re.compile(r'^delete_(.*)')

        matches = [reg.match(key) for key in self.get_request_parameter_dictionary().keys()]
        stream_ids = [str(match.groups()[0]) for match in matches if match is not None]

        message = ""
        for id in stream_ids:
            delete_stream_url = 'http://{0}/services/deletestream?{1}={2};{3}={4}'.format(os.environ['HTTP_HOST'],
                                                                                          fh.stream_id_parm,
                                                                                          id,
                                                                                          fh.user_id_parm,
                                                                                          StreamUser.get_current_user(self).user_id())
            try:
                result = urllib2.urlopen(delete_stream_url)
                message = "{0}, {1}".format(message, result)
            except urllib2.HTTPError:
                self.redirect('/error?{0}={1}'.format(fh.message_parm, 'Error deleting stream'))

        # try to wait until streams are really gone...
        for id in stream_ids:
            while Stream.get_by_id(id):
                pass

        self.redirect('http://{0}/manage?{1}={2}'.format(os.environ['HTTP_HOST'], fh.message_parm, 'Deleted streams'))
コード例 #11
0
    def post(self):
        response = {}

        # get current user
        try:
            user = StreamUser.get_current_user(self)
        except urllib2.HTTPError:
            fh.bad_request_error(self, response, 'HTTPERROR... authToken = {}'.format(self.get_request_param(fh.auth_token_parm)))
            return
        if user is None:
            fh.bad_request_error(self, response, 'Not logged in')
            return

        stream_id = self.get_request_param(fh.stream_id_parm)
        if stream_id is None or stream_id == '':
            fh.bad_request_error(self, response, 'No parameter {} found'.format(fh.stream_id_parm))
            return

        # get the stream
        stream = Stream.get_by_id(stream_id)

        if stream is None:
            fh.bad_request_error(self, response, 'Invalid Stream ID')
            return

        n_ups = max(1, fh.get_num_uploads(self))
        print('\nThere were {} uploads\n'.format(n_ups))
        for i in range(n_ups):
            upload = fh.get_upload_from_filehandler(self, i)
            url = self.get_request_param(fh.url_parm)

            if upload is not None:
                image_url = fh.get_file_url(upload)
                name = upload.filename
            elif url not in [None, '']:
                try:
                    urllib2.urlopen(url)
                    image_url = url
                    name = upload
                except:
                    image_url = None
            else:
                image_url = None

            if image_url is not None:

                iscover = self.get_request_param('iscover')
                if iscover:
                    stream.set_cover_image_url(image_url)
                else:

                    lat = self.get_request_param('lat')
                    print "Latitude = ", lat
                    lng = self.get_request_param('lng')
                    print "Longitude = ", lng

                    # create StreamItem entity
                    item = StreamItem.create(
                        owner=user,
                        file=upload,
                        URL=image_url,
                        name=name,
                        stream=stream,
                        latitude=lat,
                        longitude=lng)

                    # update stream list of images
                    stream.add_item(item)

        # go back to viewstream page
        redirect = str(self.get_request_param(fh.redirect_parm))
        if redirect:
            self.redirect(redirect)
            return
        else:
            self.set_content_text_plain()
            response = {'status': 'Upload successful',
                        'image_url': image_url
                        }
            self.write_response(json.dumps(response))
            return
コード例 #12
0
    def get(self):

        self.set_content_text_plain()
        response = {}

        stream_id = self.get_request_param(fh.stream_id_parm)
        if stream_id is None or stream_id == '':
            fh.bad_request_error(
                self, response,
                'No parameter {} found'.format(fh.stream_id_parm))
            return

        # get the stream
        stream = Stream.get_by_id(stream_id)

        if stream is None:
            fh.bad_request_error(self, response, 'Invalid Stream ID')
            return

        # write some stream info
        response[fh.stream_name_parm] = stream.name
        response[fh.owner_parm] = stream.get_owner_from_db().nickName
        response[fh.num_images_parm] = len(stream.items)

        # get the indices
        ind1, ind2, status = fh.get_image_range_param(self)
        if ind1 is None or ind2 is None:
            fh.bad_request_error(self, response, status)
            return

        # query for images
        items, in1, ind2 = stream.get_items(ind1, ind2)
        image_urls = [item.URL for item in items]

        if len(image_urls) == 0:
            response[fh.image_range_parm] = None
        else:
            response[fh.image_range_parm] = "{0}-{1}".format(ind1, ind2)

        # get the tags
        stream_tags = StreamTag.get_batch_by_stream(stream)
        response[fh.tags_parm] = [t.get_tag_name() for t in stream_tags]

        #get lat/lng data for GeoMap
        item_loc = []
        for item in items:
            if item.getLatLng() is not None:
                oneItem = []

                oneItem.append(item.stream.id())
                oneItem.append(item.dateAdded.strftime("%Y-%m-%d %H:%M:%S"))

                if item.URL is None:
                    imageURL = fh.get_file_url(item.blobKey)
                else:
                    imageURL = item.URL

                oneItem.append(imageURL)
                oneItem.append(item.latitude)
                oneItem.append(item.longitude)

                item_loc.append(oneItem)

        response['streamItemsLoc'] = item_loc

        response['urls'] = image_urls
        self.write_response(json.dumps(response))