def replace(self): """ Update an existing CDR document (if not testing). Return True, which is bubbled up to the main loop in `run()`. """ if self.control.opts.test: self.control.logger.info("%s is changed", self.name) return True cdr.checkOutDoc(self.control.session, self.id, force="Y") comment = "Updated by install-docset.py" ctrl = { "DocTitle": self.title } opts = { "type": self.doctype, "encoding": "utf-8", "ctrl": ctrl } opts["id"] = cdr.normalize(self.id) cdr_doc = cdr.Doc(self.xml, **opts) opts = dict(doc=str(cdr_doc), checkIn="Y", ver="Y", comment=comment) opts["publishable"] = self.control.PUBLISHABLE cdr_id = cdr.repDoc(self.control.session, **opts) error = cdr.checkErr(cdr_id) if error: self.control.logger.error(error) sys.exit(1) self.control.logger.info("replaced %s (%s)", self.name, cdr_id) return True
def main(): parser = create_parser() opts = parser.parse_args() title = opts.title if not title: parser.error("empty title argument") if not isinstance(title, unicode): title = unicode(title.strip(), "latin-1") if "--" in title: parser.error("filter title cannot contain --") if not opts.session: password = getpass.getpass() session = cdr.login(opts.user, password, tier="PROD") error = cdr.checkErr(session) if error: parser.error(error) else: session = opts.session stub = u"""\ <?xml version="1.0" ?> <!-- Filter title: {} --> <xsl:transform xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" xmlns:cdr = "cips.nci.nih.gov/cdr" version = "1.0"> <xsl:output method = "xml" encoding = "utf-8"/> <xsl:param name = "sample-param" select = "'default-value'"/> <!-- Sample template --> <xsl:template match = "@*|node()"> <xsl:copy> <xsl:apply-templates select = "@*|node()"/> </xsl:copy> </xsl:template> </xsl:transform> """.format(escape(title)).encode("utf-8") title = title.encode("utf-8") ctrl = dict(DocTitle=title) doc_opts = dict(doctype="Filter", ctrl=ctrl, encoding="utf-8") doc = cdr.Doc(stub, **doc_opts) cdr_id = cdr.addDoc(session, doc=str(doc), tier="PROD") error = cdr.checkErr(cdr_id) if error: parser.error(error) response = cdr.unlock(session, cdr_id, tier="PROD") error = cdr.checkErr(response) if error: parser.error(error) name = cdr_id + ".xml" with open(name, "wb") as fp: fp.write(stub) print(("Created {}".format(name))) if not opts.session: cdr.logout(session, tier="PROD")
def main(): """ Top-level entry point """ # Process the command-line arguments. parser = create_parser() opts = parser.parse_args() # Make sure we're not doing this on the production server. if not opts.tier and cdr.isProdHost() or opts.tier == "PROD": parser.error(""" This program can only be used to install a filter on the development or test server, not production. Use CreateFilter.py to create the filter in the production database, then use InstallFilter.py to install it in test or development with the same title/name and (almost certainly) a different local CDR ID. """) # If we don't already have a session ID, make one. if not opts.session: password = getpass.getpass() session = cdr.login(opts.user, password, tier=opts.tier) error = cdr.checkErr(session) if error: parser.error(error) else: session = opts.session # Load the document. info = DocInfo(opts.filename, parser) # Make sure the filter isn't already installed info.check_unique_title(opts.tier, parser) # All checks passed: add the document. ctrl = dict(DocTitle=info.title.encode("utf-8")) doc = cdr.Doc(info.xml, doctype="Filter", ctrl=ctrl, encoding="utf-8") comment = "New filter install" add_opts = dict(doc=str(doc), comment=comment, tier=opts.tier) cdr_id = cdr.addDoc(session, **add_opts) error = cdr.checkErr(cdr_id) if error: parser.error(error) # Unlock the document and display its ID. response = cdr.unlock(session, cdr_id, tier=opts.tier) error = cdr.checkErr(response) if error: parser.error(error) else: print(cdr_id)
def add(self): """ Add the document to the CDR repository (if not testing). Return True, which is bubbled up to the main loop in `run()`. """ if self.control.opts.test: self.control.logger.info("%s is new", self.name) return True comment = "Added by install-docset.py" ctrl = { "DocTitle": self.title } opts = { "type": self.doctype, "encoding": "utf-8", "ctrl": ctrl } cdr_doc = cdr.Doc(self.xml, **opts) opts = dict(doc=str(cdr_doc), checkIn="Y", ver="Y", comment=comment) opts["publishable"] = self.control.PUBLISHABLE cdr_id = cdr.addDoc(self.control.session, **opts) error = cdr.checkErr(cdr_id) if error: self.control.logger.error(error) sys.exit(1) self.control.logger.info("added %s as %s", self.name, cdr_id) return True
def create(self): """ Create a new CDR Term document for the concept. Return: cdr.Doc object for a new CDR Term document """ code = self.concept.code cdr_id = self.lookup(code) if cdr_id: Concept.fail("%s already imported as CDR%d" % (code, cdr_id)) root = etree.Element("Term", nsmap=self.NSMAP) node = etree.SubElement(root, "PreferredName") node.text = self.concept.preferred_name nodes = {} for name in self.OTHER_NAMES: for other_name in getattr(self.concept, name): if other_name.include: key = Concept.normalize(other_name.name) if key not in nodes: nodes[key] = other_name.convert(self.concept.code) for key in sorted(nodes): root.append(nodes[key]) done = set() for definition in self.concept.definitions: if definition.source == "NCI": key = Concept.normalize(definition.text) if key not in done: root.append(definition.convert()) done.add(key) term_type = etree.SubElement(root, "TermType") etree.SubElement(term_type, "TermTypeName").text = "Index term" etree.SubElement(root, "TermStatus").text = "Unreviewed" code = etree.SubElement(root, "NCIThesaurusConcept", Public="Yes") code.text = self.concept.code return cdr.Doc(etree.tostring(root, pretty_print=True), doctype="Term")
raise Exception("Can't have more than one sweep spec document") # If the document already exists, create a new version if result: doc_id = result[0].docId args = dict(checkout="Y", getObject=True, tier=opts.tier) doc = cdr.getDoc(opts.session, doc_id, **args) error_message = cdr.checkErr(doc) if error_message: parser.error(error_message) doc.xml = xml save_opts["doc"] = str(doc) doc_id, warnings = cdr.repDoc(opts.session, **save_opts) # Otherwise, create the document (with a first version) else: doc = cdr.Doc(xml, doctype, encoding="utf-8") save_opts["doc"] = str(doc) doc_id, warnings = cdr.addDoc(opts.session, **save_opts) # Let the user know how things went if warnings: print((doc_id and "WARNINGS" or "ERRORS")) for error in cdr.getErrors(warnings, asSequence=True): print((" -->", error)) if not doc_id: print("*** DOCUMENT NOT SAVED ***") else: versions = cdr.lastVersions(opts.session, doc_id, tier=opts.tier) print(("Saved {} as version {}".format(doc_id, versions[0])))