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
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]
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_()
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_()
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')
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')
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')
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')