예제 #1
0
파일: fileobject.py 프로젝트: emi1337/topaz
 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
예제 #2
0
    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
예제 #3
0
파일: ioobject.py 프로젝트: jeffhsu3/topaz
 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)
예제 #4
0
 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)
예제 #5
0
    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
예제 #6
0
 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