def method_initialize(self, space, filename, w_mode=None, w_perm_or_opt=None, w_opt=None): if w_mode is None: w_mode = space.w_nil if w_perm_or_opt is None: w_perm_or_opt = space.w_nil if w_opt is None: w_opt = space.w_nil if isinstance(w_perm_or_opt, W_HashObject): assert w_opt is space.w_nil perm = 0665 w_opt = w_perm_or_opt elif w_opt is not space.w_nil: perm = space.int_w(w_perm_or_opt) else: perm = 0665 mode = map_filemode(space, w_mode) if w_perm_or_opt is not space.w_nil or w_opt is not space.w_nil: raise space.error(space.w_NotImplementedError, "options hash or permissions for File.new") try: self.fd = os.open(filename, mode, perm) except OSError as e: raise error_for_oserror(space, e) return self
def method_initialize(self, space, filename, w_mode=None, w_perm_or_opt=None, w_opt=None): if w_mode is None: w_mode = space.w_nil if w_perm_or_opt is None: w_perm_or_opt = space.w_nil if w_opt is None: w_opt = space.w_nil if isinstance(w_perm_or_opt, W_HashObject): assert w_opt is space.w_nil perm = 0665 w_opt = w_perm_or_opt elif w_opt is not space.w_nil: perm = space.int_w(w_perm_or_opt) else: perm = 0665 mode, mode_str, encoding = map_filemode(space, w_mode) if w_perm_or_opt is not space.w_nil or w_opt is not space.w_nil: raise space.error(space.w_NotImplementedError, "options hash or permissions for File.new") try: self.fd = os.open(filename, mode, perm) except OSError as e: raise error_for_oserror(space, e) # Optimization for ReadOnly files, using stream reading # this speedup common file read by 4 times # TODO: rewrite to something better if mode_str == "r" or mode_str == "rb": try: self.stream = streamio.fdopen_as_stream(self.fd, mode_str) except OSError as e: raise error_for_oserror(space, e) self.filename = filename return self
def method_sysopen(self, space, w_path, w_mode_str_or_int=None, w_perm=None): perm = 0666 mode = os.O_RDONLY if w_mode_str_or_int is not None: mode = map_filemode(space, w_mode_str_or_int) if w_perm is not None and w_perm is not space.w_nil: perm = space.int_w(w_perm) path = Coerce.path(space, w_path) try: fd = os.open(path, mode, perm) except OSError as e: raise error_for_oserror(space, e) else: return space.newint(fd)
def method_sysopen(self, space, w_path, w_mode_str_or_int=None, w_perm=None): perm = 0666 mode = os.O_RDONLY if w_mode_str_or_int is not None: mode, encoding = map_filemode(space, w_mode_str_or_int) if w_perm is not None and w_perm is not space.w_nil: perm = space.int_w(w_perm) path = Coerce.path(space, w_path) try: fd = os.open(path, mode, perm) except OSError as e: raise error_for_oserror(space, e) else: return space.newint(fd)
def method_initialize(self, space, w_fd_or_io, w_mode_str_or_int=None, w_opts=None): if isinstance(w_fd_or_io, W_IOObject): fd = w_fd_or_io.fd else: fd = Coerce.int(space, w_fd_or_io) if w_opts is not None: raise space.error(space.w_NotImplementedError, "options hash for IO.new") mode, mode_str, encoding = map_filemode(space, w_mode_str_or_int) self.fd = fd # Optimization for ReadOnly files, using stream reading # this speedup common file read by 4 times # TODO: rewrite to something better if mode_str == "r" or mode_str == "rb": try: self.stream = streamio.fdopen_as_stream(fd, mode_str) except OSError as e: raise error_for_oserror(space, e) return self