示例#1
0
        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
示例#2
0
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")
示例#3
0
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)
示例#4
0
        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
示例#5
0
    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")
示例#6
0
    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])))