def write(self, path_or_fd=None): if path_or_fd is None and self._filename: path_or_fd = self._filename if isinstance(path_or_fd, basestring): fd = open(path_or_fd, 'w') else: fd = path_or_fd ConfigObject.write(self, fd) if isinstance(path_or_fd, basestring): fd.close()
def __call__(self, environ, start_response): req = Request(environ) resp = Response() filename = req.path_info.strip('/') lfilename = filename.lower() if not req.path_info.strip('/') or os.path.isdir(filename): if filename: filename = path(filename, 'index.html') else: filename = 'index.html' body = open(filename, 'rb').read() resp.body = body elif os.path.isfile(filename): if req.method.lower() == 'delete': sh.rm(filename + '*', shell=True) resp = exc.HTTPNoContent() return resp(environ, start_response) if req.path_info.endswith('.metadata'): cfg = ConfigObject(filename=filename) if req.method.lower() == 'get': resp.content_type = 'application/json' elif req.method.lower() == 'put': data = json.loads(req.body) cfg.metadata.update(data) cfg.write() metadata = dict(cfg.metadata.items()) metadata.update(tags=cfg.metadata.tags.as_list()) resp.body = json.dumps(metadata) elif req.path_info.endswith('.js'): resp.content_type = 'text/javascript' elif req.path_info.endswith('.json'): resp.content_type = 'application/json' elif req.path_info.endswith('.css'): resp.content_type = 'text/css' elif lfilename.endswith('.jpg'): resp.charset = None resp.content_type = 'image/jpeg' print(filename) if not resp.content_length: resp.app_iter = fd(filename) elif req.path_info.startswith('/delete/'): filename = req.path_info[8:-1] self.delete(filename) resp.status_int = 302 resp.location = '/' + path.dirname(filename) else: resp.body = str(req.path_info) resp.last_modified = datetime.now() return resp(environ, start_response)
def pics(args): """ Usage: %prog (update|serve) [options] %prog add [options] <image>... %prog set [options] <key> <value> %prog (addtag|deltag) [options] <tag>... Options: -u URL, --url=URL Absolute url to use -t, --thumbs Generate thumbs -d, --directory A directory containing images [default: .] %options """ env.photos = pwd() env.build_path = build_path = os.path.abspath('build') pics = Index(build_path=build_path) if args['--thumbs']: pics.resize() url = args['--url'] or '' env.url = url.strip('/') if args['serve']: pics.get_resources() os.chdir(pics.build_path) from serve import serve serve() elif args['update']: pics.generate() pics.clean() elif args['deltag']: for filename in find('-name *.metadata'): filename = filename.strip() config = ConfigObject(filename=filename) tags = config.metadata.tags.as_list() tags = [t for t in tags if t not in args['<tag>']] config.metadata.tags = tags config.write() elif args['addtag']: for filename in find('-name *.metadata'): filename = filename.strip() config = Photo(filename=filename) tags = config.metadata.tags.as_list() tags.extend([t for t in args['<tag>'] if t not in tags]) config.metadata.tags = tags config.write() elif args['set']: for filename in find('-name *.metadata'): filename = filename.strip() config = ConfigObject(filename=filename) if not config.metadata.date: now = datetime.now() config.metadata.date = now.strftime('%Y-%m-%d') section = 'metadata' key = args['<key>'] if key.lower() in ('exif.date_and_time', 'exif.date'): key = 'exif.Date_and_Time' if '.' in key: section, key = key.split('.') value = args['<value>'] config[section][key] = value if key == 'Date_and_Time': config.metadata.date = value config.write() elif args['add']: for filename in args['<image>']: filename = path.expanduser(filename.strip()) if path.splitext(filename)[1].lower() not in ('.jpg',): continue if path.isfile(filename + '.metadata'): continue new_filename = path.basename(filename).replace(' ', '_') config = Photo(filename=new_filename) config.rotate(original=filename) config.write()