code: def makekey(self, *args):
          
          if len(args) > 1:
              args = args[:1] + (args[1].encode('utf-8'),) + args[2:]
          if len(args) == 3 and type(args[-1]) == str:
              # node.tag.string type keys
              return struct.pack(self.keyfmt[:1 + len(args)], b'.', *args[:-1]) + args[-1].encode('utf-8')
          elif len(args) == 3 and type(args[-1]) == type(-1) and args[-1] < 0:
              # negative values -> need lowercase fmt char
              return struct.pack(self.keyfmt[:1 + len(args)] + self.fmt.lower(), b'.', *args)
          else:
              # node.tag.value type keys
              return struct.pack(self.keyfmt[:2 + len(args)], b'.', *args)
docs: return a binary key for the nodeid, tag and optional value