def keyfilter_cmd(args):
    if len(args) > 3:
        keygroup = args[0]
        if es.exists('keygroup', keygroup):
            key = args[1]
            if es.exists('key', keygroup, key):
                action = args[2]
                if action in ['not', 'only']:
                    kv = keyvalues.getKeyGroup(keygroup)
                    keyfiltervar = args[3]
                    keyfilterlist = []
                    if len(args) > 4:
                        keyfiltervalue = args[4]
                    else:
                        keyfiltervalue = None
                    if action == 'not':
                        for keyvar in list(kv[key].keys()):
                            if keyfiltervar in keyvar and (str(kv[key][keyvar]) == keyfiltervalue or not keyfiltervalue):
                                keyfilterlist.append(keyvar)
                    elif action == 'only':
                        for keyvar in list(kv[key].keys()):
                            if not keyfiltervar in keyvar or (str(kv[key][keyvar]) != keyfiltervalue and keyfiltervalue):
                                keyfilterlist.append(keyvar)
                    for keyvar in keyfilterlist:
                        if keyvar in kv[key]:
                            del kv[key][keyvar]
                else:
                    es.dbgmsg(0, 'keyfilter: Invalid action provided. Syntax: keyfilter <keygroup> <key> <not/only> <part-of-value-name> [value]')
            else:
                es.dbgmsg(0, 'keyfilter: Invalid key for keygroup "%s" provided: %s' % (keygroup, key))
        else:
            es.dbgmsg(0, 'keyfilter: Invalid keygroup provided: %s' % keygroup)
    else:
        es.dbgmsg(0, 'keyfilter: Not enough arguments to keyfilter. Syntax: <keygroup> <key> <not/only> <part-of-value-name> [value]')
Beispiel #2
0
def foreachkey(argv):
  var, isin, keygroup, commands = argv[:4]
  if isin != 'in':
    raise SyntaxError
  if not es.exists('keygroup', keygroup):
    raise NameError('keygroup', keygroup)
  stack.setfor(var, list(getKeyGroup(keygroup).keys()))
  stack.insertrawblock(commands)
Beispiel #3
0
def foreachval(argv):
  var, isin, keygroup, key, commands = argv[:5]
  if isin != 'in':
    raise SyntaxError
  if not es.exists('keygroup', keygroup):
    raise NameError('keygroup', keygroup)
  if not es.exists('key', keygroup, key):
    raise NameError('key', '%s/%s' % (keygroup, key))
  stack.setfor(var, list(getKeyGroup(keygroup)[key].keys()))
  stack.insertrawblock(commands)
Beispiel #4
0
 def testKeygroup(self):
     es.keygroupcreate("justice")
     x = es.keygroupgetpointer("justice")
     self.keytest2(x)
     es.keygroupdelete("justice2")
     es.keygroupcreate("justice2")
     x = es.keygroupgetpointer("justice2")
     self.keytest3(x)
     import keyvalues
     y = keyvalues.getKeyGroup("justice2")
     es.keygroupdelete("justice2")
 def testKeygroup(self):
     es.keygroupcreate("justice")
     x = es.keygroupgetpointer("justice")
     self.keytest2(x)
     es.keygroupdelete("justice2")
     es.keygroupcreate("justice2")
     x = es.keygroupgetpointer("justice2")
     self.keytest3(x)
     import keyvalues
     y = keyvalues.getKeyGroup("justice2")
     es.keygroupdelete("justice2")
