def POST(self, name): """Add titles to an existing work""" logger.debug("Data: %s" % (web.data())) data = json.loads(web.data()) title = data.get('title') work_id = data.get('UUID') or data.get('uuid') try: titles = strtolist(title) assert titles and work_id except AssertionError as error: logger.debug(error) raise Error(BADPARAMS, msg="You must provide a (work) UUID" + " and at least a title") try: work = Work(work_id, titles=titles) assert work.exists() except: raise Error(BADPARAMS, msg="Unknown work '%s'" % (work_id)) work.save() work.load_titles() work.load_identifiers() return [work.__dict__]
def POST(self, name): """Add identifiers to an existing work""" logger.debug("Data: %s" % (web.data())) data = json.loads(web.data()) uri = data.get('URI') or data.get('uri') canonical = data.get('canonical') in (True, "true", "True") work_id = data.get('UUID') or data.get('uuid') try: assert uri and work_id except AssertionError as error: logger.debug(error) raise Error(BADPARAMS, msg="You must provide a (work) UUID" + " and a URI") try: scheme, value = Identifier.split_uri(uri) uris = [{'URI': uri, 'canonical': canonical}] except: raise Error(BADPARAMS, msg="Invalid URI '%s'" % (uri)) try: assert UriScheme(scheme).exists() except: raise Error(BADPARAMS, msg="Unknown URI scheme '%s'" % (scheme)) try: work = Work(work_id, uris=uris) assert work.exists() except: raise Error(BADPARAMS, msg="Unknown work '%s'" % (work_id)) work.save() work.load_identifiers() return [work.__dict__]
def handler(request): """ wechat backend handler :param request: :return: """ if request.method == "GET": # wechat server signature signature = request.GET.get('signature', '') timestamp = request.GET.get('timestamp', '') nonce = request.GET.get('nonce', '') echostr = request.GET.get('echostr', '') wechat = WechatBasic(token=appToken) if wechat.check_signature(signature=signature, timestamp=timestamp, nonce=nonce): return HttpResponse(echostr) else: return HttpResponse('INVALID') # text from user body_text = request.body wechat = WechatBasic(token=appToken) wechat.parse_data(body_text) # get wechat message message = wechat.get_message() # check message type if message.type != 'text': return HttpResponse(wechat.response_text(u'说人话')) content = message.content # if search if content.startswith(u"搜:"): content = get_magnet_from_keyword(content[2:]) # check if magnet if content.startswith("magnet:?xt=urn:btih:"): if Work.objects.filter(magnet=content): return HttpResponse(wechat.response_text(u'已经添加过这个链接了')) work = Work(magnet=content, operate=Operator.DOWNLOAD) work.save() return HttpResponse( wechat.response_text(u'链接已添加!回复【%s】显示详情。' % keyword_check)) # user check if content == keyword_check: works = Work.objects.filter(is_removed=False).order_by('-create_time') work_list = u'任务详情:\n\n' for index, work in enumerate(works): name = work.name if work.name else u'名字解析中' speed = work.down_speed progress = work.progress operate = work.get_operate_name() work_list += "%d. %s [%s] [%s] [%s]\n" % (index + 1, name, speed, progress, operate) work_list += u'\n回复【%s】下载,【%s】暂停,【%s】删除,后跟相应数字' % ( keyword_download, keyword_pause, keyword_remove) return HttpResponse(wechat.response_text(work_list)) return HttpResponse(wechat.response_text(u'待开发'))
def parse_minutegram(msheet, csheet, sw, user): work = Work() if msheet.cell(0,7).value == '': e = IntegrityError() e.__cause__="El trabajo no tiene numero" raise e else: work.number = msheet.cell(0, 7).value if column_value_search(1, 'DESCRIPCION TP:', msheet): drow = column_value_search(1, 'DESCRIPCION TP:', msheet) else: e = IntegrityError() e.__cause__="El documento no tiene seccion DESCRIPCION TP" raise e if column_value_search(1, 'JUSTIFICACION: ', msheet): jrow = column_value_search(1, 'JUSTIFICACION: ', msheet) else: e = IntegrityError() e.__cause__="El documento no tiene seccion JUSTIFICACION" raise e if column_value_search(1, 'OBSERVACIONES:', msheet): orow = column_value_search(1, 'OBSERVACIONES:', msheet) else: e = IntegrityError() e.__cause__="El documento no tiene seccion OBSERVACIONES" raise e if column_value_search(1, 'PLAN DE TRABAJO (MINUTOGRAMA):', msheet): wprow = column_value_search(1, 'PLAN DE TRABAJO (MINUTOGRAMA):', msheet) else: e = IntegrityError() e.__cause__="El documento no tiene seccion PLAN DE TRABAJO" raise e if column_value_search(1, 'PLAN DE CONTINGENCIA / ROLLBACK:', msheet): cprow = column_value_search(1, 'PLAN DE CONTINGENCIA / ROLLBACK:', msheet) else: e = IntegrityError() e.__cause__="El documento no tiene seccion PLAN DE CONTINGENCIA / ROLLBACK" raise e #este bloque de codigo asigna los datos extraidos del formulario al work creado work.ticketArea = sw.ticketArea work.department = sw.department work.municipality = sw.municipality work.impact = sw.impact work.ticketCause = sw.ticketCause work.initialDate = sw.initialDate work.finalDate = sw.finalDate work.outboundDate = sw.outboundDate work.createdDate = datetime.date.today() work.affectTime = sw.affectTime work.rollbackTime = sw.rollbackTime now = timezone.make_aware(datetime.datetime.now(), timezone.get_default_timezone()) #Si el tiempo dado para la causa esta en horas se entiende que debe pasarse a areas internas y nunca externas if sw.ticketCause.timeLapseType == Cause.HOURS and sw.ticketArea.type == Area.INTERN: if now + datetime.timedelta(days=1, hours=sw.ticketCause.internTimeLapse) <= sw.initialDate: work.limitResponseDate = now + datetime.timedelta(days=1, hours=sw.ticketCause.internTimeLapse) else: e = IntegrityError() e.__cause__="El tiempo maximo de respuesta de los clientes es mas tarde que la fecha de inicio del trabajo" raise e elif sw.ticketCause.timeLapseType == Cause.HOURS and sw.ticketArea.type == Area.EXTERN: e = IntegrityError() e.__cause__="La Causa del ticket no puede asignarse a un area externa" raise e elif sw.ticketCause.timeLapseType == Cause.DAYS and sw.ticketArea.type == Area.INTERN: if now + datetime.timedelta(days=1+sw.ticketCause.internTimeLapse) <= sw.initialDate: work.limitResponseDate = now + datetime.timedelta(days=1+sw.ticketCause.internTimeLapse) else: e = IntegrityError() e.__cause__="El tiempo maximo de respuesta de los clientes es mas tarde que la fecha de inicio del trabajo" raise e elif sw.ticketCause.timeLapseType == Cause.DAYS and sw.ticketArea.type == Area.INTERN: if now + datetime.timedelta(days=1+sw.ticketCause.externTimeLapse) <= sw.initialDate: work.limitResponseDate = now + datetime.timedelta(days=1+sw.ticketCause.externTimeLapse) else: e = IntegrityError() e.__cause__="El tiempo maximo de respuesta de los clientes es mas tarde que la fecha de inicio del trabajo" raise e #se asigna el usuario loggeado al trabajo if user: work.userCreator = user #------------------------------------------------------------------------------- work.description = msheet.cell(drow+1, 1).value work.justification = msheet.cell(jrow+1, 1).value work.observations = msheet.cell(orow+1, 1).value try: group = WorkGroup.objects.get(number = work.number) for w in group.work_set.all(): w.state = Work.CANCELED for acc in w.acceptance_set.all(): acc.valid = False acc.save() w.save() work.group = group work.programmed = Work.REPROGRAMMED except: group = WorkGroup() group.number = work.number group.save() work.group = group work.save() #loads work plans for i in range(wprow+2,cprow): if check_line(i, 2, 6, msheet): wp = WorkPlan() wp.work=work wp.initialDate = xldate_as_datetime(msheet.cell(i, 2).value, 0) wp.finalDate = xldate_as_datetime(msheet.cell(i, 3).value, 0) wp.affectation = datetime.time(*(xldate_as_tuple(msheet.cell(i, 4).value, 0))[3:]) wp.activity = msheet.cell(i, 5).value wp.save() else: e = IntegrityError() e.__cause__="Alguno de los planes de trabajo tiene un campo vacio" raise e #loads contingency plans for i in range(cprow+2, drow-1): if check_line(i, 2, 6, msheet): cp = ContingencyPlan() cp.work=work cp.initialDate = xldate_as_datetime(msheet.cell(i, 2).value, 0) cp.finalDate = xldate_as_datetime(msheet.cell(i, 3).value, 0) cp.affectation = datetime.time(*(xldate_as_tuple(msheet.cell(i, 4).value, 0))[3:]) cp.activity = msheet.cell(i, 5).value cp.save() else: e = IntegrityError() e.__cause__="Alguno de los planes de contingencia tiene un campo vacio" raise e parse_corp_clients(csheet, work)
def POST(self, name): """Create a work""" logger.debug("Data: %s" % (web.data())) data = json.loads(web.data()) wtype = data.get('type') title = data.get('title') uri = data.get('URI') or data.get('uri') parent = data.get('parent') child = data.get('child') try: titles = strtolist(title) uris = strtolist(uri) assert wtype and titles and uris except AssertionError as error: logger.debug(error) raise Error(BADPARAMS, msg="You must provide a (work) type" + ", a title, and at least one URI") try: assert WorkType(wtype).exists() except: raise Error(BADPARAMS, msg="Unknown work type '%s'" % (wtype)) for i in uris: # attempt to get scheme from URI try: ident = i['URI'] or i['uri'] scheme, value = Identifier.split_uri(ident) try: i['canonical'] = i['canonical'] in (True, "true", "True") except: i['canonical'] = False except: raise Error(BADPARAMS, msg="Invalid URI '%s'" % (ident)) # check whether the URI scheme exists in the database try: assert UriScheme(scheme).exists() except: raise Error(BADPARAMS, msg="Unknown URI scheme '%s'" % (scheme)) uuid = Work.generate_uuid() work = Work(uuid, wtype, titles, uris) if parent: parents = strtolist(parent) for p in parents: try: assert Work.is_uuid(p) assert Work.uuid_exists(p) except AssertionError as error: logger.debug(error) raise Error(BADPARAMS, msg="Invalid parent UUID provided.") work.set_parents(parents) if child: children = strtolist(child) for c in children: try: assert Work.is_uuid(c) assert Work.uuid_exists(c) except AssertionError as error: logger.debug(error) raise Error(BADPARAMS, msg="Invalid child UUID provided.") work.set_children(children) work.save() return [work.__dict__]