def WebModFormSpace_cached(level,weight,character,**kwds):
    if use_cache: 
        label = space_label(level=level, weight=weight, character=character, make_cache_label = True)
        M= cache.get(label)
        emf_logger.debug("Looking for cached space:{0}".format(label))
        if M is None:
            emf_logger.debug("M was not in cache!")
            M = WebModFormSpace(level,weight,character,**kwds)
            cache.set(label, M, timeout=5 * 60)
        else:
            emf_logger.debug("M was in cache!")
    else:
        M = WebModFormSpace(level,weight,character,**kwds)
    return M
    def __init__(self, level=1, weight=12, character=1,cuspidal=True, new=True, prec=0, bitprec=53, update_from_db=True, update_hecke_orbits=True, **kwargs):

        # I added this reduction since otherwise there is a problem with
        # caching the hecke orbits (since they have self as  parent)
        self._reduction = (type(self),(level,weight,character),
                           {'cuspidal':cuspidal, 'prec':prec, 'bitprec':bitprec, 'update_from_db':update_from_db,'update_hecke_orbits':update_hecke_orbits})
        if isinstance(character, WebChar):
            character_number = character.number
        else:
            character_number = character
        emf_logger.debug("level={0}".format(level))
        emf_logger.debug("character={0},type={1}".format(character,type(character)))         
        emf_logger.debug("character_number={0}".format(character_number))         
        self._properties = WebProperties(
            WebInt('level', value=level),
            WebInt('weight', value=weight),
            WebCharProperty('character', modulus=level, number=character_number),
            WebStr('character_naming_scheme', value='Conrey', save_to_fs=True),
            WebList('_character_galois_orbit', default_value=[character]),
            WebDict('_character_galois_orbit_embeddings', default_value={}),
            WebCharProperty('character_orbit_rep', modulus=level, save_to_fs=True),
            #WebCharProperty('character_used_in_computation', modulus=level, save_to_fs=True),
            WebStr('space_label', default_value=space_label(level=level, weight=weight, character=character), save_to_fs=True),
            WebStr('space_orbit_label', value='', save_to_db=True),            
            #WebStr('galois_orbit_name', value='', save_to_fs=True),
            WebInt('dimension'),
            WebInt('dimension_cusp_forms'),
            WebInt('dimension_modular_forms'),
            WebInt('dimension_new_cusp_forms'),
            WebBool('cuspidal', value=cuspidal),
            WebBool('new', value=new),
            #WebInt('prec', value=int(prec)), #precision of q-expansions -- removed, does not make much sense for the space here
            WebSageObject('group'),
            WebInt('sturm_bound'),
            WebHeckeOrbits('hecke_orbits', level, weight,
                           character, self,  prec=prec, include_in_update=update_hecke_orbits),
            WebList('oldspace_decomposition', required=False),
            WebInt('bitprec', value=bitprec),
            WebFloat('version', value=float(emf_version), save_to_fs=True),
            WebList('zeta_orders',value=[],save_to_db=True),
            WebDate('creation_date',value=None,save_to_db=True)
                    )

        self.make_code_snippets()
            
        emf_logger.debug("Have set properties of space 1 !!")
        super(WebModFormSpace, self).__init__(update_from_db=update_from_db, **kwargs)
        emf_logger.debug("Have set properties of space 2 !!")
        emf_logger.debug("orbits={0}".format(self.hecke_orbits))