Exemple #1
0
def check_services(services):

    term = get_term()
    c = Client()

    response, result = c.get_boxes()

    for service in services:

        if len(service.splitlines()) > 1:
            puts("""{t.yellow}Warning:{t.normal} Incorrect service \
specification detected.
Reason: A new line detected in declaration:
{service}""".format(t=term, service=service))

        else:
            check_service(service, result)
        # if
    if services is None or len(services) == 0:
        puts(
            """{t.yellow}Warning:{t.normal} No services specified in {file}"""
            .format(
                t=term,
                file=DEFAULT_WERCKER_YML
            )
        )
Exemple #2
0
def search_services(name):

    client = Client()

    term = get_term()

    response, results = client.get_boxes()

    if results and len(results):
        services = filter(
            lambda box: box.get("latestType", "") == "service",
            results
        )
        services = sorted(
            services,
            key=lambda service: service.get("fullname")
        )

        if name:
            services = filter(
                lambda box: (
                    box.get("fullname", "").find(name) != -1 or
                    box.get("latestDescription").find(name) != -1
                ),
                services
            )

        if len(services) is not 0:
            if term.width:
                pad_length = term.width * 0.2
                pad_length = int(math.floor(pad_length))
                pad_length = max(pad_length, 30)
                pad_length = min(pad_length, 50)
            else:
                pad_length = 0

            for service in services:
                # versions = service.get("versionNumbers")
                versions = get_sorted_versions(service)

                if len(versions):
                    detailName = service["fullname"]
                    paddedName = detailName.ljust(pad_length)

                    if name:
                        paddedName = paddedName.replace(
                            name,
                            term.bold_white + name + term.normal
                        )

                    description = service["latestDescription"]
                    if description is None:
                        description = ""

                    version = versions[len(versions)-1]
                    version = str(version)
                    version = version.rjust(8)
                    if name:
                        description = description.replace(
                            name,
                            term.bold_white + name + term.normal
                        )

                    puts(
                        paddedName + " - " + version + " - " +
                        description
                    )

        else:
            if name:
                puts(
                    "No services found with: {t.bold_white}{0}{t.normal}".
                    format(
                        name,
                        t=term
                    )
                )
            else:
                puts("No services found.")
Exemple #3
0
def check_service(service, result=None):
    term = get_term()

    if not result:
        c = Client()
        _response, result = c.get_boxes()

    unversioned_pattern = "(?P<owner>.*)/(?P<name>.*)"
    versioned_pattern = "(?P<owner>.*)/(?P<name>.*)@(?P<version>.*)"

    results = re.search(versioned_pattern, service)

    if not results:
        results = re.search(unversioned_pattern, service)

    info_dict = results.groupdict()

    if not result:
        puts("""{t.red}Error:{t.normal}""".format(t=term))
    else:
        fullname = "{owner}/{name}".format(
            owner=info_dict.get("owner"),
            name=info_dict.get("name")
        )

        boxes = filter(
            lambda box: box.get("fullname") == fullname,
            result
        )

        if len(boxes) == 0:
            puts("""{t.yellow}Warning:{t.normal} Service \
{fullname} not found.""".format(
                t=term)
            )

        else:
            box = boxes[0]

            versions = get_sorted_versions(box)
            latest_version = False
            specified_version = info_dict.get("version", None)

            if not specified_version:
                version_found = len(versions) > 0
                # latest_version = versions[len(versions)-1]
                requested_version = versions[len(versions)-1]
            else:

                version_found = False
                try:
                    requested_version = semantic_version.Version.coerce(
                        specified_version,
                    )
                except ValueError:
                    requested_version = None

                if requested_version:
                    spec = semantic_version.Spec(
                        '==' + str(specified_version)
                    )
                else:
                    try:
                        spec = semantic_version.Spec(
                            str(specified_version)
                        )
                    except ValueError:
                        puts(
                            """{t.red}Error: {t.normal}Invalid version \
specification detected: {version}.
Expected a SemVer version or specification (i.e. 0.1.2 or >0.1.1)
For more information on SemVer see: http://semver.org/"""
                            .format(
                                t=term,
                                version=requested_version
                            )
                        )
                        return

                # print locals()
                requested_version = spec.select(versions)

                if requested_version:
                    version_found = True

                    newer_spec = semantic_version.Spec(
                        ">" + str(requested_version)
                    )
                    latest_version = newer_spec.select(versions)

                    if not latest_version:
                        latest_version = False
                else:
                    version_found = False

            if version_found is False:
                info = "{t.red}not found{t.normal}".format(
                    t=term
                )
            elif latest_version is not False:
                info = "{t.yellow}upgrade to {sem_ver}{t.normal}".\
                    format(
                        t=term,
                        sem_ver=latest_version
                    )
            else:
                info = "{t.green}latest{t.normal}".format(t=term)
            puts(
                "{fullname} - {version} ({info}) - {description}".
                format(
                    fullname=fullname,
                    info=info,
                    version=requested_version,
                    description=box.get("latestDescription")
                )
            )