Exemplo n.º 1
0
 def search_result(self, s_struct):
     res_xml = etree.fromstring(s_struct.read())  # @UndefinedVariable
     cur_search = s_struct.run_info["stuff"]
     cur_search.current_state = "done"
     cur_search.results = len(
         res_xml.xpath(".//solvable", smart_strings=False))
     cur_search.last_search = cluster_timezone.localize(
         datetime.datetime.now())
     cur_search.save(
         update_fields=["last_search", "current_state", "results"])
     # all repos
     repo_dict = dict([(cur_repo.name, cur_repo)
                       for cur_repo in package_repo.objects.all()])
     # delete previous search results
     cur_search.package_search_result_set.all().delete()
     self.log("found for {}: {:d}".format(cur_search.search_string,
                                          cur_search.results))
     for result in res_xml.xpath(".//solvable", smart_strings=False):
         if result.attrib["repository"] in repo_dict:
             new_sr = package_search_result(
                 name=result.attrib["name"],
                 kind=result.attrib["kind"],
                 arch=result.attrib["arch"],
                 version=result.attrib["edition"],
                 package_search=cur_search,
                 copied=False,
                 package_repo=repo_dict[result.attrib["repository"]])
             new_sr.save()
         else:
             self.log(
                 "unknown repository '{}' for package '{}'".format(
                     result.attrib["repository"],
                     result.attrib["name"],
                 ), logging_tools.LOG_LEVEL_ERROR)
Exemplo n.º 2
0
 def search_result(self, s_struct):
     cur_mode, _ln = (0, None)
     found_packs = []
     for line in s_struct.read().split("\n"):
         found_packs.append(line.strip().split())
     cur_search = s_struct.run_info["stuff"]
     cur_search.current_state = "done"
     _found = 0
     cur_search.results = _found
     cur_search.last_search = cluster_timezone.localize(datetime.datetime.now())
     cur_search.save(update_fields=["last_search", "current_state", "results"])
     # delete previous search results
     cur_search.package_search_result_set.all().delete()
     self.log("parsing results... ({:d} found)".format(len(found_packs)))
     repo_dict = {_repo.name: _repo for _repo in package_repo.objects.all()}
     for _parts in found_packs:
         try:
             p_name, p_ver = _parts
             version, release = p_ver.split("-", 1)
             _found += 1
             new_sr = package_search_result(
                 name=p_name,
                 version="{}-{}".format(version, release),
                 package_search=cur_search,
                 copied=False,
             )
             new_sr.save()
         except:
             self.log(
                 "cannot interpret line '{}': {}".format(
                     _parts,
                     process_tools.get_except_info(),
                 ),
                 logging_tools.LOG_LEVEL_ERROR
             )
     cur_search.results = _found
     cur_search.save(update_fields=["results"])
     self.log("found for {}: {:d}".format(cur_search.search_string, cur_search.results))
     self.post_search()
Exemplo n.º 3
0
 def search_result(self, s_struct):
     cur_mode, _ln = (0, None)
     found_packs = []
     for line in s_struct.read().split("\n"):
         if line.startswith("===="):
             # header done
             cur_mode = 1
             _ln = 0
         elif not line.strip():
             # empty line, check for new package
             cur_mode = 1
             _ln = 0
         else:
             if cur_mode == 1:
                 _ln += 1
                 if _ln == 1:
                     p_info = [line.strip().split()[0]]
                 else:
                     if line.lower().startswith("repo") and line.count(":"):
                         p_info.append(line.strip().split(":")[1].strip())
                         found_packs.append(p_info)
                 # p_name = line.split()[0].strip()
                 # if p_name and p_name != ":":
                 #    if p_name[0].isdigit() and p_name.count(":"):
                 #        p_name = p_name.split(":", 1)[1]
                 #    found_packs.append(p_name)
     cur_search = s_struct.run_info["stuff"]
     cur_search.current_state = "done"
     _found = 0
     cur_search.results = _found
     cur_search.last_search = cluster_timezone.localize(datetime.datetime.now())
     cur_search.save(update_fields=["last_search", "current_state", "results"])
     # delete previous search results
     cur_search.package_search_result_set.all().delete()
     self.log("parsing results... ({:d} found)".format(len(found_packs)))
     repo_dict = {_repo.name: _repo for _repo in package_repo.objects.all()}
     for p_name, repo_name in found_packs:
         if repo_name == "installed":
             continue
         try:
             parts = p_name.split("-")
             rel_arch = parts.pop(-1)
             arch = rel_arch.split(".")[-1]
             release = rel_arch[:-(len(arch) + 1)]
             version = parts.pop(-1)
             name = "-".join(parts)
         except:
             self.log(
                 "cannot parse package name {}: {}".format(
                     p_name,
                     process_tools.get_except_info()
                 ),
                 logging_tools.LOG_LEVEL_ERROR
             )
         else:
             _found += 1
             new_sr = package_search_result(
                 name=name,
                 arch=arch,
                 version="{}-{}".format(version, release),
                 package_search=cur_search,
                 copied=False,
                 package_repo=repo_dict.get(repo_name, None)
             )
             new_sr.save()
     cur_search.results = _found
     cur_search.save(update_fields=["results"])
     self.log(
         "packages found for '{}': {:d}".format(
             cur_search.search_string,
             cur_search.results
         )
     )
     self.post_search()