def step_impl(context, timestamp):
    parsed = et.fromstring(str(context.response.text))
    element = "jobref"
    jobreflist = parsed.findall(get_UwsName(element))
    for jobref in jobreflist:
        refId = jobref.get("id")
        link = jobref.get(get_XlinkName("href"))
        joblink = get_joblink(context.server, link, refId)
        # make a get request and compare the creationTime
        #raise NotImplementedError("joblink", joblink)
        context.joblink = joblink
        context.execute_steps(u'''
            When I make a GET request to URL "{url}"
            Then the response status should be "200"
            And the UWS job creationTime should be later than "{timestamp}"
            '''.format(url=joblink, timestamp=timestamp)
        )
def step_impl(context):
    parsed = et.fromstring(str(context.response.text))
    element = "jobref"
    jobreflist = parsed.findall(get_UwsName(element))
    timestamp = '2999-01-01T00:00:00'
    for jobref in jobreflist:
        refId = jobref.get("id")
        link = jobref.get(get_XlinkName("href"))
        joblink = get_joblink(context.server, link, refId)
        context.joblink = joblink;

        # make a get request and store the creationTime
        context.execute_steps(u'''
            When I make a GET request to URL "{url}"
            Then the UWS job creationTime should be earlier than or equal to "{timestamp}"
            '''.format(url=joblink, timestamp=timestamp)
        )
        timestamp = context.job.creationTime
def step_impl(context):
    parsed = et.fromstring(str(context.response.text))
    elementlist = parsed.findall(".//" + str(get_UwsName("jobref")))
    if len(elementlist) < 2:
        raise NotImplementedError("Job list contains only %d jobs. Cannot test using this step." % len(elementlist))
    # also cannot test this, if there are no creation times!!
    # Problem: there is not even any kind of ordering in the job list that I could assume,
    # so just search for the first two jobs that have a creationTime that is not exactly the same

    i = 0
    job_creationTimes = []
    while len(job_creationTimes) < 2:
        creationTime = None
        while creationTime is None and i < len(elementlist):
            jobref = elementlist[-i]  # use -i here, since I expect descending ordering, if any
            refId = jobref.get("id")
            link = jobref.get(get_XlinkName("href"))
            joblink = get_joblink(context.server, link, refId)
            response = requests.get(joblink, headers=context.headers, auth=context.auth)
            parsed = et.fromstring(str(response.text))
            creationTime = parsed.find(get_UwsName("creationTime")).text
            i = i + 1

        if creationTime is not None:
            # convert creationTime to UTC, in case it has a timezone attached:
            date = dateutil.parser.parse(creationTime)
            if date.utcoffset() is not None:
                utz = pytz.timezone("UTC")
                date = date.astimezone(utz).replace(tzinfo=None)
                date = date.isoformat()
            # check if it is not exactly the same as previous ones,
            # since we need different times for AFTER condition to work:
            if date not in job_creationTimes:
                job_creationTimes.append(date)
        else:
            raise NotImplementedError(
                "Cannot find enough jobs with a creationTime, thus cannot test Scenarios using this. %r %r"
                % (link, creationTime)
            )

    # store the smallest creationTime of these to ensure that I will get at
    # least one result returned when filtering by this creationTime
    context.creationTime_filter = min(job_creationTimes)