class_docstr: A DataStoreStorage defines the interface of communication between the
  higher-level datastores and the actual storage system.
  
  Both the ContentAddressedStore and the TaskDataStore use these methods to
  read/write/list from the actual storage system. These methods are meant to
  be low-level; they are in a class to provide better abstraction but this
  class itself is not meant to be initialized.
class_docstr_tok: ["A","DataStoreStorage","defines","the","interface","of","communication","between","the","higher-level","datastores","and","the","actual","storage","system",".","Both","the","ContentAddressedStore","and","the","TaskDataStore","use","these","methods","to","read\/write\/list","from","the","actual","storage","system",".","These","methods","are","meant","to","be","low-level",";","they","are","in","a","class","to","provide","better","abstraction","but","this","class","itself","is","not","meant","to","be","initialized","."]
docstr: Returns a default choice for datastore_root from metaflow_config
  
  Parameters
  ----------
  echo : function
      Function to use to print out messages
  create_on_absent : bool, optional
      Create the datastore root if it doesn't exist, by default True
docstr_tok: ["Returns","a","default","choice","for","datastore_root","from","metaflow_config","Parameters","--","--","--","--","--","echo",":","function","Function","to","use","to","print","out","messages","create_on_absent",":","bool",",","optional","Create","the","datastore","root","if","it","does","n't","exist",",","by","default","True"]
code: def get_datastore_root_from_config(cls, echo, create_on_absent=True):
      """Returns a default choice for datastore_root from metaflow_config
  
      Parameters
      ----------
      echo : function
          Function to use to print out messages
      create_on_absent : bool, optional
          Create the datastore root if it doesn't exist, by default True
      """
      raise NotImplementedError
  
imports: from collections import namedtuple
  import re
  from .exceptions import DataException
label_desc: Use image node_id 2 for calling the DataStoreStorage obj's underlying member method code with example usage: obj.get_datastore_root_from_config(cls, echo, create_on_absent) without return types