def get_paths(self, subject):
        surfpath = os.path.join(self.filestore, subject, "surfaces")

        if self.subjects[subject]._warning is not None:
            warnings.warn(self.subjects[subject]._warning)

        surfs = dict()
        for surf in os.listdir(surfpath):
            ssurf = os.path.splitext(surf)[0].split('_')
            name = '_'.join(ssurf[:-1])
            hemi = ssurf[-1]

            if name not in surfs:
                surfs[name] = dict()
            surfs[name][hemi] = os.path.abspath(os.path.join(surfpath,surf))

        viewsdir = os.path.join(self.filestore, subject, "views")
        if not os.path.exists(viewsdir):
            os.makedirs(viewsdir)
        views = os.listdir(viewsdir)

        filenames = dict(
            surfs=surfs,
            xfms=sorted(os.listdir(os.path.join(self.filestore, subject, "transforms"))),
            xfmdir=os.path.join(self.filestore, subject, "transforms", "{xfmname}", "matrices.xfm"),
            anats=os.path.join(self.filestore, subject, "anatomicals", '{type}{opts}.{ext}'), 
            surfinfo=os.path.join(self.filestore, subject, "surface-info", '{type}{opts}.npz'),
            masks=os.path.join(self.filestore, subject, 'transforms', '{xfmname}', 'mask_{type}.nii.gz'),
            rois=os.path.join(self.filestore, subject, "rois.svg").format(subj=subject),
            views=sorted([os.path.splitext(f)[0] for f in views]),
        )

        return filenames
Creates descriptor for a parameter using the subfields that define it.
dataset/ETHPy150Open gallantlab/pycortex/cortex/database.py/Database.get_paths--crossover with--dataset/ETHPy150Open AppScale/appscale/AppServer/google/appengine/ext/endpoints/api_config.py/ApiConfigGenerator.__parameter_descriptor