def __init__(self, inputfile): self.conceitos = {} self.faltas = {} self.aulas = {} spreadsheetdoc = ODSReader(inputfile) sheetConceitos = getSheetConceitos(spreadsheetdoc) sheetPresencas = getSheetPresencas(spreadsheetdoc) sheetPlanoDeAulas = getSheetPlanoDeAulas(spreadsheetdoc) associateSheets(conceitos=sheetConceitos, presencas=sheetPresencas, plano=sheetPlanoDeAulas) self.conceitos, self.faltas = getConceitosFaltas(sheetConceitos) if sheetPresencas.planoDeAulas is not None: iterSheet = iter(sheetPresencas.planoDeAulas.iteritems()) for data, aula in iterSheet: self.aulas[strDateCanonicalize(data)] = aula iterSheet = iter(sheetPresencas) next(iterSheet) rowNumber = 1 for row in iterSheet: ++rowNumber ra = 0 try: ra = int(row.get('ra', 0)) except ValueError: pass if ra == 0: continue for data, idxData in sheetPresencas.idxData.iteritems(): data = strDateCanonicalize(data) if data not in self.aulas: self.aulas[data] = Aula(dia=data.strip('/')[0], mes=data.strip('/')[1], ano=sheetPlanoDeAulas.ano) presenca = str(row.get(idxData, '')).strip().lower() if presenca == 'p' or presenca == '1': self.aulas[data].mapRAPresencas[ra] = True elif presenca == 'f' or presenca == '--' or \ presenca == '-' or presenca == '0': self.aulas[data].mapRAPresencas[ra] = False else: #print >> sys.stderr, \ # "Presença não registrada para a data %s, ra %d" % (data,ra) self.aulas[data].mapRAPresencas[ra] = None
def lancaAula(self, aula, turma): if turma.linkLancarNova is None: self.br.open(PortalDoProfessor.PORTAL_BASE_HREF + "diario/turma.html?turma=" + turma.idturma) self.rereadLinksDiario(turma) if turma.linkLancarNova is None: print >> sys.stderr, "Não posso lançar aula para turma " + \ turma.codigo return False date = strDateCanonicalize(repr(aula)) links = turma.linksLancarAula.get(date, None) if links is None: horasAula = aula.horasAula if aula.horasAula else 1 return self.lancaAulaComLink(aula, turma, turma.linkLancarNova, aula.hora(), horasAula) else: try: for link in links: data, horaInicio = link.text.split(" ") return self.lancaAulaComLink(aula, turma, link, horaInicio, 1) except urllib2.HTTPError: print >> sys.stderr, "ERRO: problema ao mudar aula " + repr( aula) print >> sys.stderr, " vou tentar deletar a aula e inseri-la novamente" for link in links: print >> sys.stderr, " deletando " + link.text self.deletaAulaComLink(link, turma) print >> sys.stderr, " inserindo aula" horasAula = aula.horasAula if aula.horasAula else 1 return self.lancaAulaComLink(aula, turma, turma.linkLancarNova, aula.hora(), horasAula) return True
def lancaAula(self, aula, turma): if turma.linkLancarNova is None: self.br.open(PortalDoProfessor.PORTAL_BASE_HREF + "diario/turma.html?turma=" + turma.idturma) self.rereadLinksDiario(turma) if turma.linkLancarNova is None: print >> sys.stderr, "Não posso lançar aula para turma " + \ turma.codigo return False date = strDateCanonicalize(repr(aula)) links = turma.linksLancarAula.get(date, None) if links is None: horasAula = aula.horasAula if aula.horasAula else 1 return self.lancaAulaComLink(aula, turma, turma.linkLancarNova, aula.hora(), horasAula) else: try: for link in links: data, horaInicio = link.text.split(" ") return self.lancaAulaComLink(aula, turma, link, horaInicio, 1) except urllib2.HTTPError: print >> sys.stderr, "ERRO: problema ao mudar aula " + repr(aula) print >> sys.stderr, " vou tentar deletar a aula e inseri-la novamente" for link in links: print >> sys.stderr, " deletando " + link.text self.deletaAulaComLink(link, turma) print >> sys.stderr, " inserindo aula" horasAula = aula.horasAula if aula.horasAula else 1 return self.lancaAulaComLink(aula, turma, turma.linkLancarNova, aula.hora(), horasAula) return True
def __init__(self,inputfile): self.conceitos = {} self.faltas = {} self.aulas = {} spreadsheetdoc = ODSReader(inputfile) sheetConceitos = getSheetConceitos(spreadsheetdoc) sheetPresencas = getSheetPresencas(spreadsheetdoc) sheetPlanoDeAulas = getSheetPlanoDeAulas(spreadsheetdoc) associateSheets(conceitos=sheetConceitos, presencas=sheetPresencas, plano=sheetPlanoDeAulas) self.conceitos, self.faltas = getConceitosFaltas(sheetConceitos) if sheetPresencas.planoDeAulas is not None: iterSheet = iter(sheetPresencas.planoDeAulas.iteritems()) for data, aula in iterSheet: self.aulas[strDateCanonicalize(data)] = aula iterSheet = iter(sheetPresencas) next(iterSheet) rowNumber = 1 for row in iterSheet: ++rowNumber ra = 0 try: ra = int(row.get('ra', 0)) except ValueError: pass if ra == 0: continue for data, idxData in sheetPresencas.idxData.iteritems(): data = strDateCanonicalize(data) if data not in self.aulas: self.aulas[data] = Aula(dia = data.strip('/')[0], mes = data.strip('/')[1], ano = sheetPlanoDeAulas.ano) presenca = str(row.get(idxData, '')).strip().lower() if presenca == 'p' or presenca == '1': self.aulas[data].mapRAPresencas[ra] = True elif presenca == 'f' or presenca == '--' or \ presenca == '-' or presenca == '0': self.aulas[data].mapRAPresencas[ra] = False else: #print >> sys.stderr, \ # "Presença não registrada para a data %s, ra %d" % (data,ra) self.aulas[data].mapRAPresencas[ra] = None
def rereadLinksDiario(self, turma): turma.linkLancarNova = None turma.linksLancarAula = {} regexLancarNova = re.compile(r"\?turma=[0-9]+$") for link in self.br.links(url_regex="formulario.html"): if regexLancarNova.search(link.url): turma.linkLancarNova = link else: date = strDateCanonicalize(link.text) linksLancarAula = turma.linksLancarAula.get(date, []) linksLancarAula.append(link) turma.linksLancarAula[date] = linksLancarAula
def rereadLinksDiario(self, turma): turma.linkLancarNova = None turma.linksLancarAula = {} regexLancarNova = re.compile(r"\?turma=[0-9]+$") for link in self.br.links(url_regex="formulario.html"): if regexLancarNova.search(link.url): turma.linkLancarNova = link else: date = strDateCanonicalize(link.text) linksLancarAula = turma.linksLancarAula.get(date, []) linksLancarAula.append(link) turma.linksLancarAula[date] = linksLancarAula
def associateSheets(conceitos, presencas, plano): plano.ano = None planoDeAulas = {} iterSheet = iter(plano) next(iterSheet) rownumber = 0 for row in iterSheet: rownumber += 1 data = row.get('data', None) if data is None: continue dia, mes, ano = parseData(data) if plano.ano is None and ano is not None: plano.ano = ano if ano is None: ano = plano.ano notasDeAula = row.get('notas de aula', default="Aula %02d" % rownumber) tipo = row.get('tipo', None) horaInicial = row.get('hora inicial', '00:00') horasAula = row.get('horas aula', 1) planoDeAulas[strDateCanonicalize(data)] = Aula(dia=dia, mes=mes, ano=ano, descricao=notasDeAula, tipo=tipo, horaInicial=horaInicial, horasAula=horasAula) # end for row in iterSheet: if matches(presencas, planoDeAulas): presencas.planoDeAulas = planoDeAulas else: presencas.planoDeAulas = None print >> sys.stderr, "Plano de Aulas e Presenças não combinam!"
def associateSheets(conceitos, presencas, plano): plano.ano = None planoDeAulas = {} iterSheet = iter(plano) next(iterSheet) rownumber = 0 for row in iterSheet: rownumber += 1 data = row.get('data', None) if data is None: continue dia, mes, ano = parseData(data) if plano.ano is None and ano is not None: plano.ano = ano if ano is None: ano = plano.ano notasDeAula = row.get('notas de aula', default="Aula %02d" % rownumber) tipo = row.get('tipo', None) horaInicial = row.get('hora inicial', '00:00') horasAula = row.get('horas aula', 1) planoDeAulas[strDateCanonicalize(data)] = Aula(dia = dia, mes = mes, ano = ano, descricao = notasDeAula, tipo = tipo, horaInicial = horaInicial, horasAula = horasAula) # end for row in iterSheet: if matches(presencas, planoDeAulas): presencas.planoDeAulas = planoDeAulas else: presencas.planoDeAulas = None print >> sys.stderr, "Plano de Aulas e Presenças não combinam!"
def getAula(self, data): try: return self.aulas[strDateCanonicalize(data)] except IndexError: return None
def matches(presencas, plano): for date in presencas.idxData.keys(): if strDateCanonicalize(date) not in plano: return False return True
def getAula(self, data): try: return self.aulas[strDateCanonicalize(data)] except IndexError: return None
def matches(presencas, plano): for date in presencas.idxData.keys(): if strDateCanonicalize(date) not in plano: return False return True