Exemplo n.º 1
0
def image_manager(page):
    """
    GET --> The main image manager page
    POST --> Delete requested file(s)
    :param page: The requested page
    """
    if request.method == 'POST':
        img_ref_key = request.get_json()

        # Delete the img from ndb
        for img_ref in img_ref_key['objects']:
            img_inst = ndb.Key(ImageReference, int(img_ref))
            img = img_inst.get()
            blob_key = img.blob

            # Delete img and blob
            img_inst.delete()
            BlobInfo.get(blob_key).delete()
            logging.info("Delete image: {}".format(img_ref))

        return "true"

    offset = (page - 1) * IMAGES_PER_PAGE
    images = ImageReference.query().order(-ImageReference.date)
    pagination = Pagination(page, IMAGES_PER_PAGE, images.count())
    query = images.fetch(IMAGES_PER_PAGE, offset=offset)

    return render_template('image-manager/admin-manager-images.html',
                           keys=query,
                           pagination=pagination)
Exemplo n.º 2
0
def image_manager(page):
    """
    GET --> The main image manager page
    POST --> Delete requested file(s)
    :param page: The requested page
    """
    if request.method == 'POST':
        img_ref_key = request.get_json()

        # Delete the img from ndb
        for img_ref in img_ref_key['objects']:
            img_inst = ndb.Key(ImageReference, int(img_ref))
            img = img_inst.get()
            blob_key = img.blob

            # Delete img and blob
            img_inst.delete()
            BlobInfo.get(blob_key).delete()
            logging.info("Delete image: {}".format(img_ref))

        return "true"

    offset = (page-1)*IMAGES_PER_PAGE
    images = ImageReference.query().order(-ImageReference.date)
    pagination = Pagination(page, IMAGES_PER_PAGE, images.count())
    query = images.fetch(IMAGES_PER_PAGE, offset=offset)

    return render_template('image-manager/admin-manager-images.html',
                           keys=query,
                           pagination=pagination)
Exemplo n.º 3
0
def start_batch(key, bid):
    try:
        reader = BlobReader(BlobKey(key))
    except:
        return 'failed to find key: please re-upload.'
    newest_date = branch_newest_date(bid)
    dic = {}
    for line in reader:
        line = line.strip()
        try:
            game_date = valid(line)
            if game_date < newest_date:
                game_date = newest_date
        except:
            continue
        if util.tomorrow(util.today()) < game_date:
            continue
        if game_date not in dic:
            dic[game_date] = []
        dic[game_date].append(','.join(line.split(',')[:8]))
    for key_date in sorted(dic.keys()):
        qs = QueueScore(
          bid=bid, game_date=key_date, body=(
            '\n'.join(reversed(dic[key_date]))                                                 
        ))
        qs.put()
    BlobInfo.get(key).delete()
    return 'upload succeeded!'
Exemplo n.º 4
0
 def delete(self, **kwargs):
     if self.imageid:
         b = BlobInfo.get(self.imageid.split('.')[0])
         if b:
             b.delete()
     if self.apkkey:
         b = BlobInfo.get(self.apkkey)
         if b:
             b.delete()
     for imguri in self.imagelist:
         b = BlobInfo.get(imguri.split('.')[0])
         if b:
             b.delete()
     super(Plugin, self).delete(**kwargs)
     pluginCount = PluginCount.get_or_insert('plugin_count')
     pluginCount.num -= 1
     pluginCount.put()
     memcache.delete('allplugincount')
     memcache.delete('appnamelist')
     memcache.delete('pluginid%s' % self.key().id())
     memcache.delete('user_applist_%s' % (self.username))
     l = []
     for i in range(0, pluginCount.num % 30):
         l.append('applist__%s' % i)
     l.append('applist__%s' % len(l))
     memcache.delete_multi(l)
Exemplo n.º 5
0
 def action_edit(self):
     if self.section.handler.request.get('submit'):
         self.SITE_HEADER = self.section.handler.request.get('SITE_HEADER')
         self.SITE_SUB_HEADER = self.section.handler.request.get('SITE_SUB_HEADER')
         self.DEFAULT_THEME = self.section.handler.request.get('DEFAULT_THEME')
         self.GOOGLE_ANALYTICS_UA = self.section.handler.request.get('GOOGLE_ANALYTICS_UA')
         self.ROBOTS_TXT = self.section.handler.request.get('ROBOTS_TXT')
         if self.section.handler.request.get('FAVICON_ICO'):
             if self.FAVICON_ICO:
                 BlobInfo.get(self.FAVICON_ICO).delete()
             data = self.section.handler.request.get('FAVICON_ICO')
             handle = files.blobstore.create(mime_type='image/x-icon', _blobinfo_uploaded_filename='favicon.ico')
             with files.open(handle, 'a') as f: f.write(data)
             files.finalize(handle)
             self.FAVICON_ICO = files.blobstore.get_blob_key(handle)
         self.ENABLE_THEME_PREVIEW = self.section.handler.request.get('ENABLE_THEME_PREVIEW') != ''
         self.DEBUG_MODE = self.section.handler.request.get('DEBUG_MODE') != ''
         cache.delete(CACHE_KEY)
         self.update()
         raise Exception('Redirect', self.section.action_redirect_path)
     f = form(self.section, self.section.full_path)
     f.add_control(control(self.section, 'text', 'SITE_HEADER', self.SITE_HEADER, 'Site header', 50))
     f.add_control(control(self.section, 'text', 'SITE_SUB_HEADER', self.SITE_SUB_HEADER, 'Site sub-header', 50))
     combined_themes = get_local_theme_namespaces() + get_custom_theme_namespaces()
     f.add_control(selectcontrol(self.section, 'DEFAULT_THEME', combined_themes, self.DEFAULT_THEME if self.DEFAULT_THEME else DEFAULT_LOCAL_THEME_TEMPLATE, 'Default theme'))
     f.add_control(control(self.section, 'text', 'GOOGLE_ANALYTICS_UA', self.GOOGLE_ANALYTICS_UA, 'Google analytics UA'))
     f.add_control(control(self.section, 'file', 'FAVICON_ICO', label='favicon.ico'))
     f.add_control(textareacontrol(self.section, 'ROBOTS_TXT', self.ROBOTS_TXT, 'robots.txt', 90, 5))
     f.add_control(checkboxcontrol(self.section, 'ENABLE_THEME_PREVIEW', self.ENABLE_THEME_PREVIEW, 'Enable theme preview'))
     f.add_control(checkboxcontrol(self.section, 'DEBUG_MODE', self.DEBUG_MODE, 'Debug mode'))
     f.add_control(control(self.section, 'submit', 'submit', 'Submit'))
     return '<h2>Edit configuration</h2>%s' % unicode(f)
