Exemplo n.º 1
0
    def context(self, data, check, mutator):
        """Handler for default HTTP GET request."""
        context = {'page_name': 'Student form upload'}

        form_data = {}
        if data.ndb_profile.student_data.consent_form:
            form_data['consent_form'] = blobstore.BlobInfo(
                data.ndb_profile.student_data.consent_form)
        if data.ndb_profile.student_data.enrollment_form:
            form_data['enrollment_form'] = blobstore.BlobInfo(
                data.ndb_profile.student_data.enrollment_form)

        upload_form = UploadForm(data, initial=form_data)

        if profile_logic.hasStudentFormsUploaded(data.ndb_profile):
            kwargs = dicts.filter(data.kwargs, ['sponsor', 'program'])
            claim_tasks_url = reverse('gci_list_tasks', kwargs=kwargs)
            context['form_instructions'] = CLAIM_TASKS_NOW % claim_tasks_url
        # TODO(ljvderijk): This can be removed when AppEngine supports 200 response
        # in the BlobStore API.
        if data.GET:
            for key, error in data.GET.iteritems():
                if not key.startswith('error_'):
                    continue
                field_name = key.split('error_', 1)[1]
                upload_form.errors[field_name] = upload_form.error_class(
                    [error])

        context['form'] = upload_form
        context['form_verification_awaiting'] = (
            ci_profile_logic.isFormVerificationAwaiting(data.ndb_profile))

        return context
Exemplo n.º 2
0
    def as_json(self):
        attrs = {
            'id': self.key.id(),
            'location': {
                'latitude': self.location.lat,
                'longitude': self.location.lon,
            },
            'upvotes': self.upvotes,
            'downvotes': self.downvotes,
            'created_at': self.created_at.isoformat(),
            'viewed_at':
            self.viewed_at.isoformat() if self.viewed_at else None,
            'uploader': self.uploader,
            'view_count': self.view_count,
        }
        if self.video:
            attrs['video_url'] = '/video/download/%s' % blobstore.BlobInfo(
                self.video).key()
        else:
            attrs['video_url'] = blobstore.create_upload_url(
                '/video/upload/%s' % self.key.id())

        if self.thumbnail:
            attrs[
                'thumbnail_url'] = '/thumbnail/download/%s' % blobstore.BlobInfo(
                    self.thumbnail).key()
        else:
            attrs['thumbnail_url'] = blobstore.create_upload_url(
                '/thumbnail/upload/%s' % self.key.id())
        return attrs
Exemplo n.º 3
0
    def post(self):
        upload = self.get_uploads()[0]

        # Path
        root = self.session.get('root')
        path = self.request.POST.get('path')
        if path != '':
            fpath = root + '/' + path
        else:
            fpath = root

        fname = upload.filename
        fsize = round(blobstore.BlobInfo(upload.key()).size / 1000, 2)
        if fsize < 1:
            fsize = 1
        fdate = blobstore.BlobInfo(upload.key()).creation

        qry = File.query(File.path == fpath, File.name == fname)
        result = qry.fetch()
        if len(result) > 0:
            result[0].key.delete()
            blobstore.delete(result[0].blob_key)

            # Get file info from blobinfo
        file = File(name=fname,
                    path=fpath,
                    blob_key=upload.key(),
                    size=str(fsize),
                    cdate=str(fdate.strftime("%m/%d/%Y %H:%M:%S")))
        file.put()

        # self.response.write(upload.filename)
        self.redirect('/?path=' + path)
Exemplo n.º 4
0
    def post(self):
        uploads = self.get_uploads()
        for upload in uploads:
            fileName = blobstore.BlobInfo(upload.key()).filename
            fileSize = blobstore.BlobInfo(upload.key()).size
            createdAt = blobstore.BlobInfo(upload.key()).creation
            main.addFile(upload, fileName, fileSize, createdAt)

        self.redirect('/')
Exemplo n.º 5
0
    def validate(self, value):
        """Validate that assigned value is BlobInfo.

    Automatically converts from strings and BlobKey instances.
    """
        if isinstance(value, (basestring)):
            value = blobstore.BlobInfo(blobstore.BlobKey(value))
        elif isinstance(value, blobstore.BlobKey):
            value = blobstore.BlobInfo(value)
        return super(MigratingBlobReferenceProperty, self).validate(value)
Exemplo n.º 6
0
    def post(self):
        # getting variable that include necessary informations for uploading file.
        upload = self.get_uploads()[0]

        # getting path
        root = self.session.get('root')
        path = self.request.POST.get('path')
        if path != '':
            file_path = root + '/' + path
        else:
            file_path = root

        # Get file info from blobinfo
        file_name = upload.filename

        # Check if it duplicates
        if checkDuplicatedFile(root, file_name):
            # Delete the file from blobstore
            blobstore.BlobInfo(upload.key()).delete()

            # Display error message
            self.redirect('/?path=' + path + '&err=File already exists.')
            return

        file_size = int(round(blobstore.BlobInfo(upload.key()).size / 1000))
        if file_size < 1:
            file_size = 1
        file_date = blobstore.BlobInfo(upload.key()).creation

        # When uploading file, if the file with same name and path is saved in blobstore, delete earlier file and rewrite that file
        query_result = File.query()
        query_result = query_result.filter(File.path == file_path)
        query_result = query_result.filter(File.name == file_name)
        result = query_result.fetch()
        if len(result) > 0:
            result[0].key.delete()
            blobstore.delete(result[0].blob_key)

        # file update to datastore
        file = File()
        file.name = file_name
        file.path = file_path
        file.blob_key = upload.key()
        file.size = file_size
        file.cdate = str(file_date.strftime("%m/%d/%Y %H:%M:%S"))
        file.put()

        self.redirect('/?path=' + path)
Exemplo n.º 7
0
    def post(self):
        upload = self.get_uploads()[0]
        blobinfo = blobstore.BlobInfo(upload.key())

        new_post = Post()
        new_post.blob = upload.key()
        caption = self.request.get('caption')
        new_post.caption = caption

        now = datetime.now()
        new_post.time = str(now)
        new_post.hour = str(now.hour) + ':' + str(now.minute) + '    ' + str(
            now.day) + '-' + str(now.month) + '-' + str(now.year)

        user = users.get_current_user()
        myuser_key = ndb.Key('MyUser', user.user_id())
        myuser = myuser_key.get()
        new_post.user = myuser_key

        post_key = new_post.put()

        #post_id = post_key.id()

        myuser.users_posts.append(post_key)
        myuser.put()
        self.redirect('/')
Exemplo n.º 8
0
    def upload_creative_asset(self,
                              asset_type,
                              filename,
                              asset_key,
                              advertiser_id,
                              retry_count=0):
        try:
            creative_asset = {
                'assetIdentifier': {
                    'name': filename,
                    'type': asset_type
                }
            }

            asset_file = blobstore.BlobReader(asset_key)
            mimetype = blobstore.BlobInfo(asset_key).content_type
            media = http.MediaIoBaseUpload(asset_file,
                                           mimetype=mimetype,
                                           resumable=False)

            return self.service.creativeAssets().insert(
                advertiserId=advertiser_id,
                profileId=self.profile_id,
                media_body=media,
                body=creative_asset).execute()
        except http.HttpError, e:
            if e.resp.status in [403, 500, 503
                                 ] and retry_count < self.MAX_RETRIES:
                return self.upload_creative_asset(asset_type, filename,
                                                  asset_key, advertiser_id,
                                                  retry_count + 1)
            else:
                raise
