def append(self, f): with closing(urllib2.urlopen(self.url)) as socket: wb = Workbook.from_file(socket) rdr0 = enumerate(wb.sheet_iter(self.mapping.sheet)) if not self.mapping.header: rdr0 = chain( [(0, None)], ((rownum + 1, row) for (rownum, row) in rdr0)) rfp = FM.File.m.get_file(f._id) wfp = FM.File.m.new_file( f.filename + '-appended.csv', contentType='text/csv') self.appended_file_id = wfp._id with rfp, wfp: rdr1 = csv.reader(util.Linereader(rfp)) wr = csv.writer(wfp) key0 = operator.itemgetter(0) key1 = lambda row: int(row[0]) for val0, val1 in util.right_join(rdr0, rdr1, key0, key1): if val0 is None: row0 = [] else: row0 = val0[1] if val1 is None: row1 = [] else: row1 = val1 if row0 is None: row0 = [] if row1 is None: row1 = [] wr.writerow(row1 + row0)
def import_list(event_id): ev = EM.event.m.get(_id=event_id) lst = M.List.query.get(_id=ev.properties.list_id) # read file associated with list and get spreadsheet contents with closing(urllib2.urlopen(lst.url)) as socket: wb = Workbook.from_file(socket)
def subscriber_iter(self): with closing(urllib2.urlopen(self.url)) as socket: wb = Workbook.from_file(socket) rdr = enumerate(wb.sheet_iter(self.mapping.sheet)) if self.mapping.header: rdr.next() else: rdr = ((rownum + 1, row) for (rownum, row) in rdr) for rows in util.chunk(rdr, 100): fp = StringIO() wr = csv.writer(fp) for rownum, row in rows: wr.writerow([rownum, row[self.mapping.email]]) yield fp.getvalue()