"""This module provides access to operating system functionality that is standardized by the C Standard and the POSIX standard (a thinly disguised Unix interface). Refer to the library manual and corresponding Unix manual entries for more information on calls.""" import datetime from browser import window def _randint(a, b): return int(window.Math.random()*(b-a+1)+a) F_OK = 0 O_APPEND = 8 O_BINARY = 32768 O_CREAT = 256 O_EXCL = 1024 O_NOINHERIT = 128 O_RANDOM = 16 O_RDONLY = 0 O_RDWR = 2 O_SEQUENTIAL = 32 O_SHORT_LIVED = 4096 O_TEMPORARY = 64 O_TEXT = 16384 O_TRUNC = 512 O_WRONLY = 1 P_DETACH = 4 P_NOWAIT = 1 P_NOWAITO = 3 P_OVERLAY = 2 P_WAIT = 0 R_OK = 4 TMP_MAX = 32767 W_OK = 2 X_OK = 1 class __loader__: pass def _exit(*args,**kw): """_exit(status) Exit to the system with specified status, without normal exit processing.""" pass def _getdiskusage(*args,**kw): """_getdiskusage(path) -> (total, free) Return disk usage statistics about the given path as (total, free) tuple.""" pass def _getfileinformation(*args,**kw): pass def _getfinalpathname(*args,**kw): pass def _getfullpathname(*args,**kw): pass _have_functions = ['MS_WINDOWS'] def _isdir(*args,**kw): """Return true if the pathname refers to an existing directory.""" pass def abort(*args,**kw): """abort() -> does not return! Abort the interpreter immediately. This 'dumps core' or otherwise fails in the hardest way possible on the hosting operating system.""" pass def access(*args,**kw): """access(path, mode, *, dir_fd=None, effective_ids=False, follow_symlinks=True) Use the real uid/gid to test for access to a path. Returns True if granted, False otherwise. If dir_fd is not None, it should be a file descriptor open to a directory, and path should be relative; path will then be relative to that directory. If effective_ids is True, access will use the effective uid/gid instead of the real uid/gid. If follow_symlinks is False, and the last element of the path is a symbolic link, access will examine the symbolic link itself instead of the file the link points to. dir_fd, effective_ids, and follow_symlinks may not be implemented on your platform. If they are unavailable, using them will raise a NotImplementedError. Note that most operations will use the effective uid/gid, therefore this routine can be used in a suid/sgid environment to test if the invoking user has the specified access to the path. The mode argument can be F_OK to test existence, or the inclusive-OR of R_OK, W_OK, and X_OK.""" pass def chdir(*args,**kw): """chdir(path) Change the current working directory to the specified path. path may always be specified as a string. On some platforms, path may also be specified as an open file descriptor. If this functionality is unavailable, using it raises an exception.""" pass def chmod(*args,**kw): """chmod(path, mode, *, dir_fd=None, follow_symlinks=True) Change the access permissions of a file. path may always be specified as a string. On some platforms, path may also be specified as an open file descriptor. If this functionality is unavailable, using it raises an exception. If dir_fd is not None, it should be a file descriptor open to a directory, and path should be relative; path will then be relative to that directory. If follow_symlinks is False, and the last element of the path is a symbolic link, chmod will modify the symbolic link itself instead of the file the link points to. It is an error to use dir_fd or follow_symlinks when specifying path as an open file descriptor. dir_fd and follow_symlinks may not be implemented on your platform. If they are unavailable, using them will raise a NotImplementedError.""" pass def close(*args,**kw): """close(fd) Close a file descriptor (for low level IO).""" pass def closerange(*args,**kw): """closerange(fd_low, fd_high) Closes all file descriptors in [fd_low, fd_high), ignoring errors.""" pass def device_encoding(*args,**kw): """device_encoding(fd) -> str Return a string describing the encoding of the device if the output is a terminal; else return None.""" pass def dup(*args,**kw): """dup(fd) -> fd2 Return a duplicate of a file descriptor.""" pass def dup2(*args,**kw): """dup2(old_fd, new_fd) Duplicate file descriptor.""" pass environ = {'PYTHONUSERBASE': ' '} error = OSError def execv(*args,**kw): """execv(path, args) Execute an executable path with arguments, replacing current process. path: path of executable file args: tuple or list of strings""" pass def execve(*args,**kw): """execve(path, args, env) Execute a path with arguments and environment, replacing current process. path: path of executable file args: tuple or list of arguments env: dictionary of strings mapping to strings On some platforms, you may specify an open file descriptor for path; execve will execute the program the file descriptor is open to. If this functionality is unavailable, using it raises NotImplementedError.""" pass def fstat(*args,**kw): """fstat(fd) -> stat result Like stat(), but for an open file descriptor. Equivalent to stat(fd=fd).""" pass def fsync(*args,**kw): """fsync(fildes) force write of file with filedescriptor to disk.""" pass def get_terminal_size(*args,**kw): """Return the size of the terminal window as (columns, lines). The optional argument fd (default standard output) specifies which file descriptor should be queried. If the file descriptor is not connected to a terminal, an OSError is thrown. This function will only be defined if an implementation is available for this system. shutil.get_terminal_size is the high-level function which should normally be used, os.get_terminal_size is the low-level implementation.""" pass def getcwd(*args,**kw): """getcwd() -> path Return a unicode string representing the current working directory.""" return __BRYTHON__.brython_path # XXX fix me def getcwdb(*args,**kw): """getcwdb() -> path Return a bytes string representing the current working directory.""" pass def getlogin(*args,**kw): """getlogin() -> string Return the actual login name.""" pass def getpid(*args,**kw): """getpid() -> pid Return the current process id""" return 0 def getppid(*args,**kw): """getppid() -> ppid Return the parent's process id. If the parent process has already exited, Windows machines will still return its id; others systems will return the id of the 'init' process (1).""" pass def isatty(*args,**kw): """isatty(fd) -> bool Return True if the file descriptor 'fd' is an open file descriptor connected to the slave end of a terminal.""" pass def kill(*args,**kw): """kill(pid, sig) Kill a process with a signal.""" pass def link(*args,**kw): """link(src, dst, *, src_dir_fd=None, dst_dir_fd=None, follow_symlinks=True) Create a hard link to a file. If either src_dir_fd or dst_dir_fd is not None, it should be a file descriptor open to a directory, and the respective path string (src or dst) should be relative; the path will then be relative to that directory. If follow_symlinks is False, and the last element of src is a symbolic link, link will create a link to the symbolic link itself instead of the file the link points to. src_dir_fd, dst_dir_fd, and follow_symlinks may not be implemented on your platform. If they are unavailable, using them will raise a NotImplementedError.""" pass def listdir(*args,**kw): """listdir(path='.') -> list_of_filenames Return a list containing the names of the files in the directory. The list is in arbitrary order. It does not include the special entries '.' and '..' even if they are present in the directory. path can be specified as either str or bytes. If path is bytes, the filenames returned will also be bytes; in all other circumstances the filenames returned will be str. On some platforms, path may also be specified as an open file descriptor; the file descriptor must refer to a directory. If this functionality is unavailable, using it raises NotImplementedError.""" pass def lseek(*args,**kw): """lseek(fd, pos, how) -> newpos Set the current position of a file descriptor. Return the new cursor position in bytes, starting from the beginning.""" pass def lstat(*args,**kw): """lstat(path, *, dir_fd=None) -> stat result Like stat(), but do not follow symbolic links. Equivalent to stat(path, follow_symlinks=False).""" return stat_result() def mkdir(*args,**kw): """mkdir(path, mode=0o777, *, dir_fd=None) Create a directory. If dir_fd is not None, it should be a file descriptor open to a directory, and path should be relative; path will then be relative to that directory. dir_fd may not be implemented on your platform. If it is unavailable, using it will raise a NotImplementedError. The mode argument is ignored on Windows.""" pass def open(path, flags, mode=0o777, *args, dir_fd=None): """open(path, flags, mode=0o777, *, dir_fd=None) Open a file for low level IO. Returns a file handle (integer). If dir_fd is not None, it should be a file descriptor open to a directory, and path should be relative; path will then be relative to that directory. dir_fd may not be implemented on your platform. If it is unavailable, using it will raise a NotImplementedError.""" ## lets assume this is reading/writing to a local storage in the browser from browser.local_storage import storage class mystorage: def __init__(self, path, flags): self._path=path self._pos=0 self._flags=flags if self._flags & O_RDONLY == O_RDONLY: self._data=storage.get(self._path, None) if self._data is None: raise FileNotFoundError("%s not found" % self._path) elif self._flags & O_WRONLY == O_WRONLY: storage[self._path]='' def seek(self, pos): self._pos=pos def read(self, size=None): if size is None: _result=self._data[self._pos:] self._pos=len(self._data) return _result assert size <= len(self._data) - self._pos _result=self._data[self._pos: self._pos+size] self._pos+=size return _result def write(self, data): storage[self._path]+=str(data) def close(self): pass return mystorage(path, flags) def pipe(*args,**kw): """pipe() -> (read_end, write_end) Create a pipe.""" pass def putenv(*args,**kw): """putenv(key, value) Change or add an environment variable.""" pass def read(*args,**kw): """read(fd, buffersize) -> string Read a file descriptor.""" pass def readlink(*args,**kw): """readlink(path, *, dir_fd=None) -> path Return a string representing the path to which the symbolic link points. If dir_fd is not None, it should be a file descriptor open to a directory, and path should be relative; path will then be relative to that directory. dir_fd may not be implemented on your platform. If it is unavailable, using it will raise a NotImplementedError.""" pass def remove(*args,**kw): """remove(path, *, dir_fd=None) Remove a file (same as unlink()). If dir_fd is not None, it should be a file descriptor open to a directory, and path should be relative; path will then be relative to that directory. dir_fd may not be implemented on your platform. If it is unavailable, using it will raise a NotImplementedError.""" pass def rename(*args,**kw): """rename(src, dst, *, src_dir_fd=None, dst_dir_fd=None) Rename a file or directory. If either src_dir_fd or dst_dir_fd is not None, it should be a file descriptor open to a directory, and the respective path string (src or dst) should be relative; the path will then be relative to that directory. src_dir_fd and dst_dir_fd, may not be implemented on your platform. If they are unavailable, using them will raise a NotImplementedError.""" pass def replace(*args,**kw): """replace(src, dst, *, src_dir_fd=None, dst_dir_fd=None) Rename a file or directory, overwriting the destination. If either src_dir_fd or dst_dir_fd is not None, it should be a file descriptor open to a directory, and the respective path string (src or dst) should be relative; the path will then be relative to that directory. src_dir_fd and dst_dir_fd, may not be implemented on your platform. If they are unavailable, using them will raise a NotImplementedError.""" pass def rmdir(*args,**kw): """rmdir(path, *, dir_fd=None) Remove a directory. If dir_fd is not None, it should be a file descriptor open to a directory, and path should be relative; path will then be relative to that directory. dir_fd may not be implemented on your platform. If it is unavailable, using it will raise a NotImplementedError.""" pass def spawnv(*args,**kw): """spawnv(mode, path, args) Execute the program 'path' in a new process. mode: mode of process creation path: path of executable file args: tuple or list of strings""" pass def spawnve(*args,**kw): """spawnve(mode, path, args, env) Execute the program 'path' in a new process. mode: mode of process creation path: path of executable file args: tuple or list of arguments env: dictionary of strings mapping to strings""" pass def startfile(*args,**kw): """startfile(filepath [, operation]) - Start a file with its associated application. When "operation" is not specified or "open", this acts like double-clicking the file in Explorer, or giving the file name as an argument to the DOS "start" command: the file is opened with whatever application (if any) its extension is associated. When another "operation" is given, it specifies what should be done with the file. A typical operation is "print". startfile returns as soon as the associated application is launched. There is no option to wait for the application to close, and no way to retrieve the application's exit status. The filepath is relative to the current directory. If you want to use an absolute path, make sure the first character is not a slash ("/"); the underlying Win32 ShellExecute function doesn't work if it is.""" pass def stat(*args,**kw): """stat(path, *, dir_fd=None, follow_symlinks=True) -> stat result Perform a stat system call on the given path. path may be specified as either a string or as an open file descriptor. If dir_fd is not None, it should be a file descriptor open to a directory, and path should be relative; path will then be relative to that directory. dir_fd may not be supported on your platform; if it is unavailable, using it will raise a NotImplementedError. If follow_symlinks is False, and the last element of the path is a symbolic link, stat will examine the symbolic link itself instead of the file the link points to. It is an error to use dir_fd or follow_symlinks when specifying path as an open file descriptor.""" return stat_result() def stat_float_times(*args,**kw): """stat_float_times([newval]) -> oldval Determine whether os.[lf]stat represents time stamps as float objects. If newval is True, future calls to stat() return floats, if it is False, future calls return ints. If newval is omitted, return the current setting. """ pass class stat_result: def __init__(self): """st_mode - protection bits, st_ino - inode number, st_dev - device, st_nlink - number of hard links, st_uid - user id of owner, st_gid - group id of owner, st_size - size of file, in bytes, st_atime - time of most recent access expressed in seconds, st_mtime - time of most recent content modification expressed in seconds, st_ctime - platform dependent; time of most recent metadata change on Unix, or the time of creation on Windows, expressed in seconds st_atime_ns - time of most recent access expressed in nanoseconds as an integer, st_mtime_ns - time of most recent content modification expressed in nanoseconds as an integer, st_ctime_ns - platform dependent; time of most recent metadata change on Unix, or the time of creation on Windows, expressed in nanoseconds as an integer """ # Brython : fake values self.st_atime = datetime.datetime.now() self.st_mtime = self.st_ctime = self.st_atime_ns = \ self.st_mtime_ns = self.st_ctime_ns = self.st_atime self.st_uid = self.st_gid = self.st_ino = -1 self.st_mode = 0 self.st_size = 1 class statvfs_result: pass def strerror(*args,**kw): """strerror(code) -> string Translate an error code to a message string.""" pass def symlink(*args,**kw): """symlink(src, dst, target_is_directory=False, *, dir_fd=None) Create a symbolic link pointing to src named dst. target_is_directory is required on Windows if the target is to be interpreted as a directory. (On Windows, symlink requires Windows 6.0 or greater, and raises a NotImplementedError otherwise.) target_is_directory is ignored on non-Windows platforms. If dir_fd is not None, it should be a file descriptor open to a directory, and path should be relative; path will then be relative to that directory. dir_fd may not be implemented on your platform. If it is unavailable, using it will raise a NotImplementedError.""" pass def system(*args,**kw): """system(command) -> exit_status Execute the command (a string) in a subshell.""" pass class terminal_size: pass def times(*args,**kw): """times() -> times_result Return an object containing floating point numbers indicating process times. The object behaves like a named tuple with these fields: (utime, stime, cutime, cstime, elapsed_time)""" pass class times_result: pass def umask(*args,**kw): """umask(new_mask) -> old_mask Set the current numeric umask and return the previous umask.""" pass class uname_result: pass def unlink(path, *args, dir_fd=None): """unlink(path, *, dir_fd=None) Remove a file (same as remove()). If dir_fd is not None, it should be a file descriptor open to a directory, and path should be relative; path will then be relative to that directory. dir_fd may not be implemented on your platform. If it is unavailable, using it will raise a NotImplementedError.""" pass def urandom(n): """urandom(n) -> str Return n random bytes suitable for cryptographic use.""" randbytes= [_randint(0,255) for i in range(n)] return bytes(randbytes) def utime(*args,**kw): """utime(path, times=None, *, ns=None, dir_fd=None, follow_symlinks=True) Set the access and modified time of path. path may always be specified as a string. On some platforms, path may also be specified as an open file descriptor. If this functionality is unavailable, using it raises an exception. If times is not None, it must be a tuple (atime, mtime); atime and mtime should be expressed as float seconds since the epoch. If ns is not None, it must be a tuple (atime_ns, mtime_ns); atime_ns and mtime_ns should be expressed as integer nanoseconds since the epoch. If both times and ns are None, utime uses the current time. Specifying tuples for both times and ns is an error. If dir_fd is not None, it should be a file descriptor open to a directory, and path should be relative; path will then be relative to that directory. If follow_symlinks is False, and the last element of the path is a symbolic link, utime will modify the symbolic link itself instead of the file the link points to. It is an error to use dir_fd or follow_symlinks when specifying path as an open file descriptor. dir_fd and follow_symlinks may not be available on your platform. If they are unavailable, using them will raise a NotImplementedError.""" pass def waitpid(*args,**kw): """waitpid(pid, options) -> (pid, status << 8) Wait for completion of a given process. options is ignored on Windows.""" pass def write(*args,**kw): """write(fd, string) -> byteswritten Write a string to a file descriptor.""" pass ## put WIFSIGNALED here. its needed by os module, and os module imports all ## functions in this module def WIFSIGNALED(a): return False def WTERMSIG(status): return 0 def WIFSIGNALED(status): "Return True if the process exited due to a signal, otherwise return False" return False def WIFEXITED(status): return False def WEXITSTATUS(status): pass def WNOHANG(): return (0,0)