Exemplo n.º 6
0
def delete_blob(key):
    try:
        BlobInfo.get(key).delete()
    except:
        return 'failed'
    else:
        return 'succeeded'
Exemplo n.º 7
0
	def update_background(self, full, thumb):
		station = self.station
		
		old_full_blob_key = None
		old_thumb_blob_key = None
		
		m1 = re.match(r"/picture/([^/]+)?/view", station.full)
		m2 = re.match(r"/picture/([^/]+)?/view", station.thumb)
		if m1 and m2:
			logging.info("Background is a blob")
			old_full_blob_key = m1.group(1)
			old_thumb_blob_key = m2.group(1)
		else:
			logging.info("Background is a static file")
		
		station.full = full
		station.thumb = thumb
		
		station.put()
		logging.info("Station updated in datastore")
		
		memcache.set(self._memcache_station_id, station)
		logging.info("Station updated in memcache")
		
		# Update in runtime
		self._station = station
		
		if old_full_blob_key and old_thumb_blob_key:
			old_full = BlobInfo.get(old_full_blob_key)
			old_full.delete()
			logging.info("Old full size background removed from blobstore")
		
			old_thumb = BlobInfo.get(old_thumb_blob_key)
			old_thumb.delete()
			logging.info("Old thumbnail removed from blobstore")	
Exemplo n.º 8
0
Arquivo: utils.py Projeto: uri247/arch
def delete_all_images():
    k = ndb.Key('Firm', 'frl')
    for img in Image.query(ancestor=k).iter():
        print img.key.id()
        for bk in [img.small_blob_key, img.large_blob_key]:
            if BlobInfo.get(bk):
                BlobInfo.get(bk).delete()
        img.key.delete()
Exemplo n.º 9
0
Arquivo: utils.py Projeto: uri247/arch
def delete_all_images():
    k = ndb.Key("Firm", "frl")
    for img in Image.query(ancestor=k).iter():
        print img.key.id()
        for bk in [img.small_blob_key, img.large_blob_key]:
            if BlobInfo.get(bk):
                BlobInfo.get(bk).delete()
        img.key.delete()
Exemplo n.º 10
0
 def action_edit(self):
     if self.section.handler.request.get('submit'):
         self.SITE_HEADER = self.section.handler.request.get('SITE_HEADER')
         self.SITE_SUB_HEADER = self.section.handler.request.get(
             'SITE_SUB_HEADER')
         self.DEFAULT_THEME = self.section.handler.request.get(
             'DEFAULT_THEME')
         self.GOOGLE_ANALYTICS_UA = self.section.handler.request.get(
             'GOOGLE_ANALYTICS_UA')
         self.ROBOTS_TXT = self.section.handler.request.get('ROBOTS_TXT')
         if self.section.handler.request.get('FAVICON_ICO'):
             if self.FAVICON_ICO:
                 BlobInfo.get(self.FAVICON_ICO).delete()
             data = self.section.handler.request.get('FAVICON_ICO')
             handle = files.blobstore.create(
                 mime_type='image/x-icon',
                 _blobinfo_uploaded_filename='favicon.ico')
             with files.open(handle, 'a') as f:
                 f.write(data)
             files.finalize(handle)
             self.FAVICON_ICO = files.blobstore.get_blob_key(handle)
         self.ENABLE_THEME_PREVIEW = self.section.handler.request.get(
             'ENABLE_THEME_PREVIEW') != ''
         self.DEBUG_MODE = self.section.handler.request.get(
             'DEBUG_MODE') != ''
         cache.delete(CACHE_KEY)
         self.update()
         raise Exception('Redirect', self.section.action_redirect_path)
     f = form(self.section, self.section.full_path)
     f.add_control(
         control(self.section, 'text', 'SITE_HEADER', self.SITE_HEADER,
                 'Site header', 50))
     f.add_control(
         control(self.section, 'text', 'SITE_SUB_HEADER',
                 self.SITE_SUB_HEADER, 'Site sub-header', 50))
     combined_themes = get_local_theme_namespaces(
     ) + get_custom_theme_namespaces()
     f.add_control(
         selectcontrol(
             self.section, 'DEFAULT_THEME', combined_themes,
             self.DEFAULT_THEME if self.DEFAULT_THEME else
             DEFAULT_LOCAL_THEME_TEMPLATE, 'Default theme'))
     f.add_control(
         control(self.section, 'text', 'GOOGLE_ANALYTICS_UA',
                 self.GOOGLE_ANALYTICS_UA, 'Google analytics UA'))
     f.add_control(
         control(self.section, 'file', 'FAVICON_ICO', label='favicon.ico'))
     f.add_control(
         textareacontrol(self.section, 'ROBOTS_TXT', self.ROBOTS_TXT,
                         'robots.txt', 90, 5))
     f.add_control(
         checkboxcontrol(self.section, 'ENABLE_THEME_PREVIEW',
                         self.ENABLE_THEME_PREVIEW, 'Enable theme preview'))
     f.add_control(
         checkboxcontrol(self.section, 'DEBUG_MODE', self.DEBUG_MODE,
                         'Debug mode'))
     f.add_control(control(self.section, 'submit', 'submit', 'Submit'))
     return '<h2>Edit configuration</h2>%s' % unicode(f)
Exemplo n.º 11
0
 def test_remove_image_with_only_original_blob(self):
     content_type = 'image/jpeg'
     blob_key = self.make_blob(content_type, 'dummy')
     self.assertTrue(BlobInfo.get(blob_key),
         'Should be able to load BlobInfo for key.')
     image = ae_image.core.Image(blob_key, content_type)
     image.remove()
     self.assertFalse(BlobInfo.get(blob_key),
         'Should no longer be able to load BlobInfo for key.')
