Advertisement
lllumineux

Code from Codecollab 12-8-2020

Dec 8th, 2020 (edited)
688
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.61 KB | None | 0 0
  1. import argparse
  2. import datetime
  3. import os
  4. import pathlib
  5. import stat
  6.  
  7.  
  8. class Singleton:
  9.     def __init__(self):
  10.         self.commands_dir = {}
  11.         self.path = pathlib.Path().absolute()
  12.  
  13.     def __call__(self, func):
  14.         self.commands_dir[func.__name__] = func
  15.  
  16.     @classmethod
  17.     def get_instance(cls):
  18.         if not hasattr(cls, 'instance'):
  19.             cls.instance = cls()
  20.         return cls.instance
  21.  
  22.  
  23. @Singleton.get_instance()
  24. def ls(command_args: tuple):
  25.     parser = argparse.ArgumentParser()
  26.  
  27.     parser.add_argument(
  28.         "-l",
  29.         dest="show_info",
  30.         action="store_true",
  31.         default=False
  32.     )
  33.  
  34.     args = parser.parse_args(command_args)
  35.  
  36.     file_names = os.listdir()
  37.     display_info = " ".join(file_names)
  38.  
  39.     # -l flag
  40.     if args.show_info:
  41.         files_info = []
  42.  
  43.         for file_name in file_names:
  44.             file_stat = os.stat(file_name)
  45.  
  46.             file_mode = stat.filemode(file_stat.st_mode)
  47.             file_hard_links_number = str(file_stat.st_nlink)
  48.             file_size = str(file_stat.st_size)
  49.             file_mod_date = str(
  50.                 datetime.datetime.fromtimestamp(file_stat.st_mtime)
  51.             )
  52.  
  53.             files_info.append(
  54.                 " ".join(
  55.                     [
  56.                         file_mode,
  57.                         file_hard_links_number,
  58.                         file_size,
  59.                         file_mod_date,
  60.                         file_name
  61.                     ]
  62.                 )
  63.             )
  64.  
  65.         display_info = "\n".join(files_info)
  66.  
  67.     return display_info
  68.  
  69.  
  70. @Singleton.get_instance()
  71. def cat():
  72.     pass
  73.  
  74.  
  75. @Singleton.get_instance()
  76. def cd(command_args: tuple):
  77.     parser = argparse.ArgumentParser()
  78.  
  79.     parser.add_argument(
  80.         "string",
  81.         metavar="dir_name",
  82.         type=str,
  83.         nargs="+"
  84.     )
  85.  
  86.     args = parser.parse_args(command_args)
  87.  
  88.     if args.dir_name in ["..", "../"]:
  89.         os.chdir(args.dir_name)
  90.  
  91.  
  92. @Singleton.get_instance()
  93. def rm():
  94.     pass
  95.  
  96.  
  97. @Singleton.get_instance()
  98. def pwd():
  99.     pass
  100.  
  101.  
  102. @Singleton.get_instance()
  103. def touch():
  104.     pass
  105.  
  106.  
  107. def main():
  108.     while True:
  109.         singleton = Singleton.get_instance()
  110.  
  111.         user_input = input(f"{singleton.path}: ").split()
  112.  
  113.         if user_input[0] == "exit":
  114.             break
  115.  
  116.         command = user_input[0]
  117.         command_args = tuple(user_input[1::])
  118.  
  119.         try:
  120.             print(singleton.commands_dir[command](command_args))
  121.         except KeyError as e:
  122.             print(f"No such command as {e}!")
  123.  
  124.  
  125. if __name__ == '__main__':
  126.     main()
  127.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement