def PrintMedia(self, thumbs, mediapath):
        """
        Print some media infos via HTML class (Gramps)
        """

        LOG.info('Looking at media...')

        # Web page filename extensions

        _WEB_EXT = ['.html', '.htm', '.shtml', '.php', '.php3', '.cgi']

        # page title

        title = _('Gallery')

        fname = os.path.join(USER_PLUGINS, 'lxml', _('Gallery.html'))
        of = open(fname, "w")

        LOG.info('Empty "Gallery.hml" file created')

        # htmlinstance = page
        # ignored by current code...

        lang = xml_lang()
        page, head, body = Html.page(title, encoding='utf-8', lang=str(lang))
        head = body = ""

        self.text = []

        self.XHTMLWriter(fname, page, head, body, of, thumbs, mediapath)

        LOG.info('End (Media)')
Exemple #2
0
    def PrintMedia(self, thumbs, mediapath):
        """
        Print some media infos via HTML class (Gramps)
        """

        LOG.info('Looking at media...')

        # Web page filename extensions

        _WEB_EXT = ['.html', '.htm', '.shtml', '.php', '.php3', '.cgi']

        # page title

        title = _('Gallery')

        fname = os.path.join(USER_PLUGINS, 'lxml', _('Gallery.html'))
        of = open(fname, "w")

        LOG.info('Empty "Gallery.hml" file created')

        # htmlinstance = page
        # ignored by current code...

        lang = xml_lang()
        page, head, body = Html.page(title, encoding='utf-8', lang=str(lang))
        head = body = ""

        self.text = []

        self.XHTMLWriter(fname, page, head, body, of, thumbs, mediapath)

        LOG.info('End (Media)')
    def PrintMedia(self, thumbs, mediapath):
        """
        Print some media infos via HTML class (Gramps)
        """

        LOG.info("Looking at media...")

        # Web page filename extensions

        _WEB_EXT = [".html", ".htm", ".shtml", ".php", ".php3", ".cgi"]

        # page title

        title = _("Gallery")

        fname = os.path.join(USER_PLUGINS, "lxml", _("Gallery.html"))
        of = open(fname, "w")

        LOG.info('Empty "Gallery.hml" file created')

        # htmlinstance = page
        # ignored by current code...

        lang = xml_lang()
        page, head, body = Html.page(title, encoding="utf-8", lang=str(lang))
        head = body = ""

        self.text = []

        self.XHTMLWriter(fname, page, head, body, of, thumbs, mediapath)

        LOG.info("End (Media)")
Exemple #4
0
 def open(self):
     """
     overwrite method, htmlbackend creates a html object that is written on
     close
     """
     try:
         DocBackend.open(self)
     except IOError as msg:
         errmsg = "%s\n%s" % (_("Could not create %s") %
                              self._filename, msg)
         raise ReportError(errmsg)
     except:
         raise ReportError(_("Could not create %s") %
                                  self._filename)
     if not os.path.isdir(self.datadirfull()): 
         try:
             os.mkdir(self.datadirfull())
         except IOError as msg:
             errmsg = "%s\n%s" % (_("Could not create %s") %
                                  self.datadirfull(), msg)
             raise ReportError(errmsg)
         except:
             raise ReportError(_("Could not create %s") %
                                      self.datadirfull())
     self.html_page, self.html_header, self.html_body = Html.page(
                     lang=xml_lang(), title=self.title)