def keygroupsort_cmd(args):
    if len(args) > 1:
        keygroup = args[0]
        if es.exists('keygroup', keygroup):
            dc = {}
            kv = keyvalues.getKeyGroup(keygroup)
            sortfield = args[1]
            if es.exists('keyvalue', keygroup, list(kv.keys())[0], sortfield) or keygroup == sortfield:
                if len(args) > 3:
                    sortorder = 'asc' if args[2].lower() == 'asc' else 'des'
                    sorttype = '#alpha' if args[3].lower() == '#alpha' else '#numeric'
                else:
                    sortorder = 'des'
                    sorttype = '#numeric'
                for key in list(kv.keys()):
                    dc[key] = {}
                    for keyvalue in list(kv[key].keys()):
                        dc[key][keyvalue] = kv[key][keyvalue]
                if keygroup == sortfield:
                    if sortorder == 'asc' and sorttype == '#alpha':
                        keylist = sorted(dc.keys())
                    elif sortorder == 'des' and sorttype == '#alpha':
                        keylist = sorted(list(dc.keys()), reverse=True)
                    elif sortorder == 'asc' and sorttype == '#numeric':
                        keylist = sorted(list(dc.keys()), key=lambda x: int(x) if str(x).isdigit() else x)
                    else:
                        keylist = sorted(list(dc.keys()), key=lambda x: int(x) if str(x).isdigit() else x, reverse=True)
                else:
                    if sortorder == 'asc' and sorttype == '#alpha':
                        keylist = [x[0] for x in sorted(list(dc.items()), key=lambda x: x[1][sortfield])]
                    elif sortorder == 'des' and sorttype == '#alpha':
                        keylist = [x[0] for x in sorted(list(dc.items()), key=lambda x: x[1][sortfield], reverse=True)]
                    elif sortorder == 'asc' and sorttype == '#numeric':
                        keylist = [x[0] for x in sorted(list(dc.items()), key=lambda x: int(x[1][sortfield]) if str(x[1][sortfield]).isdigit() else x[1][sortfield])]
                    else:
                        keylist = [x[0] for x in sorted(list(dc.items()), key=lambda x: int(x[1][sortfield]) if str(x[1][sortfield]).isdigit() else x[1][sortfield], reverse=True)]
                # Let's re-create our keygroup with classic ES commands 
                es.keygroupdelete(keygroup)
                es.keygroupcreate(keygroup)
                for key in keylist:
                    es.keycreate(keygroup, key)
                    for keyvalue in list(dc[key].keys()):
                        es.keysetvalue(keygroup, key, keyvalue, dc[key][keyvalue])
            else:
                es.dbgmsg(0, 'keygroupsort: Invalid field to sort provided: %s' % sortfield)
        else:
            es.dbgmsg(0, 'keygroupsort: Invalid keygroup provided: %s' % keygroup)
    else:
        es.dbgmsg(0, 'keygroupsort: Not enough arguments to keygroupsort. Syntax: keygroupsort <keygroup> <field to sort> [<des/asc #numeric/#alpha>]')
Beispiel #7
0
def keygroupsort_cmd(args):
    if len(args) > 1:
        keygroup = args[0]
        if es.exists('keygroup', keygroup):
            dc = {}
            kv = keyvalues.getKeyGroup(keygroup)
            sortfield = args[1]
            if es.exists('keyvalue', keygroup, kv.keys()[0], sortfield) or keygroup == sortfield:
                if len(args) > 3:
                    sortorder = 'asc' if args[2].lower() == 'asc' else 'des'
                    sorttype = '#alpha' if args[3].lower() == '#alpha' else '#numeric'
                else:
                    sortorder = 'des'
                    sorttype = '#numeric'
                for key in kv.keys():
                    dc[key] = {}
                    for keyvalue in kv[key].keys():
                        dc[key][keyvalue] = kv[key][keyvalue]
                if keygroup == sortfield:
                    if sortorder == 'asc' and sorttype == '#alpha':
                        keylist = sorted(dc.keys())
                    elif sortorder == 'des' and sorttype == '#alpha':
                        keylist = sorted(dc.keys(), reverse=True)
                    elif sortorder == 'asc' and sorttype == '#numeric':
                        keylist = sorted(dc.keys(), key=lambda x: int(x) if str(x).isdigit() else x)
                    else:
                        keylist = sorted(dc.keys(), key=lambda x: int(x) if str(x).isdigit() else x, reverse=True)
                else:
                    if sortorder == 'asc' and sorttype == '#alpha':
                        keylist = map(lambda x: x[0], sorted(dc.items(), key=lambda x: x[1][sortfield]))
                    elif sortorder == 'des' and sorttype == '#alpha':
                        keylist = map(lambda x: x[0], sorted(dc.items(), key=lambda x: x[1][sortfield], reverse=True))
                    elif sortorder == 'asc' and sorttype == '#numeric':
                        keylist = map(lambda x: x[0], sorted(dc.items(), key=lambda x: int(x[1][sortfield]) if str(x[1][sortfield]).isdigit() else x[1][sortfield]))
                    else:
                        keylist = map(lambda x: x[0], sorted(dc.items(), key=lambda x: int(x[1][sortfield]) if str(x[1][sortfield]).isdigit() else x[1][sortfield], reverse=True))
                # Let's re-create our keygroup with classic ES commands 
                es.keygroupdelete(keygroup)
                es.keygroupcreate(keygroup)
                for key in keylist:
                    es.keycreate(keygroup, key)
                    for keyvalue in dc[key].keys():
                        es.keysetvalue(keygroup, key, keyvalue, dc[key][keyvalue])
            else:
                es.dbgmsg(0, 'keygroupsort: Invalid field to sort provided: %s' % sortfield)
        else:
            es.dbgmsg(0, 'keygroupsort: Invalid keygroup provided: %s' % keygroup)
    else:
        es.dbgmsg(0, 'keygroupsort: Not enough arguments to keygroupsort. Syntax: keygroupsort <keygroup> <field to sort> [<des/asc #numeric/#alpha>]')
