コード例 #1
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))
コード例 #2
0
    def get(self):

        self.set_content_text_plain()
        response = {}

        # get auth token, if present
        auth_token = urllib.quote(
            str(self.get_request_param(fh.auth_token_parm)))
        user_data_str = urllib2.urlopen(
            'https://www.googleapis.com/oauth2/v3/tokeninfo?id_token=' +
            auth_token).read()
        user_data = json.loads(user_data_str)

        # get user from auth token
        user = StreamUser.get_by_email(user_data['email'])

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

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

        # write some stream info
        response = [
            s.stream.get().get_meta_dict_with_most_recent_image_url()
            for s in sub_streams
        ]

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

        self.set_content_text_plain()
        response = {}

        search_string = self.get_request_param(fh.search_string_parm)
        if search_string is None:
            fh.bad_request_error(self, "Search string not found")
            return

        response[fh.tags_parm] = fh.search_tag_index(search_string)
        self.write_response(json.dumps(response))
コード例 #4
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:
            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)

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

        # get the user
        user = StreamUser.get_by_id(user_id)

        # delete subscription
        result = StreamSubscriber.delete(stream, user)
        if result:
            response['status'] = "Subscription deleted"
        else:
            response['status'] = "Subscription not found"

        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)
コード例 #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 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))
コード例 #6
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))
コード例 #7
0
    def get(self):

        self.set_content_text_plain()
        response = {}

        tag_name = self.get_request_param(FH.tag_name_parm)
        response[FH.tag_name_parm] = tag_name

        if tag_name is None or tag_name == '':
            FH.bad_request_error(self, response, "No tag name found")
            return

        tag = Tag.create(tag_name)
        if not tag:
            FH.bad_request_error(self, response,
                                 "Tag {} already exists".format(tag_name))
            return

        # add tag to document index for searching
        FH.searchablize_tag(tag, response)

        response['status'] = "Created new tag: {}".format(tag_name)
        self.write_response(json.dumps(response))
コード例 #8
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 current user
        user_id = self.get_request_param(fh.user_id_parm)
        response[fh.user_id_parm] = user_id
        if user_id is None or user_id == "":
            fh.bad_request_error(
                self, response,
                'No parameter {} found'.format(fh.user_id_parm))
            return

        # create new subscription
        sub = StreamSubscriber.get_by_stream_id_and_user_id(stream_id, user_id)
        if sub is not None:
            response['status'] = True
        else:
            response['status'] = False

        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)
コード例 #9
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)
コード例 #10
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)
コード例 #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))