Exemple #5
0
    def WriteXML(self, log, first, last, surnames, places, sources):
        """
        Write the result of the query for distributed, shared protocols
        """

        # Custom XML file in buffer

        self.lang = xml_lang()
        self.title = _('I am looking at ...')
        self.footer = _('Content generated by Gramps')
        self.surnames_title = _('Surnames')
        self.places_name = _('Places')
        self.sources_title = _('List of sources')
        time = date.Today()

        xml = etree.Element("query")
        xml.set("lang", self.lang)
        xml.set("title", self.title)
        xml.set("footer", self.footer)
        xml.set("date", gramps.gen.datehandler.displayer.display(time))
        xml.set("first", first)
        xml.set("last", last)

        # only for info

        doc = etree.ElementTree(xml)

        # custom countries list (re-use some Gramps translations ...) ;)

        countries = [
            '',
            _('Australia'),
            _('Brazil'),
            _('Bulgaria'),
            _('Canada'),
            _('Chile'),
            _('China'),
            _('Croatia'),
            _('Czech Republic'),
            _('England'),
            _('Finland'),
            _('France'),
            _('Germany'),
            _('India'),
            _('Japan'),
            _('Norway'),
            _('Portugal'),
            _('Russia'),
            _('Sweden'),
            _('United States of America'),
        ]

        c = etree.SubElement(xml, "clist")
        self.name = _('Name')
        self.country = _('Country')
        c.set("pname", self.name)
        c.set("country", self.country)
        for country in countries:
            c1 = etree.SubElement(c, "country")
            c1.text = country

        # data log

        [(k1, v1), (k2, v2)] = log
        l = etree.SubElement(xml, "log")
        l.set("date", v1)
        l.set("version", v2)

        s = etree.SubElement(xml, "surnames")
        s.set("title", self.surnames_title)

        surnames.sort()
        cnt = []
        for surname in surnames:
            if surname not in cnt:
                s1 = etree.SubElement(s, "surname")
                s1.text = surname
                cnt.append(surname)

        p = etree.SubElement(xml, "places")
        p.set("pname", self.places_name)

        places.sort()
        for place in places:
            p1 = etree.SubElement(p, "place")
            p1.text = place

        src = etree.SubElement(xml, "sources")
        src.set("title", self.sources_title)

        sources.sort()
        for source in sources:
            src1 = etree.SubElement(src, "source")
            src1.text = source

        content = etree.XML(etree.tostring(xml, encoding="UTF-8"))

        # XSLT process

        xslt_doc = etree.parse(
            os.path.join(USER_PLUGINS, 'lxml', 'query_html.xsl'))
        transform = etree.XSLT(xslt_doc)
        outdoc = transform(content)
        #print(type(outdoc))
        html = os.path.join(USER_PLUGINS, 'lxml', 'query.html')
        outfile = open(html, 'w')

        outfile.write(str(outdoc))
        outfile.close()

        # clear the etree

        content.clear()

        # This is the end !

        sys.stdout.write(_('1. Has generated "%s".\n') % html)
        LOG.info(
            _('Try to open\n "%s"\n into your prefered web navigator ...') %
            html)
        display_url(html)
