Ejemplo n.º 1
0
def extract_publisher_kwargs(args, sgfs=None, delete=True):

    kwargs = {}

    for key, value in args.__dict__.items():
        if key.startswith('publisher_'):
            if value is not None:
                kwargs[key[10:]] = value
            if delete:
                delattr(args, key)

    sgfs = sgfs or SGFS()
    if 'link' in kwargs:
        kwargs['link'] = parse_spec(sgfs, kwargs['link'])
    if 'template' in kwargs:
        kwargs['template'] = parse_spec(sgfs, kwargs['template'], entity_types=['PublishEvent'])

    return kwargs
Ejemplo n.º 2
0
def parse_as_publish(sgfs, input_, publish_types=None, search_for_publish=True, filters=(), fields=(), sort_key=None):
    """Given input from a user, find a publish.

    When searching, publishes are sorted by with ``sort_key``, and the last
    one is taken. The default ``sort_key`` sorts by ``(version, created_at)``.

    """

    if isinstance(input_, basestring):
        input_ = parse_spec(sgfs, input_)

    if publish_types and isinstance(publish_types, basestring):
        publish_types = [publish_types]

    if input_['type'] == 'PublishEvent':
        publish = input_
        if publish_types and publish.fetch('sg_type') not in publish_types:
            raise ValueError('PublishEvent is %s, should be in %r' % (publish['sg_type'], tuple(sorted(publish_types))))
        return publish

    if not search_for_publish:
        raise ValueError('no publish from input')

    base_filters = list(filters or ())
    base_fields = list(fields or ()) + (['sg_version', 'created_at'] if sort_key is None else [])
    if publish_types:
        base_filters.append(('sg_type', 'in', tuple(publish_types)))

    if input_['type'] == 'Task':
        publishes = sgfs.session.find('PublishEvent', base_filters + [
            ('sg_link', 'is', input_),
        ], base_fields)
    elif input_['type'] in ('Shot', 'Asset'):
        publishes = sgfs.session.find('PublishEvent', base_filters + [
            ('sg_link.Task.entity', 'is', input_),
        ], base_fields)
    else:
        raise ValueError('cannot find publishes from %s' % input_['type'])

    if not publishes:
        raise ValueError('no publishes on {type} {id}'.format(**input_))

    publishes.sort(key=sort_key or default_sort_key)
    return publishes[-1]
Ejemplo n.º 3
0
def _main():

    import sgfs.commands.utils as command_utils

    optparser = optparse.OptionParser()
    optparser.add_option('-c',
                         '--combobox',
                         action="store_true",
                         dest="combobox")
    optparser.add_option('-r', '--root', dest='root')

    opts, args = optparser.parse_args()

    global model, view, dialog

    sgfs = SGFS()

    if opts.root:
        root = command_utils.parse_spec(sgfs, opts.root.split())
        model = Model(state_from_entity(
            sgfs.session.get(root['type'], root['id'])),
                      sgfs=sgfs)

    else:
        model = Model(sgfs=sgfs)

    # entity = model.sgfs.session.get('Task', 43897)
    # entities = []
    # while entity:
    #     entities.append(entity)
    #     entity = entity.parent()
    # print 'ENTITY', entities
    # model.register_node_type(functools.partial(ShotgunEntities, entities=entities))

    # model.register_node_type(SGFSRoots)
    model.register_node_type(functools.partial(ShotgunPublishStream))
    # model.register_node_type(functools.partial(ShotgunQuery, entity_types=('EventLogEntry', 'ActionMenuItem', 'Step', 'PublishEvent', 'Asset', 'Sequence', 'Shot', 'Task', 'Version', 'Tool', 'Ticket', 'Project', 'HumanUser')))
    model.register_node_type(
        functools.partial(ShotgunQuery,
                          entity_types=('Asset', 'Sequence', 'Shot', 'Project',
                                        'Task')))

    model.register_node_type(
        functools.partial(TemplateGlobPicker,
                          entity_types=('Task', ),
                          template='nuke_scripts_dir',
                          glob='*.nk'))
    # model.register_node_type(functools.partial(DirectoryPicker, entity_types=('Task', ),))

    if opts.combobox:
        view = ComboBoxView()
    else:
        view = ColumnView()

    view.setModel(model)

    type_ = None
    id_ = None

    if args:
        init = command_utils.parse_spec(model.sgfs, args)
        type_ = init.get('type')
        id_ = init.get('id')
        print type_, id_

    if type_ and id_:
        entity = model.sgfs.session.get(type_, id_)
        init_state = state_from_entity(entity)

        index = model.index_from_state(init_state)
        if index:
            view.setCurrentIndex(index)
        else:
            print 'Could not get index for initial state.'

    view.setMinimumWidth(800)

    if not opts.combobox:
        view.setMaximumHeight(400)
        view.setPreviewVisible(False)
        view.setColumnWidths([1] * 10)

    dialog = QtGui.QDialog()
    dialog.setWindowTitle(sys.argv[0])
    dialog.setLayout(QtGui.QHBoxLayout())
    dialog.layout().addWidget(view)
    dialog.layout().addStretch()

    dialog.show()
    dialog.raise_()
