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 ) )
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.")
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") ) )