'''
Create a stock database with a built in nesting key index
'''

# Import maras libs
import maras.database
import maras.tree_index


# We can likely build these out as mixins, making it easy to apply high level
# constructs to multiple unerlying database implimentations
class NestDB(maras.database.Database):
    '''
    Create a high level database which translates entry keys into a
    higherarcical dict like structure
    '''
    def __init__(self, path):
        maras.database.Database.__init__(self, path)
        self.__init_db()

    def __init_db(self):
        '''
        Init the db, open it if it already exists, otherwise create it
        '''
        try:
            self.open()
        except maras.database.DatabasePathException:
            self.create()

    def new_index(self, name):
        '''
        Add a new named index
        '''
        new = NestIndex(self.path, name)
        self.add_index(new)


class NestIndex(maras.tree_index.TreeBasedIndex):
    '''
    The index to manage higherarcical keys
    '''
    def __init__(self, *args, **kwargs):
        kwargs['node_capacity'] = kwargs.get('node_capacity', 1000)
        maras.tree_index.TreeBasedIndex.__init__(self, *args, **kwargs)

    def make_key_value(self, data):
        return data.get('_key', 'None')

    def make_key(self, key):
        return key

'''
Create a stock database with a built in nesting key index
'''

# Import maras libs
import maras.database
import maras.tree_index


# We can likely build these out as mixins, making it easy to apply high level
# constructs to multiple unerlying database implimentations
class NestDB(maras.database.Database):
    '''
    Create a high level database which translates entry keys into a
    higherarcical dict like structure
    '''
    def __init__(self, path):
        maras.database.Database.__init__(self, path)
        self.__init_db()

    def __init_db(self):
        '''
        Init the db, open it if it already exists, otherwise create it
        '''
        try:
            self.open()
        except maras.database.DatabasePathException:
            self.create()

    def new_index(self, name):
        '''
        Add a new named index
        '''
        new = NestIndex(self.path, name)
        self.add_index(new)


class NestIndex(maras.tree_index.TreeBasedIndex):
    '''
    The index to manage higherarcical keys
    '''
    def __init__(self, *args, **kwargs):
        kwargs['node_capacity'] = kwargs.get('node_capacity', 1000)
        maras.tree_index.TreeBasedIndex.__init__(self, *args, **kwargs)

    def make_key_value(self, data):
        if '_key' in data:
            return data.pop('_key')
        return 'None'

    def make_key(self, key):
        return key

Clean out the _key from the data, no need to double entry
Clean out the _key from the data, no need to double entry

  '''
  Create a stock database with a built in nesting key index
  '''
  
  # Import maras libs
  import maras.database
  import maras.tree_index
  
  
  # We can likely build these out as mixins, making it easy to apply high level
  # constructs to multiple unerlying database implimentations
  class NestDB(maras.database.Database):
      '''
      Create a high level database which translates entry keys into a
      higherarcical dict like structure
      '''
      def __init__(self, path):
          maras.database.Database.__init__(self, path)
          self.__init_db()
  
      def __init_db(self):
          '''
          Init the db, open it if it already exists, otherwise create it
          '''
          try:
              self.open()
          except maras.database.DatabasePathException:
              self.create()
  
      def new_index(self, name):
          '''
          Add a new named index
          '''
          new = NestIndex(self.path, name)
          self.add_index(new)
  
  
  class NestIndex(maras.tree_index.TreeBasedIndex):
      '''
      The index to manage higherarcical keys
      '''
      def __init__(self, *args, **kwargs):
          kwargs['node_capacity'] = kwargs.get('node_capacity', 1000)
          maras.tree_index.TreeBasedIndex.__init__(self, *args, **kwargs)
  
      def make_key_value(self, data):
+         if '_key' in data:
-         return data.get('_key', 'None')
+             return data.pop('_key')
+         return 'None'
  
      def make_key(self, key):
          return key
  
Clean out the _key from the data, no need to double entry
## Code Before:
'''
Create a stock database with a built in nesting key index
'''

# Import maras libs
import maras.database
import maras.tree_index


# We can likely build these out as mixins, making it easy to apply high level
# constructs to multiple unerlying database implimentations
class NestDB(maras.database.Database):
    '''
    Create a high level database which translates entry keys into a
    higherarcical dict like structure
    '''
    def __init__(self, path):
        maras.database.Database.__init__(self, path)
        self.__init_db()

    def __init_db(self):
        '''
        Init the db, open it if it already exists, otherwise create it
        '''
        try:
            self.open()
        except maras.database.DatabasePathException:
            self.create()

    def new_index(self, name):
        '''
        Add a new named index
        '''
        new = NestIndex(self.path, name)
        self.add_index(new)


class NestIndex(maras.tree_index.TreeBasedIndex):
    '''
    The index to manage higherarcical keys
    '''
    def __init__(self, *args, **kwargs):
        kwargs['node_capacity'] = kwargs.get('node_capacity', 1000)
        maras.tree_index.TreeBasedIndex.__init__(self, *args, **kwargs)

    def make_key_value(self, data):
        return data.get('_key', 'None')

    def make_key(self, key):
        return key

## Instruction:
Clean out the _key from the data, no need to double entry
## Code After:
'''
Create a stock database with a built in nesting key index
'''

# Import maras libs
import maras.database
import maras.tree_index


# We can likely build these out as mixins, making it easy to apply high level
# constructs to multiple unerlying database implimentations
class NestDB(maras.database.Database):
    '''
    Create a high level database which translates entry keys into a
    higherarcical dict like structure
    '''
    def __init__(self, path):
        maras.database.Database.__init__(self, path)
        self.__init_db()

    def __init_db(self):
        '''
        Init the db, open it if it already exists, otherwise create it
        '''
        try:
            self.open()
        except maras.database.DatabasePathException:
            self.create()

    def new_index(self, name):
        '''
        Add a new named index
        '''
        new = NestIndex(self.path, name)
        self.add_index(new)


class NestIndex(maras.tree_index.TreeBasedIndex):
    '''
    The index to manage higherarcical keys
    '''
    def __init__(self, *args, **kwargs):
        kwargs['node_capacity'] = kwargs.get('node_capacity', 1000)
        maras.tree_index.TreeBasedIndex.__init__(self, *args, **kwargs)

    def make_key_value(self, data):
        if '_key' in data:
            return data.pop('_key')
        return 'None'

    def make_key(self, key):
        return key