Ejemplo n.º 4
0
def main():
    
    import sgfs.commands.utils as command_utils
    
    
    optparser = optparse.OptionParser()
    optparser.add_option('-c', '--combobox', action="store_true", dest="combobox")
    optparser.add_option('-r', '--root', dest='root')
    
    opts, args = optparser.parse_args()
    
    global model, view, dialog
    
    sgfs = SGFS()
    
    
    if opts.root:
        root = command_utils.parse_spec(sgfs, opts.root.split())
        model = Model(state_from_entity(sgfs.session.get(root['type'], root['id'])), sgfs=sgfs)
    
    else:
        model = Model(sgfs=sgfs)


    # entity = model.sgfs.session.get('Task', 43897)
    # entities = []
    # while entity:
    #     entities.append(entity)
    #     entity = entity.parent()
    # print 'ENTITY', entities
    # model.register_node_type(functools.partial(ShotgunEntities, entities=entities))


    # model.register_node_type(SGFSRoots)
    # model.register_node_type(functools.partial(ShotgunPublishStream, publish_types=['maya_scene']))
    # model.register_node_type(functools.partial(ShotgunQuery, entity_types=('EventLogEntry', 'ActionMenuItem', 'Step', 'PublishEvent', 'Asset', 'Sequence', 'Shot', 'Task', 'Version', 'Tool', 'Ticket', 'Project', 'HumanUser')))
    model.register_node_type(functools.partial(ShotgunQuery, entity_types=('Asset', 'Sequence', 'Shot', 'Project', 'Task')))

    model.register_node_type(functools.partial(TemplateGlobPicker, entity_types=('Task', ), template='nuke_scripts_dir', glob='*.nk'))
    # model.register_node_type(functools.partial(DirectoryPicker, entity_types=('Task', ),))

    if opts.combobox:
        view = ComboBoxView()
    else:
        view = ColumnView()
    
    view.setModel(model)

    type_ = None
    id_ = None
    
    if args:
        init = command_utils.parse_spec(model.sgfs, args)
        type_ = init.get('type')
        id_ = init.get('id')
        print type_, id_
    
    if type_ and id_:
        entity = model.sgfs.session.get(type_, id_)
        init_state = state_from_entity(entity)

        index = model.index_from_state(init_state)
        if index:
            view.setCurrentIndex(index)
        else:
            print 'Could not get index for initial state.'

    view.setMinimumWidth(800)

    if not opts.combobox:
        view.setMaximumHeight(400)
        view.setPreviewVisible(False)
        view.setColumnWidths([1] * 10)


    dialog = QtGui.QDialog()
    dialog.setWindowTitle(sys.argv[0])
    dialog.setLayout(QtGui.QHBoxLayout())
    dialog.layout().addWidget(view)
    dialog.layout().addStretch()

    dialog.show()
    dialog.raise_()
