def process_node_info(self, request_json): node = Node.query.filter_by(name=request_json['node']).first() if not node: # Add node node = Node(request_json['node']) db.session.add(node) db.session.commit() #add the packages if request_json['packages']: for package in request_json['packages']: if 'sha256' in package.keys() and package['sha256'] != '': # Package sha must be uniqe, so fetch the first object self.create_package(node, package) else: if 'name' in package.keys() and 'version' in package.keys(): hash_contents = ( package['name'] + package['version'] ).encode('utf-8') sha = hashlib.sha256(hash_contents) package['sha256'] = sha.hexdigest() self.create_package(node, package) else: #prepare sha dict pp = {} for p in request_json['packages']: if 'sha256' in p.keys(): sha = p['sha256'] pp[sha] = p to_remove = [] for package in node.packages: if package.sha in pp.keys(): pp.pop(package.sha) else: # Remove the association to_remove.append(package) if to_remove: for r in to_remove: node.packages.remove(r) db.session.commit() # Now we have a list of packages which have been updated # Figure out if we need to update for p in pp: np = pp[p] new_package = Package(p, np['name'], np['version']) # Set extended attributes as well new_package.uri = np['uri'] new_package.architecture = np['architecture'] new_package.provider = np['provider'] new_package.summary = np['summary'] node.packages.append(new_package) db.session.commit() self.store_history(node, new_package) # pass in the dict and not the node object
def create_package(self, node, package): p = Package.query.filter_by(sha=package['sha256']).first() if p: node.packages.append(p) db.session.commit() self.store_history(node, p) else: new_package = Package(package['sha256'], package['name'], package['version']) # Set extended attributes as well new_package.uri = package['uri'] new_package.architecture = package['architecture'] new_package.provider = package['provider'] new_package.summary = package['summary'] node.packages.append(new_package) db.session.add(new_package) db.session.commit() self.store_history(node, new_package)
def process_node_info(request_json): node = Node.query.filter_by(name=request_json['node']).first() if not node: # Add node node = Node(request_json['node']) db.session.add(node) db.session.commit() #add the packages if request_json['packages']: for package in request_json['packages']: if 'sha256' in package.keys(): # Package sha must be uniqe, so fetch the first object p = Package.query.filter_by(sha=package['sha256']).first() if p: node.packages.append(p) db.session.commit() else: new_package = Package(package['sha256'], package['name'], package['version']) # Set extended attributes as well new_package.uri = package['uri'] new_package.architecture = package['architecture'] new_package.provider = package['provider'] new_package.summary = package['summary'] node.packages.append(new_package) db.session.add(new_package) db.session.commit() else: #prepare sha dict pp = {} for p in request_json['packages']: if 'sha256' in p.keys(): sha = p['sha256'] pp[sha] = p for package in node.packages: if package.sha in pp.keys(): pp.pop(package.sha) else: node.packages.remove(package) db.session.commit() # Now we have a list of packages which have been updated # Figure out if we need to update for p in pp: np = pp[p] new_package = Package(p, np['name'], np['version']) # Set extended attributes as well new_package.uri = np['uri'] new_package.architecture = np['architecture'] new_package.provider = np['provider'] new_package.summary = np['summary'] node.packages.append(new_package) db.session.commit()