def keyrand_cmd(args):
    if len(args) > 1:
        keygroup = args[1]
        if es.exists('keygroup', keygroup):
            kv = keyvalues.getKeyGroup(keygroup)
            if not len(args) > 2:
                es.ServerVar(args[0]).set(str(random.choice(list(kv.keys()))))
            elif es.exists('key', keygroup, args[2]):
                es.ServerVar(args[0]).set(str(random.choice(list(kv[args[2]].keys()))))
            else:
                es.dbgmsg(0, 'keyrand: Invalid key for keygroup "%s" provided: %s' % (keygroup, args[2]))
        else:
            es.dbgmsg(0, 'keyrand: Invalid keygroup provided: %s' % keygroup)
    else:
        es.dbgmsg(0, 'keyrand: Not enough arguments to keyrand. Syntax: keyrand <variable> <keygroup> [key]')
Beispiel #9
0
def keyfilter_cmd(args):
    if len(args) > 3:
        keygroup = args[0]
        if es.exists('keygroup', keygroup):
            key = args[1]
            if es.exists('key', keygroup, key):
                action = args[2]
                if action in ['not', 'only']:
                    kv = keyvalues.getKeyGroup(keygroup)
                    keyfiltervar = args[3]
                    keyfilterlist = []
                    if len(args) > 4:
                        keyfiltervalue = args[4]
                    else:
                        keyfiltervalue = None
                    if action == 'not':
                        for keyvar in kv[key].keys():
                            if keyfiltervar in keyvar and (str(kv[key][keyvar]) == keyfiltervalue or not keyfiltervalue):
                                keyfilterlist.append(keyvar)
                    elif action == 'only':
                        for keyvar in kv[key].keys():
                            if not keyfiltervar in keyvar or (str(kv[key][keyvar]) != keyfiltervalue and keyfiltervalue):
                                keyfilterlist.append(keyvar)
                    for keyvar in keyfilterlist:
                        if keyvar in kv[key]:
                            kv[key][keyvar] = keyvalues.KeyValues(name=' ')
                    if keyfilterlist:
                        # Let's remove our deleted keys by reloading the keygroup with classic ES commands 
                        es.keygroupsave(keygroup, '|corelib/keyfilter')
                        es.keygroupdelete(keygroup)
                        es.keygroupcreate(keygroup)
                        es.keygroupload(keygroup, '|corelib/keyfilter')
                        os.unlink(es.getAddonPath('corelib/keyfilter')+'/es_%s_db.txt'%keygroup)
                else:
                    es.dbgmsg(0, 'keyfilter: Invalid action provided. Syntax: keyfilter <keygroup> <key> <not/only> <part-of-value-name> [value]')
            else:
                es.dbgmsg(0, 'keyfilter: Invalid key for keygroup "%s" provided: %s' % (keygroup, key))
        else:
            es.dbgmsg(0, 'keyfilter: Invalid keygroup provided: %s' % keygroup)
    else:
        es.dbgmsg(0, 'keyfilter: Not enough arguments to keyfilter. Syntax: <keygroup> <key> <not/only> <part-of-value-name> [value]')
