class Shell(BaseShell):
    def __init__(self,
                 server,
                 path,
                 user,
                 pswd,
                 logging,
                 noHostRedirect=False,
                 afunix=None):

        super(Shell, self).__init__("caldav_client")
        self.prefix = self.wd = "/"
        self.server = server
        self.user = user
        self.pswd = pswd

        self.registerCommands()

        # Create the account
        ssl = server.startswith("https://")
        server = server[8:] if ssl else server[7:]
        self.account = CalDAVAccount(server,
                                     ssl=ssl,
                                     afunix=afunix,
                                     user=self.user,
                                     pswd=self.pswd,
                                     root=path,
                                     principal=None,
                                     logging=logging,
                                     noHostRedirect=noHostRedirect)

        atexit.register(self.saveHistory)

    def registerCommands(self):
        module = caldavclientlibrary.browser.commands
        for item in module.__all__:
            mod = __import__("caldavclientlibrary.browser.commands." + item,
                             globals(), locals(), [
                                 "Cmd",
                             ])
            cmd_class = mod.Cmd
            if type(cmd_class) is type and issubclass(cmd_class, Command):
                self.registerCommand(cmd_class())

    def setWD(self, newwd):

        # Check that the new one exists
        resource = (newwd if newwd.endswith("/") else newwd + "/")
        if not self.account.session.testResource(URL(url=resource)):
            return False
        self.prefix = self.wd = newwd
        return True

    def setUserPswd(self, user, pswd):

        self.user = user
        self.pswd = pswd
        self.account.setUserPswd(user, pswd)