Exemplo n.º 9
0
    def post(self):
        user = users.get_current_user()
        presentfolder = self.request.get('presentfolder')
        upload = self.get_uploads()[0]
        blobinfo = blobstore.BlobInfo(upload.key())
        file = blobinfo.filename
        flag = 0

        dir_key = ndb.Key('directory', presentfolder)
        dir = dir_key.get()
        if not dir:
            dir = directory(id=presentfolder)
        dir.file = file
        dir.directoryName = presentfolder
        dir.fileBool = True
        dir.blobname = upload.key()

        my_user_key = ndb.Key('MyUser', user.user_id())
        my_user = my_user_key.get()
        if my_user == None:
            my_user = MyUser(id=user.user_id())
        my_user.username = user.user_id()

        for x in my_user.directory:
            if x.file == file:
                flag = 1

        if flag == 0:
            my_user.directory.append(dir)
            my_user.put()

        self.redirect('/')
    def post(self):
        error_message = ''
        upload = self.get_uploads()[0]
        blobinfo = blobstore.BlobInfo(upload.key())
        filename = blobinfo.filename
        directory_id = self.request.get('directory_id')
        directory_key = ndb.Key(Directory, directory_id)
        directory = directory_key.get()

        file_exists_counter = 0

        for each in directory.list_of_files:
            if each == filename:
                error_message = 'Sorry a file with this name exists'
                file_exists_counter = file_exists_counter + 1
                break

        if file_exists_counter == 0:
            directory.list_of_files.append(filename)
            directory.blobs.append(upload.key())
            directory.put()
            self.redirect('/')

        else:
            user = users.get_current_user()
            logout = users.create_logout_url('/')
            template_values = {
                'user': user,
                'logout': logout,
                'error_message': error_message,
            }
            template = JINJA_ENVIRONMENT.get_template('error.html')
            self.response.write(template.render(template_values))
Exemplo n.º 11
0
    def post(self):
        self.response.headers['Content-Type'] = 'text/html'
        user = users.get_current_user()
        myuser_key = ndb.Key(MyUser, user.user_id())
        myuser = myuser_key.get()

        if (self.request.get('button') == 'Add Image'):
            h_caption = self.request.get('caption')
            upload = self.get_uploads()[0]
            blobinfo = blobstore.BlobInfo(upload.key())

            #datetime_obj = datetime.now()

            post_obj = Post()
            post_obj.image = upload.key()
            post_obj.caption = h_caption
            post_obj.creator = myuser.email_address
            post_obj.posting_time = datetime.now().strftime(
                "%Y-%m-%d %H:%M:%S")
            post_obj.key = ndb.Key('Post', str(upload.key()))

            postkey = post_obj.put()

            logging.info("DEBUG")
            #print(postkey)
            logging.info("END")

            myuser.posts.append(post_obj.key)
            myuser.put()

            self.redirect('/')
Exemplo n.º 12
0
 def __save(self, con, cat, stts):
     stts['csz'] = len(con)
     stts['key'] = model.save_blob(con, "%(cat)s.zip" % {'cat': cat})
     blob_info = blobstore.BlobInfo(blobstore.BlobKey(stts['key']))
     zr = blob_info.open()
     zi = zipfile.ZipFile(zr, 'r')
     if len(zi.infolist()) != 1:
         zi.close()
         zr.close()
         logging.error('No ZIP entry.')
         return None
     for zip_info in zi.infolist():
         t = zip_info.date_time
         stts['ts'] = "%(y)04d-%(m)02d-%(d)02d %(H)02d:%(M)02d:%(S)02d" % {
             'y': t[0],
             'm': t[1],
             'd': t[2],
             'H': t[3],
             'M': t[4],
             'S': t[5]
         }
         stts['dsz'] = zip_info.file_size
         stts['cnt'] = 1
         break
     zi.close()
     zr.close()
Exemplo n.º 13
0
    def post(self):

        user = users.get_current_user()
        if user == None:
            self.redirect('/')
        else:

            current_user = MyUser.get(user.user_id())

            dir_id = self.request.get('dir')

            owner_user, directory, parent = check(current_user.key, dir_id)

            if owner_user and directory and (
                    directory.is_users_dir(current_user.key)
                    or has_write_permission(current_user.key, parent)):

                for upload in self.get_uploads():

                    blobinfo = blobstore.BlobInfo(upload.key())

                    my_file = File(name=blobinfo.filename, blob=upload.key())

                    if not directory.file_exists(my_file.name):
                        directory.files.append(my_file)

                directory.put()

                self.redirect(self.request.referer)
