def test_cd(self): pwd = sh.pwd() sh.cd('..') self.assertNotEqual(pwd, sh.env.pwd) self.assertEqual(sh.pwd(), sh.env.pwd) sh.cd(pwd) # test with with with sh.cd('..') as newd: self.assertNotEqual(pwd, sh.env.pwd) self.assertEqual(sh.pwd(), sh.env.pwd) self.assertEqual(newd, sh.env.pwd) self.assertEqual(sh.pwd(), pwd)
def test_sudo(self): sh.aliases['sudo'] = sh.path.join(sh.pwd(), 'sudo') old_path = sh.env.path sh.env.path = [] self.assertRaises(OSError, sh.check_sudo) sh.env.path = old_path sh.stdin(six.b('#!/bin/bash\necho root')) > 'sudo' self.assertEqual(sh.chmod('+x sudo').succeeded, True) self.assertEqual(sh.check_sudo(), None)
def resize(self): processes = [] for filename in find(pwd(), '-name *metadata'): filename = filename.strip()[len(pwd()) + 1:-9] for size in self.sizes: xsize = '%sx%s' % (size, size) thumb = path(self.build_path, 'thumbs', xsize, filename) if test.f(thumb): continue sh.mkdir('-p', path.dirname(thumb)) > 1 if size > 600: msize = '%sx%s' % (size + 200, size + 200) processes.append(' '.join([ '-define jpeg:size=' + msize, filename, '-antialias -thumbnail', xsize, thumb])) else: processes.append(' '.join([ '-define jpeg:size=' + xsize, filename, '-thumbnail', xsize + '^', '-gravity center -extent', xsize, thumb])) for p in sh.convert.map(processes, stop_on_failure=True, pool_size=3): pass
def __init__(self, **config): self.sizes = (200, 600, 1280) self.build_path = config.get('build_path', 'build') package = os.path.dirname(__file__) self.static_dir = path(package, 'static', 'sdist') metadatas = [self.PhotoClass(p) for p in find(pwd(), '-name *metadata')] self.metadatas = metadatas templates = config.get('templates_path', []) templates = [path.abspath(p) for p in templates] templates.append(path(package, 'templates')) self.templates = templates loader = jinja2.FileSystemLoader(self.templates) self.env = jinja2.Environment( loader=loader, trim_blocks=True, lstrip_blocks=True, )
def thumbnail(self, size=200): filename = self.filename[len(pwd()) + 1:-9] url = '/thumbs/%(s)sx%(s)s/' % dict(s=size) return url + filename
def path(self): filename = self.filename[len(pwd()) + 1:-9] filename, _ = path.splitext(filename) return '/' + filename + '/'
def title(self): title = self.metadata.title if not title: filename = self.filename[len(pwd()) + 1:-9] return path.basename(filename) return safe_unicode(title)
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()
def name(self): return path.dirname(self[0].filename)[len(pwd()) + 1:]
def __repr__(self): return '<Photo for %r>' % self.filename[len(pwd()) + 1:-9]
def test_cd(self): pwd = sh.pwd() sh.cd('..') self.assertNotEqual(pwd, sh.env.pwd) self.assertEqual(sh.pwd(), sh.env.pwd) sh.cd(pwd)