def check_ticket(client_ticket): server_ticket = load_server_manifest(include_file_list=False).ticket Control.logger.debug("client_ticket.host: %s", client_ticket.host, 2) Control.logger.debug("server_ticket.host: %s", server_ticket.host, 2) Control.logger.debug("client_ticket.checksum: %s", client_ticket.checksum) Control.logger.debug("server_ticket.checksum: %s" % server_ticket.checksum) Control.logger.debug("client_ticket.timestamp: %s", client_ticket.timestamp) Control.logger.debug("server_ticket.timestamp: %s", server_ticket.timestamp) response = etree.Element("Current") response.text = (client_ticket == server_ticket) and "Y" or "N" return WebService.Response(response, Control.logger)
def make_delta(client_manifest): server_manifest = load_server_manifest() client_files = {} server_files = {} to_be_installed = [] to_be_deleted = [] manifest_name = None for f in client_manifest.files: client_files[f.name.upper()] = f for f in server_manifest.files: server_files[f.name.upper()] = f for key in server_files: serverFile = server_files[key] if "CDRMANIFEST.XML" in key: manifest_name = serverFile.name if key not in client_files: Control.logger.debug("adding new client file %s", serverFile.name) to_be_installed.append(serverFile.name) elif client_files[key] != serverFile: Control.logger.debug("adding changed client file %s", serverFile.name) to_be_installed.append(serverFile.name) for key in client_files: if key not in server_files: name = client_files[key].name Control.logger.debug("client file %s to be deleted", name) to_be_deleted.append(name) updates = etree.Element("Updates") if to_be_installed: if manifest_name and manifest_name not in to_be_installed: to_be_installed.append(manifest_name) Control.logger.debug("sending %d files to be installed", len(to_be_installed)) zip_file = base64.encodestring(build_zip_file(to_be_installed)) etree.SubElement(updates, "ZipFile", encoding="base64").text = zip_file if to_be_deleted: Control.logger.debug("%d files will be removed", len(to_be_deleted)) deletions = etree.SubElement(updates, "Delete") for name in to_be_deleted: etree.SubElement(deletions, "File").text = name return WebService.Response(updates, Control.logger)