Exemplo n.º 14
0
    def post(self):

        upload = self.get_uploads()[0]
        blobinfo = blobstore.BlobInfo(upload.key())
        user = users.get_current_user()
        current_folder = self.request.get('current_folder')
        file_name = current_folder + blobinfo.filename
        file_key = ndb.Key('FileInfo', user.email() + file_name)
        file = file_key.get()
        if file is not None:
            message = "Error: file path exists (" + file_name + ")"
        else:
            file = FileInfo(id=user.email() + file_name)
            file.name = file_name
            file.blob = blobinfo.key()
            parent = ndb.Key('FolderInfo', user.email() + current_folder).get()
            parent.files.append(file.key)
            file.parent = parent.key
            file.put()
            parent.put()
            message = "Success: file uploaded (" + file_name + ")"

        time.sleep(1)
        self.redirect("/?current_folder=" + current_folder + "&message=" +
                      message)
Exemplo n.º 15
0
 def convert(self):
     """データ変換処理を実行する。"""
     stts = {}
     key = self.get_stt_prev('key')
     blob_info = blobstore.BlobInfo(blobstore.BlobKey(key))
     zr = blob_info.open()
     zi = zipfile.ZipFile(zr, 'r')
     if len(zi.infolist()) < 1:
         zi.close()
         zr.close()
         return None
     zw = StringIO.StringIO()
     zo = zipfile.ZipFile(zw, 'w', zipfile.ZIP_DEFLATED)
     self.proc_all(zi, zo, stts)
     zo.close()
     zi.close()
     zr.close()
     con = zw.getvalue()
     stts['csz'] = len(con)
     sha1 = hashlib.sha1()
     sha1.update(con)
     stts['dig'] = sha1.hexdigest()
     stts['key'] = save_blob(
         con, '%(tsk)s_%(cat)s-%(ts)s.zip' % {
             'cat': self.get_cat(),
             'tsk': self.get_task(),
             'ts': self.get_ts_short(),
         })
     self.set_stt(stts)
     return 'ok'
Exemplo n.º 16
0
    def post(self, data, check, mutator):
        """Handles POST requests for the bulk create page."""
        form = UploadForm(data,
                          data=data.POST,
                          files=data.request.file_uploads)

        if not form.is_valid():
            # we are not storing this form, remove the uploaded blobs from the cloud
            for f in data.request.file_uploads.itervalues():
                f.delete()

            # since this is a file upload we must return a 300 response
            extra_args = []
            for field, error in form.errors.iteritems():
                extra_args.append('error_%s=%s' % (field, error.as_text()))

            return data.redirect.to('gci_student_form_upload',
                                    extra=extra_args)

        # delete existing data
        cleaned_data = form.cleaned_data
        for field_name in data.request.file_uploads.keys():
            if field_name in cleaned_data:
                existing = getattr(data.ndb_profile.student_data, field_name)
                if existing:
                    blobstore.BlobInfo(existing).delete()

        form.save()

        # TODO(nathaniel): make this .program() call unnecessary.
        data.redirect.program()

        return data.redirect.to('gci_student_form_upload')
Exemplo n.º 17
0
    def get(self, data, check, mutator):
        if self._tax(data):
            blob_key = self._profile(data).student_data.tax_form
        else:
            blob_key = self._profile(data).student_data.enrollment_form

        return bs_helper.sendBlob(blobstore.BlobInfo(blob_key))
