docs: def import_locations(self, cells_file):
          """Parse OpenCellID.org data files.
  
          ``import_locations()`` returns a dictionary with keys containing the
          OpenCellID.org_ database identifier, and values consisting of
          a ``Cell`` objects.
  
          It expects cell files in the following format::
  
              22747,52.0438995361328,-0.2246370017529,234,33,2319,647,0,1,
              2008-04-05 21:32:40,2008-04-05 21:32:40
              22995,52.3305015563965,-0.2255620062351,234,10,20566,4068,0,1,
              2008-04-05 21:32:59,2008-04-05 21:32:59
              23008,52.3506011962891,-0.2234109938145,234,10,10566,4068,0,1,
              2008-04-05 21:32:59,2008-04-05 21:32:59
  
          The above file processed by ``import_locations()`` will return the
          following ``dict`` object::
  
              {23008: Cell(23008, 52.3506011963, -0.223410993814, 234, 10, 10566,
                           4068, 0, 1, datetime.datetime(2008, 4, 5, 21, 32, 59),
                           datetime.datetime(2008, 4, 5, 21, 32, 59)),
               22747: Cell(22747, 52.0438995361, -0.224637001753, 234, 33, 2319,
                           647, 0, 1, datetime.datetime(2008, 4, 5, 21, 32, 40),
                           datetime.datetime(2008, 4, 5, 21, 32, 40)),
               22995: Cell(22995, 52.3305015564, -0.225562006235, 234, 10, 20566,
                           4068, 0, 1, datetime.datetime(2008, 4, 5, 21, 32, 59),
                           datetime.datetime(2008, 4, 5, 21, 32, 59))}
  
          Args:
              cells_file (iter): Cell data to read
  
          Returns:
              dict: Cell data with their associated database identifier
  
          .. _OpenCellID.org: http://opencellid.org/
          """
          self._cells_file = cells_file
          field_names = ('ident', 'latitude', 'longitude', 'mcc', 'mnc', 'lac',
                         'cellid', 'crange', 'samples', 'created', 'updated')
          parse_date = lambda s: datetime.datetime.strptime(s,
                                                            '%Y-%m-%d %H:%M:%S')
          field_parsers = (int, float, float, int, int, int, int, int, int,
                           parse_date, parse_date)
          data = utils.prepare_csv_read(cells_file, field_names)
  
          for row in data:
              try:
                  cell = dict((n, p(row[n]))
                              for n, p in zip(field_names, field_parsers))
              except ValueError:
                  if r"\N" in row.values():
                      # A few entries are incomplete, and when that occurs the
                      # export includes the string "\N" to denote missing
                      # data.  We just ignore them for now
                      logging.debug('Skipping incomplete entry %r' % row)
                      break
                  else:
                      raise utils.FileFormatError('opencellid.org')
              else:
                  self[row['ident']] = Cell(**cell)