Exemplo n.º 12
0
def serve_file(request, blob_key_or_info, as_download=False, content_type=None, filename=None, offset=None, size=None):
    """
        Serves a file from the blobstore, reads most of the data from the blobinfo by default but you can override stuff
        by passing kwargs.

        You can also pass a Google Cloud Storage filename as `blob_key_or_info` to use Blobstore API to serve the file:
        https://cloud.google.com/appengine/docs/python/blobstore/#Python_Using_the_Blobstore_API_with_Google_Cloud_Storage
    """

    if isinstance(blob_key_or_info, BlobKey):
        info = BlobInfo.get(blob_key_or_info)
        blob_key = blob_key_or_info
    elif isinstance(blob_key_or_info, basestring):
        info = BlobInfo.get(BlobKey(blob_key_or_info))
        blob_key = BlobKey(blob_key_or_info)
    elif isinstance(blob_key_or_info, BlobInfo):
        info = blob_key_or_info
        blob_key = info.key()
    else:
        raise ValueError("Invalid type %s" % blob_key_or_info.__class__)

    if info == None:
        # Lack of blobstore_info means this is a Google Cloud Storage file
        if has_cloudstorage:
            info = cloudstorage.stat(blob_key_or_info)
            info.size = info.st_size
            blob_key = create_gs_key('/gs{0}'.format(blob_key_or_info))
        else:
            raise ImportError("To serve a Cloud Storage file you need to install cloudstorage")

    response = HttpResponse(content_type=content_type or info.content_type)
    response[BLOB_KEY_HEADER] = str(blob_key)
    response['Accept-Ranges'] = 'bytes'
    http_range = request.META.get('HTTP_RANGE')

    if offset or size:
        # Looks a little bonkers, but basically create the HTTP range string, we cast to int first to make sure
        # nothing funky gets into the headers
        http_range = "{}-{}".format(
            str(int(offset)) if offset else "",
            str(int(offset or 0) + size) if size else ""
        )

    if http_range is not None:
        response[BLOB_RANGE_HEADER] = http_range

    if as_download:
        response['Content-Disposition'] = smart_str(
            u'attachment; filename="%s"' % (filename or info.filename)
        )
    elif filename:
        raise ValueError("You can't specify a filename without also specifying as_download")

    if info.size is not None:
        response['Content-Length'] = info.size
    return response
Exemplo n.º 13
0
def serve_file(request, blob_key_or_info, as_download=False, content_type=None, filename=None, offset=None, size=None):
    """
        Serves a file from the blobstore, reads most of the data from the blobinfo by default but you can override stuff
        by passing kwargs.

        You can also pass a Google Cloud Storage filename as `blob_key_or_info` to use Blobstore API to serve the file:
        https://cloud.google.com/appengine/docs/python/blobstore/#Python_Using_the_Blobstore_API_with_Google_Cloud_Storage
    """

    if isinstance(blob_key_or_info, BlobKey):
        info = BlobInfo.get(blob_key_or_info)
        blob_key = blob_key_or_info
    elif isinstance(blob_key_or_info, basestring):
        info = BlobInfo.get(BlobKey(blob_key_or_info))
        blob_key = BlobKey(blob_key_or_info)
    elif isinstance(blob_key_or_info, BlobInfo):
        info = blob_key_or_info
        blob_key = info.key()
    else:
        raise ValueError("Invalid type %s" % blob_key_or_info.__class__)

    if info == None:
        # Lack of blobstore_info means this is a Google Cloud Storage file
        if has_cloudstorage:
            info = cloudstorage.stat(blob_key_or_info)
            info.size = info.st_size
            blob_key = create_gs_key('/gs{0}'.format(blob_key_or_info))
        else:
            raise ImportError("To serve a Cloud Storage file you need to install cloudstorage")

    response = HttpResponse(content_type=content_type or info.content_type)
    response[BLOB_KEY_HEADER] = str(blob_key)
    response['Accept-Ranges'] = 'bytes'
    http_range = request.META.get('HTTP_RANGE')

    if offset or size:
        # Looks a little bonkers, but basically create the HTTP range string, we cast to int first to make sure
        # nothing funky gets into the headers
        http_range = "{}-{}".format(
            str(int(offset)) if offset else "",
            str(int(offset or 0) + size) if size else ""
        )

    if http_range is not None:
        response[BLOB_RANGE_HEADER] = http_range

    if as_download:
        response['Content-Disposition'] = smart_str(
            u'attachment; filename="%s"' % (filename or info.filename)
        )
    elif filename:
        raise ValueError("You can't specify a filename without also specifying as_download")

    if info.size is not None:
        response['Content-Length'] = info.size
    return response
Exemplo n.º 14
0
 def on_remove(self):
     for i in range(len(self.theme_namespaces)):
         # This can be done more efficiently via GQL
         theme = self.get_theme(self.theme_namespaces[i])
         cache.delete(CACHE_KEY_PREPEND + self.theme_namespaces[i])
         for key in theme.image_keys:
             cache.delete(CACHE_KEY_PREPEND + str(key))
             BlobInfo.get(key).delete()
         theme.key.delete()
         del self.theme_keys[i]
         del self.theme_namespaces[i]
     self.update()
Exemplo n.º 15
0
 def on_remove(self):
     for i in range(len(self.theme_namespaces)):
         # This can be done more efficiently via GQL
         theme = self.get_theme(self.theme_namespaces[i])
         cache.delete(CACHE_KEY_PREPEND + self.theme_namespaces[i])
         for key in theme.image_keys:
             cache.delete(CACHE_KEY_PREPEND + str(key))
             BlobInfo.get(key).delete()
         theme.key.delete()
         del self.theme_keys[i]
         del self.theme_namespaces[i]
     self.update()
