#!/usr/bin/env python3 # -*- coding: utf-8 -*- # # List System # Copyright (C) 2011 Øyvind Jensen # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . import cmd import shelve import os class CLI(cmd.Cmd): header = 'Virtual Inventory Logger' prompt = '> ' storage = None snd = None filename = 'registry' unablemsg = 'Unable to complete operation' def complete_most(self, text, line): col = [] for key in self.storage.keys(): col.append(key) for item in self.storage[key]: col.append(item) if text: return [ key for key in col if key.startswith(text) ] else: return col def log(self, line): os.system('journal ' + line) def do_place(self, op): 'USAGE: place ' thinglocation = op.split() thinglocation = self.strip(thinglocation) if len(thinglocation) == 2: location = thinglocation[1] name = thinglocation[0] try: self.storage[location] except KeyError: self.storage[location] = [] self.storage[location].append(name) response = name + ' placed in ' + location self.log(response) else: print(self.unablemsg) def complete_place(self, text, line, start_index, end_index): return self.complete_most(text, line) def do_search(self, phrase): 'USAGE: search ' found = False if len(phrase) > 0: for location in self.storage: for item in self.storage[location]: if phrase in item or item in phrase: print(item + ' is located in ' + location) found = True if not found: print(phrase + ' is nowhere to be found') print('Please get one and put it somewhere') else: print(self.unablemsg) def do_remove(self, op): 'USAGE: remove ' thinglocation = op.split() thinglocation = self.strip(thinglocation) if len(thinglocation) == 2: location = thinglocation[1] name = thinglocation[0] try: self.storage[location].remove(name) if len(self.storage[location]) == 0: self.storage.pop(location) response = name + ' removed from ' + location self.log(response) except: print(name + ' not found in ' + location) else: print(self.unablemsg) def complete_remove(self, text, line, start_index, end_index): return self.complete_most(text, line) def do_move(self, op): 'USAGE: move ' moveop = op.split() moveop = self.strip(moveop) if len(moveop) == 3: name = moveop[0] fromloc = moveop[1] toloc = moveop[2] self.do_remove(name + ' ' + fromloc) self.do_place(name + ' ' + toloc) #print(name + ' moved from ' + fromloc + ' to ' + toloc) else: print(self.unablemsg) def complete_move(self, text, line, start_index, end_index): return self.complete_most(text, line) def do_list(self, location): 'USAGE: list ' if len(location) > 0: self.list_location(location) else: for onelocation in self.storage: self.list_location(onelocation) def complete_list(self, text, line, start_index, end_index): return self.complete_most(text, line) def do_journal(self, line): 'USAGE: journal ' os.system('journal ' + line) def strip(self, tostrip): words = ['in', 'from', 'inside', 'into'] for word in words: if word in tostrip: tostrip.remove(word) return tostrip def list_location(self, location): print(location) try: if self.storage[location] is not None: for item in self.storage[location]: print('\t' + item) except KeyError: print('There is no place like ' + location) def do_copyright(self, line): print("Copyright (C) 2011- Øyvind Jensen") def do_credits(self, line): print("Author:") print("Øyvind Jensen") print("oyvind.jensen@protonmail.com") def do_exit(self, line): print('Be well..') return True def __init__(self): cmd.Cmd.__init__(self) self.storage = shelve.open(self.filename, writeback = True) def do_EOF(self, line): print() return self.do_exit('') def complete(self, text, state): """Add a whitespace after word completion""" return cmd.Cmd.complete(self, text, state) + ' ' if __name__ == "__main__": CLI().cmdloop()