def keygrouprand_cmd(args):
    if len(args) > 0:
        keygroup = args[0]
        if es.exists('keygroup', keygroup):
            if len(args) > 1:
                target = args[1]
            else:
                target = '#all'
            if target in ['#key', '#keyvalue', '#all']:
                dc = {}
                kv = keyvalues.getKeyGroup(keygroup)
                if len(args) > 2 and args[2].isdigit():
                    keylimit = int(args[2])
                else:
                    keylimit = len(list(kv.keys()))
                for key in list(kv.keys()):
                    dc[key] = {}
                    for keyvalue in list(kv[key].keys()):
                        dc[key][keyvalue] = kv[key][keyvalue]
                if target == '#all' or target == '#key':
                    keylist = random.sample(list(dc.keys()), keylimit)
                else:
                    keylist = list(dc.keys())[:keylimit]
                # Let's re-create our keygroup with classic ES commands 
                es.keygroupdelete(keygroup)
                es.keygroupcreate(keygroup)
                for key in keylist:
                    es.keycreate(keygroup, key)
                    if target == '#all' or target == '#keyvalue':
                        for keyvalue in random.sample(list(dc[key].keys()), len(dc[key])):
                            es.keysetvalue(keygroup, key, keyvalue, dc[key][keyvalue])
                    else:
                        for keyvalue in list(dc[key].keys()):
                            es.keysetvalue(keygroup, key, keyvalue, dc[key][keyvalue])
            else:
                es.dbgmsg(0, 'keygrouprand: Invalid target provided: %s' % target)
        else:
            es.dbgmsg(0, 'keygrouprand: Invalid keygroup provided: %s' % keygroup)
    else:
        es.dbgmsg(0, 'keygrouprand: Not enough arguments to keygrouprand. Syntax: keygrouprand <keygroup> [#key/#keyvalue/#all] [keylimit]')
Beispiel #11
0
 def __init__(self, gKeymenuid, returnvar, block, keygroup, menudisplay, menureturn, titletext, update = None, backpopup = None):
     #initialization of keymenu
     self.name = gKeymenuid          #keymenu name for backwards compatibility
     self.keygroup = keygroup        #keygroup that is used to create the menu
     self.block = block              #block/function that executes on menuselect
     self.returnvar = returnvar      #variable that contains the menu-return
     self.titletext = titletext      #title of the keymenu
     self.menudisplay = menudisplay  #indicator for the display key or keyvalue
     self.menureturn = menureturn    #indicator for the return key or keyvalue
     self.popup = None               #contains the popup object
     self.backpopup = backpopup      #contains the back popup object
     self.keyvalues = None           #contains the keyvalues object
     self.pagecount = 0              #number of pages
     self.linecount = 0              #number of options in the menu
     #create the popup object
     if es.exists("keygroup", self.keygroup) or isinstance(self.keygroup, keyvalues.KeyValues):
         if "#" in self.menudisplay and "#" in self.menureturn:
             self.menudisplay = self.menudisplay.split(" ")
             self.menureturn = self.menureturn.split(" ")
             if not len(self.menudisplay) > 1:
                 self.menudisplay.append('')
             if not len(self.menureturn) > 1:
                 self.menureturn.append('')
             if len(self.titletext) > 0:
                 self.popup = popuplib.easymenu("keymenu_"+str(self.name), self.returnvar, _keymenu_select)
                 self.popup.settitle(self.titletext)
                 self.popup.vguititle = self.titletext.replace('\\n', ' - ')
                 if not isinstance(self.keygroup, keyvalues.KeyValues):
                     self.keyvalues = keyvalues.getKeyGroup(self.keygroup)
                 else:
                     self.keyvalues = self.keygroup
                     self.keygroup = self.keyvalues.getName()
                 if self.menudisplay[0] == "#key" and self.menureturn[0] == "#key":
                     for key in self.keyvalues.keys():
                         self.popup.addoption(key, key)
                         self.linecount += 1
                 elif self.menudisplay[0] == "#key" and self.menureturn[0] == "#keyvalue":
                     for key in self.keyvalues.keys():
                         self.popup.addoption(self.keyvalues[key][self.menureturn[1]], key)
                         self.linecount += 1
                 elif self.menudisplay[0] == "#keyvalue" and self.menureturn[0] == "#key":
                     for key in self.keyvalues.keys():
                         self.popup.addoption(key, self.keyvalues[key][self.menudisplay[1]])
                         self.linecount += 1
                 elif self.menudisplay[0] == "#keyvalue" and self.menureturn[0] == "#keyvalue":
                     for key in self.keyvalues.keys():
                         self.popup.addoption(self.keyvalues[key][self.menureturn[1]], self.keyvalues[key][self.menudisplay[1]])
                         self.linecount += 1
                 if self.linecount:
                     self.popup.checklang('en')
                 else:
                     self.popup.delete()
                     self.popup = None
                     self.keyvalues = None
                     raise ValueError("Keymenulib: No keys or keyvalues found in %s"%keygroup)
             else:
                 raise ArgumentError("Keymenulib: No titletext")
         else:
             raise ArgumentError("Keymenulib: No #key or #keyvalue found in the commandstring")
     else:
         raise ValueError("Keymenulib: The keygroup %s does not exists"%keygroup)