Exemplo n.º 16
0
 def action_get(self):
     if not self.section.path_params or len(self.section.path_params) != 3:
         raise Exception('NotFound')
     theme = self.get_theme(self.section.path_params[0])
     resource = self.section.path_params[1]
     filename = self.section.path_params[2]
     if resource == 'css':
         filenames, contents = theme.css_filenames, theme.css_contents
         content_type = 'text/css'
     elif resource == 'js':
         filenames, contents = theme.js_filenames, theme.js_contents
         content_type = 'text/javascript'
     elif resource == 'image':
         data = None
         try:
             key = theme.image_keys[theme.image_filenames.index(filename)]
             data = cache.get(CACHE_KEY_PREPEND + str(key))
             if not data:
                 data = BlobInfo.get(key)
                 cache.set(CACHE_KEY_PREPEND + str(key), data)
         finally:
             if not data:
                 raise Exception('NotFound')
             raise Exception('SendFileBlob',
                             data.open().read(), data.content_type)
     else:
         raise Exception('NotFound')
     try:
         index = filenames.index(filename)
     except:
         raise Exception('NotFound')
     else:
         raise Exception('SendFileBlob', str(contents[index]), content_type)
Exemplo n.º 17
0
 def updatevideo(self, dish_id, video):
     dish = Dish.get_by_id(int(dish_id))
     if dish.video:
         blob_info = BlobInfo.get(dish.video)
         blob_info.delete()
     dish.video = video
     dish.put()
Exemplo n.º 18
0
 def test_remove_with_single_image(self):
     blob_key = self.make_blob('image/jpeg', 'dummy')
     self.assertTrue(BlobInfo.get(blob_key),
         'Should be able to load BlobInfo for key.')
     collection = ae_image.core.Collection(
         [ae_image.core.Style('big', 500)])
     collection.append_from_blob_info(BlobInfo.get(blob_key))
     self.assertTrue(
         collection.get_url('big', blob_key), 'Expect URL back.')
     collection.remove(blob_key)
     self.assertFalse(BlobInfo.get(blob_key),
         'Should no longer be able to load BlobInfo for key.')
     self.assertRaises(ae_image.core.UnknownImage, collection.get_url,
         'big', blob_key)
     self.assertRaises(ae_image.core.UnknownImage, collection.remove,
         blob_key)
Exemplo n.º 19
0
 def test_append_from_blob_info(self):
     blob_key = self.make_blob('image/jpeg', 'dummy')
     collection = ae_image.core.Collection(
         [ae_image.core.Style('big', 500)])
     collection.append_from_blob_info(BlobInfo.get(blob_key))
     self.assertTrue(
         collection.get_url('big', blob_key), 'Expect URL back.')
Exemplo n.º 20
0
 def _get_info(self, name):
     if name.startswith('/gs/'):
         assert cloudstorage, 'cloudstorage module is not available.'
         return CloudStorageInfo(name)
     else:
         key = BlobKey(name.split('/', 1)[0])
         return BlobInfo.get(key)
Exemplo n.º 21
0
 def updatephoto(self, dish_id, photo):
     dish = Dish.get_by_id(int(dish_id))
     if dish.photo:
         blob_info = BlobInfo.get(dish.photo)
         blob_info.delete()
     dish.photo = photo
     dish.put()
Exemplo n.º 22
0
 def updateaudio(self, dish_id, audio):
     dish = Dish.get_by_id(int(dish_id))
     if dish.audio:
         blob_info = BlobInfo.get(dish.audio)
         blob_info.delete()
     dish.audio = audio
     dish.put()
Exemplo n.º 23
0
class ShowRecipeHandler(webapp2.RequestHandler):
    def post(self):

        # Recipe Stuff
        #
        recipeID = self.request.get('recipeID')

        recipe_key = ndb.Key(urlsafe=recipeID)
        recipe = recipe_key.get()

        # IMAGES
        image_list = []
        for image in recipe.img:
            try:
                img = BlobInfo.get(image)
                url = models.getServingURL(blobkey=img, size=200, shape=False)
                image_list.append(
                    dict(filename=img.filename, url=url, urlkey=str(image)))
            except Exception, e:
                print e

        # AVATAR
        avatar = dict(filename='No Avatar',
                      url='img/no_image.png',
                      urlkey='NoAvatarInBlobstore')
        try:
            img = BlobInfo.get(recipe.avatar)
            url = models.getServingURL(blobkey=img, size=200, shape=False)
            avatar = dict(filename=img.filename,
                          url=url,
                          urlkey=str(recipe.avatar))
        except Exception, e:
            print e
Exemplo n.º 24
0
	def post(self):
		try:
			if not db.WRITE_CAPABILITY.is_enabled():
				raise utils.CapabilityUnavailable('Datastore unavailable')
			
			if 'user_uuid' not in self.context['request_args'] or self.context['request_args']['user_uuid'] == '':
				raise Exception('No user_uuid provided')

			if 'serving_url' not in self.context['request_args'] or self.context['request_args']['serving_url'] == '':
				raise Exception('No serving_url provided')

			if 'short_url' not in self.context['request_args'] or self.context['request_args']['short_url'] == '':
				raise Exception('No short_url provided')

			if 'blob_key_name' not in self.context['request_args'] or self.context['request_args']['blob_key_name'] == '':
				raise Exception('No blob_key_name provided')

			blob_key = BlobKey(self.context['request_args']['blob_key_name'])
			blob_info = BlobInfo.get(blob_key)
			user_image = photo_module.Photo(
				user_uuid=self.context['request_args']['user_uuid'],
				serving_url=self.context['request_args']['serving_url'],
				short_url=self.context['request_args']['short_url'],
				blob=blob_info
			)
			user_image.save()
		except modules_base.CapabilityUnavailable, cu:
			logging.exception(cu)
			self.response.set_status(503)
Exemplo n.º 25
0
 def post(self):
     upload_files = self.get_uploads('file')  
     blob_info = upload_files[0]
     # Resize the image
     image = images.Image(blob_key=blob_info.key())
     image.resize(width=WOOF_FEED_ITEM_IMAGE_MAX_WIDTH, height=WOOF_FEED_ITEM_IMAGE_MAX_HEIGHT)
     thumbnail = image.execute_transforms(output_encoding=images.JPEG)
     # Save Resized Image back to blobstore
     file_name = files.blobstore.create(mime_type='image/jpeg')
     with files.open(file_name, 'a') as f:
         f.write(thumbnail)
     files.finalize(file_name)
     # Remove the original image
     blobstore.delete(blob_info.key())
     blob_key = files.blobstore.get_blob_key(file_name)
     # New FeedImage
     feed_image = FeedImage()
     feed_image.data = BlobInfo.get(blob_key)
     feed_image.width = image.width
     feed_image.height = image.height
     feed_image.put()
     # Create new FeedItem
     feed_item = FeedItem()
     feed_item.text = self.request.get("text")
     feed_item.image = feed_image
     feed_item.put()
     self.redirect('/')
