65     Returns a dictionary {project_tag: {period: [runs]}} 
   67     retrieved from the coma database. 
   70     from sqlalchemy 
import (select, Table, Column, 
 
   71         String, Integer, ForeignKey)
 
   73     from re 
import compile
 
   75     LETTER_PART = compile(
r"^(\D+)")
 
   77     from DQUtils.oracle 
import make_oracle_connection
 
   81     schema = 
"ATLAS_TAGS_METADATA" 
   83     coma_runs = Table(
"coma_runs", metadata,
 
   84         Column(
"run_index", Integer),
 
   85         Column(
"run_number", Integer),
 
   89     coma_period_definitions = Table(
"coma_period_defs", metadata,
 
   90         Column(
"p_index",   Integer),
 
   91         Column(
"p_project_period", String),
 
   94     project_period = coma_period_definitions.c.p_project_period
 
   96     coma_period_p1_to_runs = Table(
"coma_period_p1_to_runs", metadata,
 
   97         Column(
"p2r_index", Integer),
 
   98         Column(
"p_index",   Integer, ForeignKey(coma_period_definitions.c.p_index)),
 
   99         Column(
"run_index", Integer, ForeignKey(coma_runs.c.run_index)),
 
  102     joined = coma_period_p1_to_runs.join(coma_runs).
join(coma_period_definitions)
 
  104     smt = (
select([project_period, coma_runs.c.run_number], from_obj=joined)
 
  105            .order_by(coma_runs.c.run_number))
 
  107     projectperiod_runs = smt.execute().fetchall()
 
  110     for projectperiod, run 
in projectperiod_runs:
 
  111         project, period = projectperiod.split(
".")
 
  112         period = period.replace(
"period", 
"")
 
  114         project_dict = mapping.setdefault(project, {})
 
  115         period_runs = project_dict.setdefault(period, [])
 
  116         if not period_runs 
or period_runs[-1] != run:
 
  117             period_runs.append(run)
 
  119         period_letter = LETTER_PART.search(period)
 
  121             (period_letter,) = period_letter.groups()
 
  122             period_runs = project_dict.setdefault(period_letter, [])
 
  123             if not period_runs 
or period_runs[-1] != run:
 
  124                 period_runs.append(run)