Ejemplo n.º 5
0
def main(argv=None):

    import argparse
    import logging
    log = logging.getLogger(__name__)

    parser = argparse.ArgumentParser()
    parser.add_argument('--world', action='store_true')
    parser.add_argument('--no-nuke', action='store_true')

    parser.add_argument('-s', '--start', type=int)
    parser.add_argument('-e', '--end', type=int)
    parser.add_argument('-d', '--out-dir')

    parser.add_argument('--publish-link')
    parser.add_argument('--publish-name')
    parser.add_argument('--publish-thumbnail')

    parser.add_argument('-l', '--list-cameras', action='store_true')
    parser.add_argument('scene')
    parser.add_argument('camera', nargs='?')
    args = parser.parse_args(argv)

    log.info('initializing Maya')
    import maya.standalone
    maya.standalone.initialize()

    log.info('loading file')
    cmds.file(args.scene, open=True)
    log.info('done loading file')

    cameras = cmds.ls(args.camera or '*', type='camera', long=True) or ()
    if args.list_cameras:
        print '\n'.join(cameras)
        return

    if args.camera:
        if not cameras:
            log.error('no cameras matching %s' % args.camera)
            exit(1)
        camera = cameras[0]
        if len(cameras) > 1:
            log.warning('more than one camera matching %s; taking %s' % (args.camera, camera))
    else:
        cameras = [c for c in cameras if c.split('|')[1] not in ('top', 'side', 'persp', 'front')]
        if not cameras:
            log.error('no non-default cameras')
            exit(1)
        camera = cameras[0]
        if len(cameras) > 1:
            log.warning('more than one non-default camera; taking %s' % camera)

    log.info('will export %s' % camera)

    name = args.publish_name or os.path.splitext(os.path.basename(args.scene))[0]
    exporter = CameraExporter()
    if args.publish_link:
        link = parse_spec(SGFS(), args.publish_link)
        print link

        # TODO: take a screenshot (on OS X) via screenshot
        thumbnail_path = args.publish_thumbnail

        exporter.publish(link, name, dict(camera=camera, bake_to_world_space=args.world), thumbnail_path=thumbnail_path)
    else:
        directory = args.out_dir or os.path.join(args.scene, '..', 'data', 'camera', name)
        exporter.export(directory=directory, path=directory, camera=camera, bake_to_world_space=args.world)

    log.info('DONE')
Ejemplo n.º 6
0
def main(argv=None):

    import argparse
    import logging
    log = logging.getLogger(__name__)

    parser = argparse.ArgumentParser()
    parser.add_argument('--world', action='store_true')
    parser.add_argument('--no-nuke', action='store_true')

    parser.add_argument('-s', '--start', type=int)
    parser.add_argument('-e', '--end', type=int)
    parser.add_argument('-d', '--out-dir')

    parser.add_argument('--publish-link')
    parser.add_argument('--publish-name')
    parser.add_argument('--publish-thumbnail')

    parser.add_argument('-l', '--list-cameras', action='store_true')
    parser.add_argument('scene')
    parser.add_argument('camera', nargs='?')
    args = parser.parse_args(argv)

    log.info('initializing Maya')
    import maya.standalone
    maya.standalone.initialize()

    log.info('loading file')
    cmds.file(args.scene, open=True)
    log.info('done loading file')

    cameras = cmds.ls(args.camera or '*', type='camera', long=True) or ()
    if args.list_cameras:
        print '\n'.join(cameras)
        return

    if args.camera:
        if not cameras:
            log.error('no cameras matching %s' % args.camera)
            exit(1)
        camera = cameras[0]
        if len(cameras) > 1:
            log.warning('more than one camera matching %s; taking %s' %
                        (args.camera, camera))
    else:
        cameras = [
            c for c in cameras
            if c.split('|')[1] not in ('top', 'side', 'persp', 'front')
        ]
        if not cameras:
            log.error('no non-default cameras')
            exit(1)
        camera = cameras[0]
        if len(cameras) > 1:
            log.warning('more than one non-default camera; taking %s' % camera)

    log.info('will export %s' % camera)

    name = args.publish_name or os.path.splitext(os.path.basename(
        args.scene))[0]
    exporter = CameraExporter()
    if args.publish_link:
        link = parse_spec(SGFS(), args.publish_link)
        print link

        # TODO: take a screenshot (on OS X) via screenshot
        thumbnail_path = args.publish_thumbnail

        exporter.publish(link,
                         name,
                         dict(camera=camera, bake_to_world_space=args.world),
                         thumbnail_path=thumbnail_path)
    else:
        directory = args.out_dir or os.path.join(args.scene, '..', 'data',
                                                 'camera', name)
        exporter.export(directory=directory,
                        path=directory,
                        camera=camera,
                        bake_to_world_space=args.world)

    log.info('DONE')
