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__]
Example #2
0
    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__]
Example #3
0
    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__]
Example #4
0
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'待开发'))
Example #5
0
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)
Example #6
0
    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__]