예제 #1
0
    def add_project(self, username):
        blob_info = None
        fileerror = 'Screenshot is mandatory'
        try:
            upload_files = self.get_uploads('screenshot')
        except:
            upload_files = None
        if upload_files:
            blob_info = upload_files[0]
            if 'image' in blob_info.content_type:
                screenshot = blob_info.key()
                screenshot_url = images.get_serving_url(screenshot)
                fileerror = ''
            else:
                # uploaded file wasn't an images, hence remove from the blobstore
                blobstore.delete(blob_info.key())
                fileerror = 'Invalid image type'
        else:
            fileerror = 'Please provide a screenshot of your project (max size: 1MB)'

        title = self.request.get('title').strip()
        titleerror = validate_project_title(title)

        url = self.request.get('proj_url').strip()
        urlerror = validate_project_url(url)

        short_description = self.request.get('short_description').strip()
        sderror = validate_project_short_description(short_description)

        if titleerror or urlerror or sderror or fileerror:
            if blob_info and not fileerror:
                # blob was okay but validation of some other field failed
                # hence remove it to avoid orphaned entry
                # also remove the serving url
                Project.remove_screenshot_blob(blob_info.key())

            user = User.get_user(username)
            template = 'profile/add_project.html'
            upload_url = blobstore.create_upload_url(
                self.uri_for('project-add', username=username),
                max_bytes_per_blob=MAX_IMG_SIZE)
            context = { 'user': user,
                        'username': username,
                        'title': title,
                        'proj_url': url,
                        'short_description': short_description,
                        'upload_url': upload_url,
                        'titleerror': titleerror,
                        'urlerror': urlerror,
                        'sderror': sderror,
                        'fileerror': fileerror}

            self.render_template(template, **context)
            return
        else:
            user = User.get_user(username)
            project_id = Project.add_project(title=title, screenshot=screenshot,
                screenshot_url=screenshot_url, url=url, short_description=short_description,
                author=user.key)

            User.add_project(username, project_id)

            self.redirect(self.uri_for('profile', username=username))