Exemplo n.º 18
0
    def post(self):
        uploads = self.get_uploads()
        for file in uploads:
            filename = blobstore.BlobInfo(file.key()).filename

            user = users.get_current_user()
            my_user_key = ndb.Key(MyUser, user.user_id())
            my_user = my_user_key.get()

            currDirObj = my_user.currDir.get()
            path = ''
            if functions.isRootDirectory(my_user):
                path = currDirObj.dirPath + filename
            else:
                path = currDirObj.dirPath + '/' + filename

            file_id = my_user.key.id() + path
            file_key = ndb.Key(File, file_id)
            logging.info(file_id)
            if functions.exists(file_key, currDirObj.files):
                file_object = File(id=file_id)
                file_object.fileName = filename
                file_object.data = file.key()
                file_object.put()

                currDirObj.files.append(file_key)
                currDirObj.put()

            else:
                # Delete uploaded file from the blobstore
                blobstore.delete(file.key())
                logging.debug("File with the same name already exists!")

        self.redirect('/')
Exemplo n.º 19
0
 def get(self, project_id):
     project_id = int(project_id)
     project = model.show_project(project_id)
     project_feed_key = project.feed
     project_feed_info = blobstore.BlobInfo(project.feed)
     if not blobstore.get(project_feed_key):
         self.error(404)
     else:
         self.send_blob(project_feed_info, save_as=True)
Exemplo n.º 20
0
 def blob(self):
     if self._blob is not None:
         return self._blob
     else:
         if self.__dict__.has_key('blob_key') and self.blob_key is not None:
             self._blob = blobstore.BlobInfo(blobstore.BlobKey(self.blob_key))
             return self._blob
         else:
             return None
Exemplo n.º 21
0
    def make_value_from_datastore(self, value):
        """Translate datastore value to BlobInfo."""
        if value is None:
            return None

        # The two lines of difference of MigratingBlobReferenceProperty:
        if isinstance(value, basestring):
            value = blobstore.BlobKey(value)

        return blobstore.BlobInfo(value)
Exemplo n.º 22
0
 def post(self):
     upload = self.get_uploads()[0]
     blobinfo = blobstore.BlobInfo(upload.key())
     filename = blobinfo.filename
     collection_key = ndb.Key('BlobCollection', 1)
     collection = collection_key.get()
     collection.filenames.append(filename)
     collection.blobs.append(upload.key())
     collection.put()
     self.redirect('/')
 def get(self, urlsafe_key):
     urlsafe_key = str(urllib.unquote(urlsafe_key))
     key = ndb.Key(urlsafe=urlsafe_key)
     if key.kind() == "Newsletter":
         newsletter = key.get()
         blobstore.BlobInfo(newsletter.NewsletterBlob).delete()
         key.delete()
     else:
         self.abort(400, "Can only delete kind 'Newsletter'")
     self.redirect('/manage/newsletter_archive')
Exemplo n.º 24
0
 def post(self):
     up = self.get_uploads()
     if len(up) == 0:
         display.give_error(self, '/', "No File Selected")
     else:
         global e
         for upload in up:
             filename = blobstore.BlobInfo(upload.key()).filename
             e = file_op.adding(upload, filename, datetime.datetime.now())
             display.give_error(self, '/', e)
Exemplo n.º 25
0
    def post(self):
        uploads = self.get_uploads()

        # upload all the files that came in the request
        for upload in uploads:
            # Get file name from the info of the file
            filename = blobstore.BlobInfo(upload.key()).filename

            functions.addFile(upload, filename)

        self.redirect('/')