Exemple #6
0
    def ParseXML(self, tree, filename):
        """
        Parse the validated .gramps
        """
        root = tree.getroot()

        # GtkTextView ; buffer limitation ...

        self.text.set_text(_('Parsing file...'))

        #LOG.info(etree.tostring(root, pretty_print=True))

        # namespace issues !

        namespace = root.nsmap

        surname_tag = etree.SubElement(root, NAMESPACE + 'surname')
        pname_tag = etree.SubElement(root, NAMESPACE + 'pname')
        private_surname = config.get('preferences.private-surname-text')
        private_record = config.get('preferences.private-record-text')

        # variable

        expr = "//*[local-name() = $name]"

        # count function
        # float and seems to also count the parent tag: name[0] !

        count_elements = etree.XPath("count(//*[local-name() = $name])")

        # textual children strings function

        desc = etree.XPath('descendant-or-self::text()')

        # TODO: cleanup !
        # quick but not a nice method ...

        msg = []
        #tags = []
        places = []
        sources = []
        surnames = []
        timestamp = []
        thumbs = []

        LOG.info('start iteration')

        for one in root.iter():

            #(tag, item) = one.tag, one.items()
            #print(tag, item)

            for two in one.iter():

                #tags.append(two.tag)

                msg.append(two.items())

                if two.tag == NAMESPACE + 'mediapath':
                    mediapath = two.text
                else:
                    mediapath = ''

                # privacy

                if two.get('priv'):  # XML: optional
                    text = private_record
                else:
                    text = ""

                # search ptitle and time log

                for three in two.iter():

                    # timestamp
                    if two.get('change'):
                        timestamp.append(two.get('change'))

                    # with namespace ...
                    #print(desc(three))
                    (tag, items) = three.tag, three.items()

                    if three.tag == NAMESPACE + 'ptitle':
                        if text != private_record:
                            text = str(three.text)
                        if text not in places:
                            places.append(text)  # temp display
                    if three.tag == NAMESPACE + 'pname':
                        if text != private_record:
                            text = str(three.attrib.get('value'))
                        translation = str(three.attrib.get('lang'))
                        if translation == 'None':
                            translation = xml_lang()[0:2]
                            text = text + _(' - (? or %(lang)s)') % {
                                'lang': translation
                            }
                        else:
                            text = text + _(' - (%(lang)s)') % {
                                'lang': translation
                            }
                        if text not in places:
                            places.append(text)  # temp display
                    if three.tag == NAMESPACE + 'stitle' and three.text not in sources:
                        # need to add an exception
                        if not three.text:
                            three.text = ""
                        sources.append(three.text)
                    if three.tag == NAMESPACE + 'file' and three.items(
                    ) not in thumbs:
                        thumbs.append(three.items())

                    # search last name

                    for four in three.iter():

                        # with namespace ...

                        if four.tag == NAMESPACE + 'surname' and four.text != None:
                            if text != private_record:
                                surnames.append(four.text)
                            else:
                                surnames.append(private_surname)

        LOG.info('end of loops')

        # All tags
        #print(tags)

        # keys, values; no textual data;
        # root child level items as keys for revision control ???
        #revision = msg

        #print(revision)

        log = msg[2]
        if not log:
            ErrorDialog(
                _('Missing header'),
                _('Not a valid .gramps.\n'
                  'Cannot run the gramplet...\n'
                  'Please, try to use a .gramps\n'
                  'generated by Gramps 5.1.'))
            LOG.error('header missing')
            return

        # dirty XML write method ...
        # need to create a fake entry !

        if int(count_elements(root, name='surname')) > 1:
            nb_surnames = int(count_elements(root, name='surname'))
        else:
            nb_surnames = surnames = [_('0')]

        if int(count_elements(root, name='pname')) > 1:
            nb_pnames = int(count_elements(root, name='pname'))
        else:
            nb_pnames = places = [_('0')]

        if int(count_elements(root, name='note')) > 1:
            nb_notes = int(count_elements(root, name='note'))
        else:
            nb_notes = _('0')

        if int(count_elements(root, name='stitle')) > 1:
            nb_sources = int(count_elements(root, name='stitle'))
        else:
            nb_sources = _('0')

        # time logs

        timestamp.sort()
        start = timestamp[0]
        end = timestamp[-1]
        timestamp = []
        first = epoch(start)
        last = epoch(end)

        header = _('File parsed with') + ' LXML' + str(LXML_VERSION) + '\n\n'

        [(k1, v1), (k2, v2)] = log
        file_info = _('File was generated on ') + v1 + '\n\t' + _(
            ' by Gramps ') + v2 + '\n\n'

        period = _('Period: ') + first + ' => ' + last + '\n\n'

        su = '\t' + str(nb_surnames) + '\t' + _(
            ' entries for surname(s); no frequency yet') + '\n'
        p = '\t' + str(nb_pnames) + '\t' + _(' entries for place(s)') + '\n'
        n = '\t' + str(nb_notes) + '\t' + _(' note(s)') + '\n'
        so = '\t' + str(nb_sources) + '\t' + _(' source(s)') + '\n\n'

        counters = su + p + n + so

        libs = 'LIBXML' + str(LIBXML_VERSION) + '\tLIBXSLT' + str(
            LIBXSLT_VERSION)

        # GtkTextView

        self.text.set_text(header + file_info + period + counters + libs)

        LOG.info('### NEW FILES ###')
        LOG.info('content parsed and copied')

        self.WriteXML(log, first, last, surnames, places, sources)

        self.PrintMedia(thumbs, mediapath)
        images = os.path.join(USER_PLUGINS, 'lxml', _('Gallery.html'))
        sys.stdout.write(
            _('2. Has generated a media index on "%(file)s".\n') %
            {'file': images})

        self.WriteBackXML(filename, root, surnames, places, sources)
        sys.stdout.write(
            _('3. Has written entries into "%(file)s".\n') %
            {'file': filename})
    def WriteXML(self, log, first, last, surnames, places, sources):
        """
        Write the result of the query for distributed, shared protocols
        """

        # Custom XML file in buffer

        self.lang = xml_lang()
        self.title = _('I am looking at ...')
        self.footer = _('Content generated by Gramps')
        self.surnames_title = _('Surnames')
        self.places_name = _('Places')
        self.sources_title = _('List of sources')
        time = date.Today()

        xml = etree.Element("query")
        xml.set("lang", self.lang)
        xml.set("title", self.title)
        xml.set("footer", self.footer)
        xml.set("date", gramps.gen.datehandler.displayer.display(time))
        xml.set("first", first)
        xml.set("last", last)

        # only for info

        doc = etree.ElementTree(xml)

        # custom countries list (re-use some Gramps translations ...) ;)

        countries = ['',
                    _('Australia'),
                    _('Brazil'),
                    _('Bulgaria'),
                    _('Canada'),
                    _('Chile'),
                    _('China'),
                    _('Croatia'),
                    _('Czech Republic'),
                    _('England'),
                    _('Finland'),
                    _('France'),
                    _('Germany'),
                    _('India'),
                    _('Japan'),
                    _('Norway'),
                    _('Portugal'),
                    _('Russia'),
                    _('Sweden'),
                    _('United States of America'),
                    ]

        c = etree.SubElement(xml, "clist")
        self.name = _('Name')
        self.country = _('Country')
        c.set("pname", self.name)
        c.set("country", self.country)
        for country in countries:
            c1 = etree.SubElement(c, "country")
            c1.text = country

        # data log

        [(k1, v1),(k2, v2)] = log
        l = etree.SubElement(xml, "log")
        l.set("date", v1)
        l.set("version", v2)

        s = etree.SubElement(xml, "surnames")
        s.set("title", self.surnames_title)

        surnames.sort()
        cnt = []
        for surname in surnames:
            if surname not in cnt:
                s1 = etree.SubElement(s, "surname")
                s1.text = surname
                cnt.append(surname)

        p = etree.SubElement(xml, "places")
        p.set("pname", self.places_name)

        places.sort()
        for place in places:
            p1 = etree.SubElement(p, "place")
            p1.text = place

        src = etree.SubElement(xml, "sources")
        src.set("title", self.sources_title)

        sources.sort()
        for source in sources:
            src1 = etree.SubElement(src, "source")
            src1.text = source

        content = etree.XML(etree.tostring(xml, encoding="UTF-8"))

        # XSLT process

        xslt_doc = etree.parse(os.path.join(USER_PLUGINS, 'lxml', 'query_html.xsl'))
        transform = etree.XSLT(xslt_doc)
        outdoc = transform(content)
        #print(type(outdoc))
        html = os.path.join(USER_PLUGINS, 'lxml', 'query.html')
        outfile = open(html, 'w')

        outfile.write(str(outdoc))
        outfile.close()

        # clear the etree

        content.clear()

        # This is the end !

        sys.stdout.write(_('1. Has generated "%s".\n') % html)
        LOG.info(_('Try to open\n "%s"\n into your prefered web navigator ...') % html)
        display_url(html)