code: def _create_dir_path(self, file_hash, path=None, hash_list=None):
          
          # first, non-recursive call - parse `file_hash`
          if hash_list is None:
              hash_list = list(file_hash)
  
          if not hash_list:
              raise IOError("Directory structure is too full!")
  
          # first, non-recursive call - look for subpath of `self.path`
          if not path:
              path = os.path.join(
                  self.path,
                  hash_list.pop(0)
              )
  
          # if the path not yet exists, create it and work on it
          if not os.path.exists(path):
              os.mkdir(path)
              return self._create_dir_path(
                  file_hash=file_hash,
                  path=path,
                  hash_list=hash_list
              )
  
          files = os.listdir(path)
  
          # file is already in storage
          if file_hash in files:
              return path
  
          # if the directory is not yet full, use it
          if len(files) < self.dir_limit:
              return path
  
          # in full directories create new sub-directories
          return self._create_dir_path(
              file_hash=file_hash,
              path=os.path.join(path, hash_list.pop(0)),
              hash_list=hash_list
          )
docs: Create proper filesystem paths for given `file_hash`.
  
          Args:
              file_hash (str): Hash of the file for which the path should be
                        created.
              path (str, default None): Recursion argument, don't set this.
              hash_list (list, default None): Recursion argument, don't set this.
  
          Returns:
              str: Created path.