Exemplo n.º 26
0
 def action_get(self):
     if not self.section.path_params or len(self.section.path_params) != 3:
         raise Exception('NotFound')
     theme = self.get_theme(self.section.path_params[0])
     resource = self.section.path_params[1]
     filename = self.section.path_params[2]
     if resource == 'css':
         filenames, contents = theme.css_filenames, theme.css_contents
         content_type = 'text/css'
     elif resource == 'js':
         filenames, contents = theme.js_filenames, theme.js_contents
         content_type = 'text/javascript'
     elif resource == 'image':
         data = None
         try:
             key = theme.image_keys[theme.image_filenames.index(filename)]
             data = cache.get(CACHE_KEY_PREPEND + str(key))
             if not data:
                 data = BlobInfo.get(key)
                 cache.set(CACHE_KEY_PREPEND + str(key), data)
         finally:
             if not data:
                 raise Exception('NotFound')
             raise Exception('SendFileBlob', data.open().read(), data.content_type)
     else:
         raise Exception('NotFound')
     try:
         index = filenames.index(filename)
     except:
         raise Exception('NotFound')
     else:
         raise Exception('SendFileBlob', str(contents[index]), content_type)
Exemplo n.º 27
0
 def _get_info(self, name):
     if name.startswith('/gs/'):
         assert cloudstorage, 'cloudstorage module is not available.'
         return CloudStorageInfo(name)
     else:
         key = BlobKey(name.split('/', 1)[0])
         return BlobInfo.get(key)
Exemplo n.º 28
0
 def post(self):
     upload_files = self.get_uploads('file')
     blob_info = upload_files[0]
     # Resize the image
     image = images.Image(blob_key=blob_info.key())
     image.resize(width=WOOF_FEED_ITEM_IMAGE_MAX_WIDTH,
                  height=WOOF_FEED_ITEM_IMAGE_MAX_HEIGHT)
     thumbnail = image.execute_transforms(output_encoding=images.JPEG)
     # Save Resized Image back to blobstore
     file_name = files.blobstore.create(mime_type='image/jpeg')
     with files.open(file_name, 'a') as f:
         f.write(thumbnail)
     files.finalize(file_name)
     # Remove the original image
     blobstore.delete(blob_info.key())
     blob_key = files.blobstore.get_blob_key(file_name)
     # New FeedImage
     feed_image = FeedImage()
     feed_image.data = BlobInfo.get(blob_key)
     feed_image.width = image.width
     feed_image.height = image.height
     feed_image.put()
     # Create new FeedItem
     feed_item = FeedItem()
     feed_item.text = self.request.get("text")
     feed_item.image = feed_image
     feed_item.put()
     self.redirect('/')
Exemplo n.º 29
0
Arquivo: insert.py Projeto: bfeng/dfs
    def post(self):
        key = self.request.get("key")
        value = self.request.get("value")

        filename = urllib.unquote(key)

        # Clean up current file
        query = DataFile.all().filter("f_key", filename)

        for data_file in query:
            data_file.delete()

        # Create a file
        writable_file_name = files.blobstore.create(mime_type="application/octect-stream")

        with files.open(writable_file_name, "a") as f:
            f.write(value)
        files.finalize(writable_file_name)

        blob_key = files.blobstore.get_blob_key(writable_file_name)

        data_file = DataFile(f_key=filename, f_value=blob_key)
        data_file.put()

        if memcache.get(key="turn") == "on":
            if BlobInfo.get(blob_key).size <= 100000:
                memcache.set(key=filename, value=value, time=3600)

        write_boolean(self, True)
Exemplo n.º 30
0
    def post(self):
        try:
            recipeID = self.request.get('recipe_id')
            print("rID: " + recipeID)

            recipe = ndb.Key(urlsafe=recipeID)
            recipe_key = recipe.get()

            # Image Elements
            recipe_key.img = []
            deletable = []

            # Get Deletable Elements
            try:
                removedImages = self.request.get('removed_images')
                images = removedImages.split(',')
                for image in images:
                    if image != '':
                        print('Deletable: ' + image)
                        deletable.append(BlobInfo.get(image).key())

            except Exception, e:
                print e

            # Avatar Model
            try:
                avi = self.get_uploads('avatar_file')
                recipe_key.avatar = avi[0].key()
                try:
                    oldAvi = self.request.get('existing_avatar')
                    recipe_key.img.append(BlobInfo.get(oldAvi).key())
                except Exception, e:
                    print(e)

            except Exception, e:
                print('No new Avatar Image Uploaded')
                # Existing Avatar Model
                try:
                    aviKey = self.request.get_all('existing_avatar')
                    recipe_key.avatar = BlobInfo.get(aviKey[0]).key()
                except Exception, e:
                    # Pull old avatar that was deleted out of the trash
                    if recipe_key.avatar in deletable:
                        deletable.remove(recipe_key.avatar)
                    print(
                        'No Existing Image Chosen as Avatar. Keeping Same Avatar'
                    )
Exemplo n.º 31
0
def presentation_download(request, key, name):
    blob = BlobInfo.get(key)
    if not blob:
        return Response(status=304)
    headers = Headers()
    headers['Content-Type'] = blob.content_type.encode('utf-8')
    headers['Last-Modified'] = blob.creation.strftime(HTTP_DATE_FMT)
    return Response(blob.open().read(), headers=headers)
Exemplo n.º 32
0
 def action_delete(self):
     if not self.section.path_params or len(self.section.path_params) != 1:
         raise Exception('NotFound')
     theme = self.get_theme(self.section.path_params[0])
     if self.section.handler.request.get('submit'):
         for key in theme.image_keys:
             cache.delete(CACHE_KEY_PREPEND + str(key))
             BlobInfo.get(key).delete()
         self.theme_keys.remove(theme.key)
         self.theme_namespaces.remove(theme.namespace)
         theme.key.delete()
         self.update()
         cache.flush_all() # Flush all cached resources for this theme which is important for sections where it is active
         raise Exception('Redirect', self.section.action_redirect_path)
     f = form(self.section, self.section.full_path)
     f.add_control(control(self.section, 'submit', 'submit', 'Confirm'))
     return '<div class="status warning">Are you sure you wish to delete theme "%s" and all associated resources?</div>%s' % (theme.namespace, unicode(f))
Exemplo n.º 33
0
	def get(self, resource):
		blob_key = str(urllib.unquote(resource))
		blob_info = BlobInfo.get(blob_key)
		
		if not blob_info:
			self.error(404)
		else:
			self.send_blob(blob_info)
Exemplo n.º 34
0
def serve_file(request,
               blob_key_or_info,
               as_download=False,
               content_type=None,
               filename=None,
               offset=None,
               size=None):
    """
        Serves a file from the blobstore, reads most of the data from the blobinfo by default but you can override stuff
        by passing kwargs.
    """

    if isinstance(blob_key_or_info, BlobKey):
        info = BlobInfo.get(blob_key_or_info)
    elif isinstance(blob_key_or_info, basestring):
        info = BlobInfo.get(BlobKey(blob_key_or_info))
    elif isinstance(blob_key_or_info, BlobInfo):
        info = blob_key_or_info
    else:
        raise ValueError("Invalid type %s" % blob_key_or_info.__class__)

    response = HttpResponse(content_type=content_type or info.content_type)
    response[BLOB_KEY_HEADER] = str(info.key())
    response['Accept-Ranges'] = 'bytes'
    http_range = request.META.get('HTTP_RANGE')

    if offset or size:
        # Looks a little bonkers, but basically create the HTTP range string, we cast to int first to make sure
        # nothing funky gets into the headers
        http_range = "{}-{}".format(
            str(int(offset)) if offset else "",
            str(int(offset or 0) + size) if size else "")

    if http_range is not None:
        response[BLOB_RANGE_HEADER] = http_range

    if as_download:
        response['Content-Disposition'] = smart_str(
            u'attachment; filename="%s"' % filename or info.filename)
    elif filename:
        raise ValueError(
            "You can't specify a filename without also specifying as_download")

    if info.size is not None:
        response['Content-Length'] = info.size
    return response
Exemplo n.º 35
0
    def post(self):
        try:
            recipeID = self.request.get('recipe_id')
            print("rID: " + recipeID)

            recipe = ndb.Key(urlsafe=recipeID)
            recipe_key = recipe.get()

            # Image Elements
            recipe_key.img = []
            deletable = []

            # Get Deletable Elements
            try:
                removedImages = self.request.get('removed_images')
                images = removedImages.split(',')
                for image in images:
                    if image != '':
                        print('Deletable: ' + image)
                        deletable.append(BlobInfo.get(image).key())

            except Exception, e:
                print e

            # Avatar Model
            try:
                avi = self.get_uploads('avatar_file')
                recipe_key.avatar = avi[0].key()
                try:
                    oldAvi = self.request.get('existing_avatar')
                    recipe_key.img.append(BlobInfo.get(oldAvi).key())
                except Exception, e:
                    print(e)

            except Exception, e:
                print('No new Avatar Image Uploaded')
                # Existing Avatar Model
                try:
                    aviKey = self.request.get_all('existing_avatar')
                    recipe_key.avatar = BlobInfo.get(aviKey[0]).key()
                except Exception, e:
                    # Pull old avatar that was deleted out of the trash
                    if recipe_key.avatar in deletable:
                        deletable.remove(recipe_key.avatar)
                    print('No Existing Image Chosen as Avatar. Keeping Same Avatar')
Exemplo n.º 36
0
 def get(self, resource="", finlenME=""):
     logging.info(resource)
     # print resource
     # return
     resource = str(urllib.unquote(resource))
     logging.info(resource)
     blob_info = BlobInfo.get(resource)
     logging.info(blob_info)
     self.send_blob(blob_info)
Exemplo n.º 37
0
 def updatephotogallery(self, dish_id, photogallery):
     dish = Dish.get_by_id(int(dish_id))
     for photo in dish.photogallery:
         blob_info = BlobInfo.get(photo)
         blob_info.delete()
     dish.photogallery = []
     for photo in photogallery:
         dish.photogallery.append(photo)
     dish.put()
Exemplo n.º 38
0
 def get_file(self, filename):
     item = None
     try:
         key = self.file_keys[self.filenames.index(filename)]
         item = cache.get(CACHE_KEY_PREPEND + str(key))
         if not item:
             item = BlobInfo.get(key)
             cache.set(CACHE_KEY_PREPEND + str(key), item)
     finally:
         return item
Exemplo n.º 39
0
 def action_delete(self):
     if not self.section.path_params or len(self.section.path_params) != 1:
         raise Exception('NotFound')
     theme = self.get_theme(self.section.path_params[0])
     if self.section.handler.request.get('submit'):
         for key in theme.image_keys:
             cache.delete(CACHE_KEY_PREPEND + str(key))
             BlobInfo.get(key).delete()
         self.theme_keys.remove(theme.key)
         self.theme_namespaces.remove(theme.namespace)
         theme.key.delete()
         self.update()
         cache.flush_all(
         )  # Flush all cached resources for this theme which is important for sections where it is active
         raise Exception('Redirect', self.section.action_redirect_path)
     f = form(self.section, self.section.full_path)
     f.add_control(control(self.section, 'submit', 'submit', 'Confirm'))
     return '<div class="status warning">Are you sure you wish to delete theme "%s" and all associated resources?</div>%s' % (
         theme.namespace, unicode(f))
Exemplo n.º 40
0
 def test_upload(self):
     handler = Mock()
     blob_key = self.save_blob('dados')
     blob_info = BlobInfo.get(blob_key)
     handler.get_uploads = lambda k: [blob_info]
     user = mommy.save_one(MainUser)
     upload.index(handler, user, None)
     blob_files = blob_facade.list_blob_files_cmd(user)()
     self.assertEqual(1, len(blob_files))
     self.assertEqual(blob_key, blob_files[0].blob_key)