Exemplo n.º 26
0
    def post(self):
        self.response.headers['Content-Type'] = 'text/html'

        url_string = ''
        url = ''

        user = users.get_current_user()

        if user:
            url = users.create_logout_url(self.request.uri)
            url_string = 'logout'
            myuser_details = ndb.Key('MyUser', user.email())
            myuser = myuser_details.get()
            if myuser == None:
                myuser = MyUser(id=user.email())
                myuser.email_address = user.email()
                myuser.userId = user.nickname()
                welcome = 'Welcome to the application'
                myuser.put()

            upload = self.get_uploads()[0]
            blobinfo = blobstore.BlobInfo(upload.key())
            image_url = get_serving_url(blobinfo)
            caption = self.request.get('caption')
            collection_key = ndb.Key('post', user.email())
            collection_key = collection_key.get()

            if collection_key == None:
                collection_key = post(id=user.email())
                collection_key.photo_url.append(image_url)
                collection_key.email_address = user.email()
                collection_key.caption.append(caption)
            else:
                collection_key.photo_url.append(image_url)
                collection_key.email_address = user.email()
                collection_key.caption.append(caption)

            collection_key.put()
            self.redirect('/')

        else:
            url = users.create_login_url(self.request.uri)
            url_string = 'login'
            self.redirect('/')

        template_values = {
            'url': url,
            'url_string': url_string,
            'user': user,
            'collection_key': collection_key,
        }

        template = JINJA_ENVIRONMENT.get_template('photocomment.html')
        self.response.write(template.render(template_values))
  def asset_to_upload(self, asset_filename):
    asset_key = None
    for asset in self.project.assets:
      if asset_filename.lower() == blobstore.BlobInfo(asset).filename.lower():
        asset_key = asset
        break

    if not asset_key:
      raise ValueError(
          'Feed contains a reference to "%s" that has not yet been uploaded as an asset to this project!'
          % asset_filename)

    return asset_key
Exemplo n.º 28
0
    def get(self, data, check, mutator):
        """Allows hosts to download the student forms."""
        if url_names.CONSENT_FORM_GET_PARAM in data.GET:
            download = data.url_ndb_profile.student_data.consent_form
        elif url_names.ENROLLMENT_FORM_GET_PARAM in data.GET:
            download = data.url_ndb_profile.student_data.enrollment_form
        else:
            raise exception.BadRequest(message='No file requested')

        # download has been requested
        if download:
            return bs_helper.sendBlob(blobstore.BlobInfo(download))
        else:
            raise exception.NotFound(message='File not found')
Exemplo n.º 29
0
    def post(self):
        user = users.get_current_user()
        my_user_key = ndb.Key('User', user.user_id())
        my_user = my_user_key.get()
        upload = None
        msg = "Invalid form input"

        if len(self.get_uploads()) >= 1:
            upload = self.get_uploads()[0]

            blobinfo = blobstore.BlobInfo(upload.key())
            ext = blobinfo.filename.split(".")[1]
            if str(ext).upper() == "JPG" or str(ext).upper() == "PNG":
                filename = "post_" + str(
                    time.mktime(datetime.now().timetuple())) + "." + ext
                lastname = self.request.get('lastname')
                firstname = self.request.get('firstname')
                username = self.request.get('username')

                if self.request.get('lastname') == '' or self.request.get(
                        'firstname') == '' or self.request.get(
                            'username') == '':
                    url = '/update-profile?msg=' + msg + '&file=Please select upload image&lastname=' + lastname + '&firstname=' + firstname + '&username='******'BlobCollection', 1)
                    collection = collection_key.get()
                    collection.filenames.append(filename)
                    collection.blobs.append(upload.key())
                    collection.put()

                    my_user.lastname = lastname
                    my_user.firstname = firstname
                    my_user.username = username
                    my_user.image_label = filename
                    my_user.email = user.email()
                    my_user.put()
                    url = "/profile"
                    self.redirect(url)
                    return
            else:
                url = '/update-profile?msg=' + msg + '&file=Only JPG or PNG files is allowed'
                self.redirect(url)
                return
        else:
            url = '/update-profile?msg=' + msg + '&file=Please select upload image'
            self.redirect(url)
            return
Exemplo n.º 30
0
    def get(self, data, check, mutator):
        """Handles download of the forms otherwise resumes normal rendering."""
        if 'consent_form' not in data.GET and 'enrollment_form' not in data.GET:
            # no download request has been specified
            return super(StudentFormUpload, self).get(data, check, mutator)
        elif 'consent_form' in data.GET:
            download = data.ndb_profile.student_data.consent_form
        elif 'enrollment_form' in data.GET:
            download = data.ndb_profile.student_data.enrollment_form

        # download has been requested
        if download:
            return bs_helper.sendBlob(blobstore.BlobInfo(download))
        else:
            raise exception.NotFound(message='File not found')