Пример #1
0
 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)
Пример #2
0
    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)
Пример #3
0
 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
Пример #4
0
    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,
        )
Пример #5
0
 def thumbnail(self, size=200):
     filename = self.filename[len(pwd()) + 1:-9]
     url = '/thumbs/%(s)sx%(s)s/' % dict(s=size)
     return url + filename
Пример #6
0
 def path(self):
     filename = self.filename[len(pwd()) + 1:-9]
     filename, _ = path.splitext(filename)
     return '/' + filename + '/'
Пример #7
0
 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)
Пример #8
0
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()
Пример #9
0
 def name(self):
     return path.dirname(self[0].filename)[len(pwd()) + 1:]
Пример #10
0
 def __repr__(self):
     return '<Photo for %r>' % self.filename[len(pwd()) + 1:-9]
Пример #11
0
 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)