Ejemplo n.º 7
0
def main(argv=None):

    import argparse
    import logging
    log = logging.getLogger(__name__)

    parser = argparse.ArgumentParser()
    parser.add_argument('--no-world', action='store_true')
    parser.add_argument('--no-abc', action='store_true')
    parser.add_argument('-s', '--start', type=int)
    parser.add_argument('-e', '--end', type=int)
    parser.add_argument('-d', '--out-dir')

    parser.add_argument('--publish-link')
    parser.add_argument('--publish-name')
    parser.add_argument('--publish-thumbnail')

    parser.add_argument('-l', '--list-sets', action='store_true')
    parser.add_argument('scene')
    parser.add_argument('cache_sets', nargs='*')
    args = parser.parse_args(argv)

    log.info('initializing Maya')
    import maya.standalone
    maya.standalone.initialize()

    log.info('loading file')
    cmds.file(args.scene, open=True)
    log.info('done loading file')

    cache_sets = set(
        cmds.ls(*(args.cache_sets or ['__cache__*']),
                sets=True,
                recursive=True,
                long=True) or ())
    if args.list_sets:
        print '\n'.join(sorted(cache_sets))
        return

    frame_from = args.start or cmds.playbackOptions(q=True,
                                                    animationStartTime=True)
    frame_to = args.end or cmds.playbackOptions(q=True, animationEndTime=True)

    world = not args.no_world
    as_abc = not args.no_abc

    to_cache = []
    for cache_set in cache_sets:
        members = cmds.sets(cache_set, q=True)
        name = cache_name_from_cache_set(cache_set) or 'cache'
        to_cache.append((members, name, frame_from, frame_to, world))

    name = args.publish_name or os.path.splitext(os.path.basename(
        args.scene))[0]
    exporter = Exporter()
    if args.publish_link:
        link = parse_spec(SGFS(), args.publish_link)

        # TODO: take a screenshot (on OS X) via screenshot
        thumbnail_path = args.publish_thumbnail

        exporter.publish(link,
                         name,
                         dict(to_cache=to_cache, as_abc=as_abc),
                         thumbnail_path=thumbnail_path)
    else:
        directory = args.out_dir or os.path.join(args.scene, '..', 'data',
                                                 'geo_cache', name)
        exporter.export(directory=directory,
                        path=directory,
                        to_cache=to_cache,
                        as_abc=as_abc)

    log.info('DONE')
Ejemplo n.º 8
0
def main(argv=None):

    import argparse
    import logging
    log = logging.getLogger(__name__)

    parser = argparse.ArgumentParser()
    parser.add_argument('--no-world', action='store_true')
    parser.add_argument('--no-abc', action='store_true')
    parser.add_argument('-s', '--start', type=int)
    parser.add_argument('-e', '--end', type=int)
    parser.add_argument('-d', '--out-dir')

    parser.add_argument('--publish-link')
    parser.add_argument('--publish-name')
    parser.add_argument('--publish-thumbnail')

    parser.add_argument('-l', '--list-sets', action='store_true')
    parser.add_argument('scene')
    parser.add_argument('cache_sets', nargs='*')
    args = parser.parse_args(argv)

    log.info('initializing Maya')
    import maya.standalone
    maya.standalone.initialize()

    log.info('loading file')
    cmds.file(args.scene, open=True)
    log.info('done loading file')

    cache_sets = set(cmds.ls(*(args.cache_sets or ['__cache__*']), sets=True, recursive=True, long=True) or ())
    if args.list_sets:
        print '\n'.join(sorted(cache_sets))
        return

    frame_from = args.start or cmds.playbackOptions(q=True, animationStartTime=True)
    frame_to   = args.end   or cmds.playbackOptions(q=True, animationEndTime=True)
    
    world = not args.no_world
    as_abc = not args.no_abc

    to_cache = []
    for cache_set in cache_sets:
        members = cmds.sets(cache_set, q=True)
        name = cache_name_from_cache_set(cache_set) or 'cache'
        to_cache.append((members, name, frame_from, frame_to, world))

    name = args.publish_name or os.path.splitext(os.path.basename(args.scene))[0]
    exporter = Exporter()
    if args.publish_link:
        link = parse_spec(SGFS(), args.publish_link)

        # TODO: take a screenshot (on OS X) via screenshot
        thumbnail_path = args.publish_thumbnail
        
        exporter.publish(link, name, dict(to_cache=to_cache, as_abc=as_abc), thumbnail_path=thumbnail_path)
    else:
        directory = args.out_dir or os.path.join(args.scene, '..', 'data', 'geo_cache', name)
        exporter.export(directory=directory, path=directory, to_cache=to_cache, as_abc=as_abc)

    log.info('DONE')