Exemplo n.º 41
0
 def get_file(self, filename):
     item = None
     try:
         key = self.file_keys[self.filenames.index(filename)]
         item = cache.get(CACHE_KEY_PREPEND + str(key))
         if not item:
             item = BlobInfo.get(key)
             cache.set(CACHE_KEY_PREPEND + str(key), item)
     finally:
         return item
Exemplo n.º 42
0
def get_favicon_ico():
    item = get_configuration()
    if not item.FAVICON_ICO:
        data = file('framework/content/configuration/assets/images/favicon.ico', 'r').read()
        handle = files.blobstore.create(mime_type='image/x-icon', _blobinfo_uploaded_filename='favicon.ico')
        with files.open(handle, 'a') as f: f.write(data)
        files.finalize(handle)
        item.FAVICON_ICO = files.blobstore.get_blob_key(handle)
        item.update()
        cache.delete(CACHE_KEY)
    raise Exception('SendFileBlob', BlobInfo.get(item.FAVICON_ICO).open().read(), 'image/x-icon')
Exemplo n.º 43
0
def price_uplader(request):
    upload_files = get_uploads(request, 'file')
    if not len(upload_files):
        return redirect(url_for('admin/add_price'))
    blob_info = upload_files[0]
    bl = BlobInfo.get(blob_info.key())
    filename = os.path.basename(bl.filename.replace('\\','/'))
    price = Price(name=filename,
        file_key=str(blob_info.key()), length=blob_info.size)
    price.put()
    return redirect(url_for('admin/prices'))
Exemplo n.º 44
0
 def get_cached_url(self, force=False):
     if not self.blob_key:
         return ''
     if not self.url or force:
         blob_info = BlobInfo.get(self.blob_key)
         if blob_info:
             if blob_info.content_type in IMAGE_TYPES:
                 cached_url = images.get_serving_url(self.blob_key)
             else:
                 cached_url = url_for('file.get', file_key=self.uid)
             self.url = cached_url
     return self.url
Exemplo n.º 45
0
 def finish(self):
     """
         Called when all shards have finished processing
     """
     if self.error_csv_filename:
         files.finalize(self.error_csv_filename)
         blob_key = files.blobstore.get_blob_key(self.error_csv_filename)
         blob_info = BlobInfo.get(blob_key)
         blob_file = BlobstoreFile("errors.csv", 'rb', BlobstoreStorage())
         blob_file.blobstore_info = blob_info
         self.error_csv = blob_file
         self.save()
Exemplo n.º 46
0
	def get(self, file_id):
		""" Respond to HTTP GET requests
		
		Download files from Blobstore that are referenced by file_id key
		
		Args:
		  file_id a key that references some FileMetadata entity in the Datastore
		"""
		file_info = str(urllib.unquote(file_id)).strip()
		if not file_info:
			self.error(404)
			return
		self.send_blob(BlobInfo.get(file_id), save_as=False)
Exemplo n.º 47
0
class UpdateAvatarHandler(blobstore_handlers.BlobstoreUploadHandler):
    def post(self):
        try:
            # Parse Student Favorite Recipes
            studentID = self.request.get('studentID')

            # Retrieve Student
            student_key = ndb.Key(urlsafe=studentID)
            student = student_key.get()

            # Get New Avatar
            avatar = self.get_uploads('avatar-input')[0]
            old_avatar = student.avatar
            safe = False

            # Save New Avatar
            try:
                student.avatar = avatar.key()
                student.put()
                safe = True

            except Exception, e:
                print e

            # Checking to See if Avatar was Never Uploaded Before
            try:
                CCLogo = models.StockImage.query(models.StockImage.image == old_avatar).fetch(1)[0]
                if (CCLogo):
                    safe = False
                else:
                    safe = True
            except Exception, e:
                print e

            # Delete Old Avatar
            if (safe):
                BlobInfo.get(BlobInfo.get(old_avatar).key()).delete()

            self.redirect('/profile')
Exemplo n.º 48
0
 def get_cached_url(self, force=False):
     if not self.blob_key:
         return ''
     if not self.url or force:
         blob_info = BlobInfo.get(self.blob_key)
         if blob_info:
             if blob_info.content_type in IMAGE_TYPES:
                 cached_url = images.get_serving_url(self.blob_key)
             else:
                 cached_url = url_for(
                     'file.get', file_key=self.uid, _external=True)
             self.url = cached_url
     return self.url
Exemplo n.º 49
0
def append_from_request(collection, field_name):
    """
    Appends new image(s) to the collection from the current Flask request.
    Returns the count of number of blobs that were added to the collection.

    """

    blob_keys = []
    for file_info in request.files.getlist(field_name):
        file_header = parse_options_header(file_info.headers['Content-Type'])
        blob_keys.append(file_header[1]['blob-key'])
    map(collection.append_from_blob_info,  BlobInfo.get(blob_keys))
    return len(blob_keys)
Exemplo n.º 50
0
    def post(self):
        studentID = self.request.get('studentID')

        student_key = ndb.Key(urlsafe=studentID)
        student = student_key.get()

        # AVATAR
        avatar = dict(filename='No Avatar', url='img/no_image.png', urlkey='NoAvatarInBlobstore')
        try:
            img = BlobInfo.get(student.avatar)
            url = models.getServingURL(blobkey=img, size=300, shape=False)
            avatar = dict(filename=img.filename, url=url, urlkey=str(student.avatar))
        except Exception, e:
            print e
Exemplo n.º 51
0
    def post(self):
        recipeID = self.request.get('recipeID')
        print(recipeID)

        recipe_key = ndb.Key(urlsafe=recipeID)
        recipe = recipe_key.get()

        # IMAGES
        image_list = []
        for image in recipe.img:
            try:
                img = BlobInfo.get(image)
                url = models.getServingURL(blobkey=img, size=200, shape=False)
                image_list.append(
                    dict(filename=img.filename, url=url, urlkey=str(image)))
            except Exception, e:
                print e
Exemplo n.º 52
0
  def CreateBlob(path):
    # Initialize blob dictionary to return.
    blob = {}

    # Read sample file.
    blob['json_str'] = open(path, 'r').read()

    # Create file in blobstore according to sample file.
    file_name = files.blobstore.create(mime_type='text/plain')
    with files.open(file_name, 'a') as f:
      f.write(blob['json_str'])
    files.finalize(file_name)

    # Get BlobInfo of sample file.
    blob['blob_info'] = BlobInfo.get(files.blobstore.get_blob_key(file_name))

    return blob
