def add_collection(self, path, *args): """Add collection to the namespace. For instance:: inst.add_collection('/c1') :param string path: path under which to add the collection :param args[0]: :py:class:`Collection` class to add, if present :rtype: the :py:class:`Collection` which was added :raises: :py:class:`SmapException` if the parent is not a collection, or the path exists. """ if len(args) > 0 and ICollection.providedBy(args[0]): collection = args[0] elif len(args) == 0: collection = Collection(path, self) else: raise SmapException("add_collection: wrong number of arguments") path = util.split_path(path) if len(path) > 0: parent = self.get_collection(util.join_path(path[:-1])) if not parent: raise SmapException("add_collection: parent is not collection!") parent.add_child(path[-1]) if util.join_path(path) in self.OBJS_PATH: raise SmapException("add_timeseries: path " + str(path) + " exists!") self.OBJS_PATH[util.join_path(path)] = collection if not self.loading: self.reports.update_subscriptions() return collection
def add_collection(self, path, *args): """Add collection to the namespace. For instance:: inst.add_collection('/c1') :param string path: path under which to add the collection :param args[0]: :py:class:`Collection` class to add, if present :rtype: the :py:class:`Collection` which was added :raises: :py:class:`SmapException` if the parent is not a collection, or the path exists. """ if len(args) > 0 and ICollection.providedBy(args[0]): collection = args[0] elif len(args) == 0: collection = Collection(path, self) else: raise SmapException("add_collection: wrong number of arguments") path = util.split_path(path) if len(path) > 0: parent = self.get_collection(util.join_path(path[:-1])) if not parent: raise SmapException( "add_collection: parent is not collection!") parent.add_child(path[-1]) if util.join_path(path) in self.OBJS_PATH: raise SmapException("add_timeseries: path " + str(path) + " exists!") self.OBJS_PATH[util.join_path(path)] = collection if not self.loading: self.reports.update_subscriptions() return collection
def make_ffmpeg_args(in_file: str, out_file: str, from_time: str, to_time: str) -> t.Tuple[str, ...]: args = DEFAULT_ARGS.copy() from_time = parse_time(from_time) from_time_formatted = format_time(from_time) args[10] = f'-ss {from_time_formatted}' args[20] = f'-i "{in_file}"' try: to_time = parse_time(to_time) except ValueError: pass else: duration_formatted = format_timedelta(get_duration(from_time, to_time)) args[30] = f'-to {duration_formatted}' _, in_file_name = split_path(in_file) in_file_extension = get_extension(in_file_name) args[50] = f'"{add_extension(out_file, extension=in_file_extension)}"' sorted_args = tuple(v for _, v in sorted(args.items())) return sorted_args
def create_name(inp, tag, ext, out, extra_tag): root, name, _ = split_path(inp) if extra_tag is not None: tag = '{0}_{1}'.format(tag, extra_tag) if out is not None: root = out return os.path.join(root, '{0}_{1}.{2}'.format(name, tag, ext))
def admin(): if 'username' not in session: if app.debug: print '还没登录呢' return redirect(url_for('index')) #若已经登录 print '用户已经登录', session request_dir = request.args.get('dir', '') #url中请求的参数 request_dir = util.beautify_path(request_dir.strip()) print '请求查看的目录:', request_dir bucket = upyun2.UpYun2(session['bucket'], session['username'], session['password'], timeout=10, endpoint=upyun.ED_AUTO) #url无dir参数,或者为'/' if len(request_dir) == 0 or request_dir == '/': if app.debug: print '显示根目录内容' request_dir = '/' dir_list = bucket.getlist(request_dir) dir_list = util.process_dir_list(request_dir, dir_list) split_path = util.split_path(request_dir) return render_template('admin.html', username=escape(session['username']), bucketname=escape(session['bucket']), dir_list=dir_list, split_path=split_path, request_dir=escape(request_dir)) #若url有dir参数,非根目录dir if bucket.isdir(request_dir): if request_dir[-1] != '/': request_dir = request_dir + '/' dir_list = bucket.getlist(request_dir) dir_list = util.process_dir_list(request_dir, dir_list) split_path = util.split_path(request_dir) return render_template('admin.html', username=escape(session['username']), bucketname=escape(session['bucket']), dir_list=dir_list, split_path=split_path, request_dir=escape(request_dir)) else: return render_template('admin.html', username=escape(session['username']), bucketname=escape(session['bucket']), error='您请求的目录不存在')
def add_timeseries(self, path, *args, **kwargs): """Add a timeseries to the smap server at the given path. This will generate a UUID for the timeseries. direct form :param path a Timeseries instance simple form :param args[0] is a uuid instance, or a key to generate a uuid with by combining it with the root uuid. :param args[1] and kwargs are arguments passed to the Timeseries constructor. Therefore you have to include at least the UnitofMeasure :param boolean replace: (kwarg) replace an existing timeseries at that path instead of throwing an exception :param boolean recurse: recursively create parent collections instead of thrwoing an exception. Default is True. :raises: :py:class:`SmapException` if the parent isn't a collection or the path already exists. """ replace = kwargs.pop('replace', False) recurse = kwargs.pop('recurse', True) klass = kwargs.pop('klass', Timeseries) if len(args) == 0 or \ not ITimeseries.providedBy(args[0]) and not IActuator.providedBy(args[0]): if len(args) == 2: if not isinstance(args[0], uuid.UUID): id = self.uuid(args[0], namespace=kwargs.get('namespace', None)) else: id = args[0] args = args[1:] elif len(args) == 1: id = self.uuid(util.norm_path(path), kwargs.get('namespace', None)) else: id = self.uuid(util.norm_path(path)) # raise SmapException("SmapInstance.add_timeseries may only be called " # "with two or three arguments") kwargs.pop('namespace', None) timeseries = klass(id, *args, **kwargs) if id != args[0]: setattr(timeseries, "key", args[0]) else: timeseries = args[0] path = util.split_path(path) if recurse: self._add_parents(path) parent = self.get_collection(util.join_path(path[:-1])) if not replace and util.join_path(path) in self.OBJS_PATH: raise SmapException("add_timeseries: path " + str(path) + " exists!") if not parent: raise SmapException("add_timeseries: parent is not a collection!") parent.add_child(path[-1]) # place the new timeseries into the uuid and path tables self.OBJS_UUID[timeseries['uuid']] = timeseries self.OBJS_PATH[util.join_path(path)] = timeseries timeseries.inst = self setattr(timeseries, 'path', util.join_path(path)) if not self.loading: self.reports.update_subscriptions() return timeseries
def save_result_file(seq_name, pred_dir, tracks): seq_filepaths = glob.glob(f'{paths.DATA_ROOT}/3dpw/sequenceFiles/*/*.pkl') seq_path = next(p for p in seq_filepaths if os.path.basename(p) == f'{seq_name}.pkl') rel_path = '/'.join(util.split_path(seq_path)[-2:]) out_path = f'{pred_dir}/{rel_path}' n_frames = len( glob.glob(f'{paths.DATA_ROOT}/3dpw/imageFiles/{seq_name}/image_*.jpg')) coords3d_raw = np.array( [complete_track(track, n_frames) for track in tracks]) / 1000 util.dump_pickle(dict(jointPositions=coords3d_raw), out_path)
def get_bbox(im_coords, image_relpath, detections_all): joint_box = boxlib.expand(boxlib.bb_of_points(im_coords), 1.05) relpath_in_dataset = os.path.join(*util.split_path(image_relpath)[1:]) if relpath_in_dataset in detections_all and detections_all[relpath_in_dataset]: most_confident_detection = max(detections_all[relpath_in_dataset], key=lambda x: x[4]) detection_box = np.array(most_confident_detection[:4]) union_box = boxlib.box_hull(detection_box, joint_box) # Sanity check if boxlib.iou(union_box, joint_box) > 0.5: return union_box return joint_box
def readdir(self, path, fh): path = split_path(path) yield "." yield ".." if len(path) == 0: yield from self._artists() elif len(path) == 1: yield from self._albums(path[0]) elif len(path) == 2: yield from self._track_filenames(path[0], path[1])
def dirty_children(self): """Recursively mark all timeseries contained in this collection as dirty """ def explore(item, path): if not 'Contents' in item: item.dirty = True else: for ps in item['Contents']: newpath = path + [ps] explore(self.inst.lookup(util.join_path(newpath)), newpath) if hasattr(self, 'path'): explore(self, util.split_path(getattr(self, 'path')))
def get_parallel_filename(self, paralang): """ Infer the absolute path of the parallel file """ if self.get_parallel_basename(paralang) is None: return None root, module, lang, genre, subdirs, _ = util.split_path(self.get_name()) parallel_basename = '{}.xml'.format( self.get_parallel_basename(paralang)) return apply( os.path.join, [root, module, paralang, genre, subdirs, parallel_basename] )
def run(in_file: str, from_time: str, to_time: str, out_file: str, use_ffmpeg_params: bool, ffmpeg_params: str): colorama.init() # cd, so we don't end up in system32... working_dir, _ = split_path(in_file) os.chdir(working_dir) try: args = make_ffmpeg_args(in_file, out_file, from_time, to_time) except exceptions.WrongDurationError as e: echo_error(e) exit(1) else: p = subprocess.Popen(' '.join(args) + ffmpeg_params) p.wait() click.echo('Press any key to continue...') msvcrt.getch()
def lookup(self, id, pred=None): """Retrieve an object in the resource hierarchy by path or uuid. If *id* is a string not starting with ``/``, it will be passed to the :py:class:`uuid.UUID` constructor; otherwise it will be treated as a pathname. *pred* is an optional predicate which can be used to test the result. """ if util.is_string(id): path = util.split_path(id) if len(path) > 0 and path[-1][0] == "+": return self._lookup_r(util.join_path(path[:-1]), pred=pred) else: obj = self.OBJS_PATH.get(util.join_path(path), None) elif isinstance(id, uuid.UUID): return self.OBJS_UUID.get(id, None) else: obj = None if not pred or pred(obj): return obj else: return None
def _get_track(self, path): parts = split_path(path) return self.tree[parts[0]][parts[1]][os.path.splitext(parts[2])[0]]
def _is_dir(self, path): return len(split_path(path)) != 3
def _add(self, *args): """Add a new reading to this timeseries. This version must only be called from the :py:mod:`twisted` main loop; *i.e.* from a callback added with ``reactor.callFromThread()`` Can be called with 1, 2, or 3 arguments. The forms are * ``_add(value)`` * ``_add(time, value)`` * ``_add(time, value, seqno)`` :raises SmapException: if the value's type does not match the stream type, or was called with an invalid number of arguments. """ seqno = None if len(args) == 1: time = util.now() if self.milliseconds: time *= 1000 value = args[0] elif len(args) == 2: time, value = args elif len(args) == 3: time, value, seqno = args else: raise SmapException("Invalid add arguments: must be (value), " "(time, value), or (time, value, seqno)") # note that we got data now self.inst.statslog.mark() time = int(time) if not self.milliseconds: time *= 1000 if not self._check_type(value): raise SmapException("Attempted to add " + str(value) + " to Timeseries, but " + "the timeseries type is " + self.__getitem__('Properties')['ReadingType']) if seqno: reading = time, value, seqno else: reading = time, value self["Readings"].append(reading) if not hasattr(self, 'inst'): return # if a timeseries is dirty, we need to republish all of its # metadata before we publish it so stream is right. some of # this may have already been published, in which case it won't # actually do anything. if self.dirty: split_path = util.split_path(getattr(self, 'path')) for i in xrange(0, len(split_path)): path_seg = util.join_path(split_path[:i]) self.inst.reports.publish(path_seg, self.inst.get_collection(path_seg)) rpt = dict(self) rpt['Readings'] = [reading] self.inst.reports.publish(getattr(self, 'path'), rpt) self.dirty = False else: # publish a stripped-down Timeseries object self.inst.reports.publish(getattr(self, 'path'), {'uuid' : self['uuid'], 'Readings' : [reading]})
def _add(self, *args): """Add a new reading to this timeseries. This version must only be called from the :py:mod:`twisted` main loop; *i.e.* from a callback added with ``reactor.callFromThread()`` Can be called with 1, 2, or 3 arguments. The forms are * ``_add(value)`` * ``_add(time, value)`` * ``_add(time, value, seqno)`` :raises SmapException: if the value's type does not match the stream type, or was called with an invalid number of arguments. """ seqno = None if len(args) == 1: time = util.now() if self.milliseconds: time *= 1000 value = args[0] elif len(args) == 2: time, value = args elif len(args) == 3: time, value, seqno = args else: raise SmapException("Invalid add arguments: must be (value), " "(time, value), or (time, value, seqno)") # note that we got data now self.inst.statslog.mark() time = int(time) if not self.milliseconds: time *= 1000 if not self._check_type(value): raise SmapException("Attempted to add " + str(value) + " to Timeseries, but " + "the timeseries type is " + self.__getitem__('Properties')['ReadingType']) if seqno: reading = time, value, seqno else: reading = time, value self["Readings"].append(reading) if not hasattr(self, 'inst'): return # if a timeseries is dirty, we need to republish all of its # metadata before we publish it so stream is right. some of # this may have already been published, in which case it won't # actually do anything. if self.dirty: split_path = util.split_path(getattr(self, 'path')) for i in xrange(0, len(split_path)): path_seg = util.join_path(split_path[:i]) self.inst.reports.publish(path_seg, self.inst.get_collection(path_seg)) rpt = dict(self) rpt['Readings'] = [reading] self.inst.reports.publish(getattr(self, 'path'), rpt) self.dirty = False else: # publish a stripped-down Timeseries object self.inst.reports.publish(getattr(self, 'path'), { 'uuid': self['uuid'], 'Readings': [reading] })
def set_lang_genre_xsl(self): '''Set the mainlang and genre variables in the xsl file, if possible''' with util.ignored(TypeError): xsl_tuple = util.split_path(self.filename) self.set_variable('mainlang', xsl_tuple.lang) self.set_variable('genre', xsl_tuple.genre)