Beispiel #12
0
def sendVguiDialogKeygroup(userid, msgtype, keyname):
  key = keyvalues.getKeyGroup(keyname)
  if not id:
    raise KeyError, keyname
  es.sendkeypmsg(int(userid), int(msgtype), key['message']._id_)
Beispiel #13
0
def sendVguiDialogKeygroup(userid, msgtype, keyname):
    key = keyvalues.getKeyGroup(keyname)
    if not id:
        raise KeyError, keyname
    es.sendkeypmsg(int(userid), int(msgtype), key['message']._id_)
Beispiel #14
0
def keygroupsort_cmd(args):
    if len(args) > 1:
        keygroup = args[0]
        if es.exists("keygroup", keygroup):
            dc = {}
            kv = keyvalues.getKeyGroup(keygroup)
            sortfield = args[1]
            if es.exists("keyvalue", keygroup, kv.keys()[0], sortfield) or keygroup == sortfield:
                if len(args) > 3:
                    sortorder = "asc" if args[2].lower() == "asc" else "des"
                    sorttype = "#alpha" if args[3].lower() == "#alpha" else "#numeric"
                else:
                    sortorder = "des"
                    sorttype = "#numeric"
                for key in kv.keys():
                    dc[key] = {}
                    for keyvalue in kv[key].keys():
                        dc[key][keyvalue] = kv[key][keyvalue]
                if keygroup == sortfield:
                    if sortorder == "asc" and sorttype == "#alpha":
                        keylist = sorted(dc.keys())
                    elif sortorder == "des" and sorttype == "#alpha":
                        keylist = sorted(dc.keys(), reverse=True)
                    elif sortorder == "asc" and sorttype == "#numeric":
                        keylist = sorted(dc.keys(), key=lambda x: int(x) if str(x).isdigit() else x)
                    else:
                        keylist = sorted(dc.keys(), key=lambda x: int(x) if str(x).isdigit() else x, reverse=True)
                else:
                    if sortorder == "asc" and sorttype == "#alpha":
                        keylist = map(lambda x: x[0], sorted(dc.items(), key=lambda x: x[1][sortfield]))
                    elif sortorder == "des" and sorttype == "#alpha":
                        keylist = map(lambda x: x[0], sorted(dc.items(), key=lambda x: x[1][sortfield], reverse=True))
                    elif sortorder == "asc" and sorttype == "#numeric":
                        keylist = map(
                            lambda x: x[0],
                            sorted(
                                dc.items(),
                                key=lambda x: int(x[1][sortfield])
                                if str(x[1][sortfield]).isdigit()
                                else x[1][sortfield],
                            ),
                        )
                    else:
                        keylist = map(
                            lambda x: x[0],
                            sorted(
                                dc.items(),
                                key=lambda x: int(x[1][sortfield])
                                if str(x[1][sortfield]).isdigit()
                                else x[1][sortfield],
                                reverse=True,
                            ),
                        )
                # Let's re-create our keygroup with classic ES commands
                es.keygroupdelete(keygroup)
                es.keygroupcreate(keygroup)
                for key in keylist:
                    es.keycreate(keygroup, key)
                    for keyvalue in dc[key].keys():
                        es.keysetvalue(keygroup, key, keyvalue, dc[key][keyvalue])
            else:
                es.dbgmsg(0, "keygroupsort: Invalid field to sort provided: %s" % sortfield)
        else:
            es.dbgmsg(0, "keygroupsort: Invalid keygroup provided: %s" % keygroup)
    else:
        es.dbgmsg(
            0,
            "keygroupsort: Not enough arguments to keygroupsort. Syntax: keygroupsort <keygroup> <field to sort> [<des/asc #numeric/#alpha>]",
        )