Exemplo n.º 53
0
def get_favicon_ico():
    item = get_configuration()
    if not item.FAVICON_ICO:
        data = file(
            'framework/content/configuration/assets/images/favicon.ico',
            'r').read()
        handle = files.blobstore.create(
            mime_type='image/x-icon',
            _blobinfo_uploaded_filename='favicon.ico')
        with files.open(handle, 'a') as f:
            f.write(data)
        files.finalize(handle)
        item.FAVICON_ICO = files.blobstore.get_blob_key(handle)
        item.update()
        cache.delete(CACHE_KEY)
    raise Exception('SendFileBlob',
                    BlobInfo.get(item.FAVICON_ICO).open().read(),
                    'image/x-icon')
Exemplo n.º 54
0
 def action_delete_image(self):
     if not self.section.path_params or len(self.section.path_params) != 2:
         raise Exception('NotFound')
     theme = self.get_theme(self.section.path_params[0])
     filename = self.section.path_params[1]
     if filename not in theme.image_filenames:
         raise Exception('NotFound')
     if self.section.handler.request.get('submit'):
         index = theme.image_filenames.index(filename)
         data = BlobInfo.get(theme.image_keys[index])
         cache.delete(CACHE_KEY_PREPEND + str(theme.image_keys[index]))
         data.delete()
         del theme.image_keys[index]
         del theme.image_filenames[index]
         theme.put()
         cache.delete(CACHE_KEY_PREPEND + str(theme.key))
         raise Exception('Redirect', self.section.action_redirect_path)
     f = form(self.section, self.section.full_path)
     f.add_control(control(self.section, 'submit', 'submit', 'Confirm'))
     return '<div class="status warning">Are you sure you wish to delete "%s"?</div>%s' % (
         filename, unicode(f))
Exemplo n.º 55
0
    def setUp(self):
        super(TestRepositoryDocumentApi, self).setUp()

        self.admin = self.new_user(is_admin=True)
        self.student = Student.new_student(
            'bob', 'bob smith', email='*****@*****.**', year=2015
        ).key.get(use_cache=False)

        file_name = files.blobstore.create(mime_type='text/plain')
        with files.open(file_name, 'a') as f:
            f.write('test')
        files.finalize(file_name)
        blob_key = files.blobstore.get_blob_key(file_name)

        self.document = models.Document.new_file(
            self.student.key.id(),
            BlobInfo.get(blob_key),
            'SHELF',
            sender=self.admin,
            name='test'
        ).key.get(use_cache=False)
Exemplo n.º 56
0
def put_slot(key, iterable):
    db_key = make_db_key(key)
    filename = create(mime_type='text/xml')
    size = 0
    with fopen(filename, 'ab') as f:
        for chunk in iterable:
            f.write(chunk)
            size += len(chunk)
    finalize(filename)
    blob_key = get_blob_key(filename)
    blob_info = BlobInfo.get(blob_key)
    assert blob_info.size == size, (
        'blob_info.size = {0!r}, size = {1!r}'.format(blob_info.size, size))
    assert isinstance(blob_info, BlobInfo)
    now = datetime.datetime.utcnow()
    cache_key = make_cache_key(key)
    list_cache_key = make_cache_key(key[:-1])

    def txn():
        delete(cache_key, namespace='slot')
        delete(list_cache_key, namespace='list')
        slot = Slot.get(db_key)
        if slot is None:
            slot = Slot(depth=len(key),
                        key=db_key,
                        blob=blob_info,
                        updated_at=now)
        else:
            assert isinstance(slot.blob, BlobInfo)
            slot.blob.delete()
            slot.blob = blob_info
            slot.updated_at = now
        slot.put()
        delete(list_cache_key, namespace='list')

    run_in_transaction_options(create_transaction_options(xg=True), txn)
    defer(push_to_dropbox, db_key, now)
Exemplo n.º 57
0
def serve_file(request, file, save_as, content_type, **kwargs):
    if isinstance(file, BlobKey):
        blobkey = file
    elif hasattr(file, 'file') and hasattr(file.file, 'blobstore_info'):
        blobkey = file.file.blobstore_info.key()
    elif hasattr(file, 'blobstore_info'):
        blobkey = file.blobstore_info.key()
    else:
        raise ValueError("The provided file can't be served via the "
                         "Google App Engine Blobstore.")
    response = HttpResponse(content_type=content_type)
    response[BLOB_KEY_HEADER] = str(blobkey)
    response['Accept-Ranges'] = 'bytes'
    http_range = request.META.get('HTTP_RANGE')
    if http_range is not None:
        response[BLOB_RANGE_HEADER] = http_range
    if save_as:
        response['Content-Disposition'] = smart_str(
            u'attachment; filename="%s"' % save_as)

    info = BlobInfo.get(blobkey)
    if info.size is not None:
        response['Content-Length'] = info.size
    return response
Exemplo n.º 58
0
 def on_remove(self):
     for key in self.file_keys:
         cache.delete(CACHE_KEY_PREPEND + str(key))
         BlobInfo.get(key).delete()
     self.update()
Exemplo n.º 59
0
 def _get_blobinfo(self, name):
     return BlobInfo.get(self._get_key(name))
Exemplo n.º 60
0
                try:
                    aviKey = self.request.get_all('existing_avatar')
                    recipe_key.avatar = BlobInfo.get(aviKey[0]).key()
                except Exception, e:
                    # Pull old avatar that was deleted out of the trash
                    if recipe_key.avatar in deletable:
                        deletable.remove(recipe_key.avatar)
                    print(
                        'No Existing Image Chosen as Avatar. Keeping Same Avatar'
                    )

            # Existing Images Model
            try:
                urlKeys = self.request.get_all('existing_img')
                for keye in urlKeys:
                    recipe_key.img.append(BlobInfo.get(keye).key())
            except Exception, e:
                print e

            # New Images
            try:
                sm_images = self.get_uploads('sm_image')
                for image in sm_images:
                    recipe_key.img.append(image.key())
            except Exception, e:
                print e

            # Process Deletable
            try:
                for delete in deletable:
                    BlobInfo.get(delete).delete()