Beispiel #1
0
def group_by_date(results):
    grouped_results = OrderedDict()
    grouped_results['today'] = []
    grouped_results['yesterday'] = []
    grouped_results['this_week'] = []
    grouped_results['this_month'] = []
    grouped_results['older'] = []

    today = datetime.today().day
    yesterday = (datetime.today() - timedelta(1)).day
    this_week = int(datetime.today().strftime("%V"))  # isoweek
    this_month = datetime.today().month
    this_year = datetime.today().year

    for result in results:
        modified = result.modified
        if modified.month() == this_month and modified.year() == this_year:
            if modified.day() == today:
                grouped_results['today'].append(result)
            elif modified.day() == yesterday:
                grouped_results['yesterday'].append(result)
            elif int(modified.strftime("%V")) == this_week:
                grouped_results['this_week'].append(result)
            else:
                grouped_results['this_month'].append(result)
        else:
            grouped_results['older'].append(result)
    return grouped_results.items()
Beispiel #2
0
    def scenariosByCategory(self):
        """ prepare scenarios in this folder """
        scitems = self.context.objectValues('Scenario')
        categories = [item.getAccident_category().strip() for item in scitems]
        categories.sort()

        scmap = OrderedDict()

        for cat in categories:
            scmap[cat] = []
        
        for item in scitems:
            cat = item.getAccident_category().strip()
            
            # save the english cat equivalents for later lookup to enable the schwusch anchors
            ccat = item.getCanonical().getAccident_category().strip()
            self._en_catnames[cat] = ccat
            
            scs = scmap.get(cat)
            scs.append(item)
            scmap[cat] = scs
            
        return scmap
        
        
Beispiel #3
0
    def activity(self):
        query=dict(
                path="/".join(self.context.getPhysicalPath()),
                start=dict(query=[self.start, self.end], range="minmax"),
                portal_type="ExtropyHours",
                sort_on="start",
                sort_order="descending")

        if self.person!="all":
            query["Creator"]=self.person

        data=[self.MorphHourBrain(brain) for brain in self.tool(query)]

        grouping = dict(project=lambda x: x["chain"][0]["title"],
                        person=lambda x: x["fullname"],
                        day=lambda x: x["start"].earliestTime(),
                        )

        results=OrderedDict()
        keyfunc=grouping.get(self.group_by, grouping["day"])
        for booking in data:
            key=keyfunc(booking)
            if key not in results:
                results[key]=[]
            results[key].append(booking)

        results=[dict(title=key, summary=self.summarize(value), bookings=value)
                        for (key, value) in results.items()]
        if self.group_by != "day":
            results.sort(key=lambda x: x["title"])

        return results
Beispiel #4
0
def getSchemata(obj):
    """Returns an ordered dictionary, which maps all Schemata names to fields
    that belong to the Schemata."""

    schema = obj.Schema()
    schemata = OrderedDict()
    for f in schema.fields():
        sub = schemata.get(f.schemata, WrappedSchemata(name=f.schemata))
        sub.addField(f)
        schemata[f.schemata] = sub.__of__(obj)

    return schemata
def getSchemata(obj):
    """Returns an ordered dictionary, which maps all Schemata names to fields
    that belong to the Schemata."""

    schema = obj.Schema()
    schemata = OrderedDict()
    for f in schema.fields():
        sub = schemata.get(f.schemata, WrappedSchemata(name=f.schemata))
        sub.addField(f)
        schemata[f.schemata] = sub.__of__(obj)

    return schemata
    def __init__(self, results, context, request):
        """Take the results and the request.
        """
        self.context = context
        self.results = results
        self.currentresults = []
        self.pagemap = OrderedDict()
        self.request = request
        self.showBatch = True

        if len(results) < self.threshold:
            self.showBatch = False
            self.currentresults = results
        else:
            self.initialize()
    def get_header_info(self,
                        fields,
                        request,
                        context,
                        from_addr=None,
                        to_addr=None,
                        subject=None):
        """Return header info

        header info is a dictionary

        Keyword arguments:
        request -- (optional) alternate request object to use
        """
        portal = getToolByName(context, 'portal_url').getPortalObject()
        utils = getToolByName(context, 'plone_utils')
        (to, from_addr, reply) = self.get_addresses(fields, request, context)
        subject = self.get_subject(fields, request, context)

        headerinfo = OrderedDict()

        headerinfo['To'] = self.secure_header_line(to)
        headerinfo['From'] = self.secure_header_line(from_addr)
        if reply:
            headerinfo['Reply-To'] = self.secure_header_line(reply)

        # transform subject into mail header encoded string
        email_charset = portal.getProperty('email_charset', 'utf-8')

        if not isinstance(subject, unicode):
            site_charset = utils.getSiteEncoding()
            subject = unicode(subject, site_charset, 'replace')

        msgSubject = self.secure_header_line(subject).encode(
            email_charset, 'replace')
        msgSubject = str(Header(msgSubject, email_charset))
        headerinfo['Subject'] = msgSubject

        # CC
        cc_recips = filter(None, self.cc_recipients)
        if hasattr(self, 'ccOverride') and self.ccOverride and get_expression(
                context, self.ccOverride):
            cc_recips = get_expression(context, self.ccOverride)
        if cc_recips:
            headerinfo['Cc'] = self._destFormat(cc_recips)

        # BCC
        bcc_recips = filter(None, self.bcc_recipients)
        if hasattr(self,
                   'bccOverride') and self.bccOverride and get_expression(
                       context, self.bccOverride):
            bcc_recips = get_expression(context, self.bccOverride)
        if bcc_recips:
            headerinfo['Bcc'] = self._destFormat(bcc_recips)

        for key in getattr(self, 'xinfo_headers', []):
            headerinfo['X-{0}'.format(key)] = self.secure_header_line(
                request.get(key, 'MISSING'))

        return headerinfo
Beispiel #8
0
 def getOrder(self, original):
     neworder = OrderedDict()
     keys = original.keys()
     last = keys.pop()
     keys.insert(1, last)
     for schemata in keys:
         neworder[schemata] = original[schemata]
     return neworder
 def testSwapTwoSchemata(self):
     schema = ManagedSchema()
     schema.addField(MockField("one", "one"))
     schema.addField(MockField("two", "two"))
     command = OrderedDict()
     command["two"] = ["two"]
     command["one"] = ["one"]
     set_schema_order(schema, command)
     self.assertEqual(schema.getSchemataNames(), ["two", "one"])
Beispiel #10
0
def lookupVocabulary(context, field):
    if IVocabulary.providedBy(field.vocabulary):
        return field.vocabulary.getVocabularyDict(context)
    else:
        vocab = field.Vocabulary(context)
        tree = OrderedDict()
        for key in vocab:
            tree[key] = vocab.getValue(key)
        return tree
Beispiel #11
0
    def _getUntranslatedVocabularyDict(self):
        """returns a vocabulary dictionary as defined in the interface
        """
        vdict = OrderedDict()

        for obj in self.contentValues():
            vsubdict = obj._getUntranslatedVocabularyDict()
            vdict[obj.getVocabularyKey()] = ( \
                obj.getVocabularyValue(), vsubdict)
        return vdict
Beispiel #12
0
def get_schema_order(schema):
    """Return the order of all schemata and their fields.

    The ordering is returned as an OrderedList for schemata
    with the schemata names as keys fields names as values.
    """
    result = OrderedDict()
    for name in schema.getSchemataNames():
        fields = schema.getSchemataFields(name)
        result[name] = list(x.getName() for x in fields)
    return result
 def getOrder(self, original):
      res = OrderedDict()
      
      # Make "default" come first:          
      res['default'] = original['default']
      del original['default']
      
      # Go through any extensions:
      schematas = []
      for name, extension in component.getAdapters((self, self.context),
                                                   IEventSchemaExtension):
           schematas.extend(extension.getOrders())
      schematas.sort()
      for order, schemata in schematas:
           res[schemata] = original[schemata]
           del original[schemata]
      
      # And tag on anything left over:
      res.update(original)
      self._order = res
      return res
def show_project_membership(self):
    portal = getToolByName(self, 'portal_url').getPortalObject()
    result_map = OrderedDict()
    pfolder = portal.projects
    proj_ids = list(pfolder.objectIds(spec='OpenProject'))
    proj_ids.sort()
    for proj_id in proj_ids:
        proj_map = result_map[proj_id] = OrderedDict()
        proj = pfolder._getOb(proj_id)
        mem_ids = list(proj.projectMemberIds())
        mem_ids.sort()
        for mem_id in mem_ids:
            proj_map[mem_id] = proj.get_local_roles_for_userid(mem_id)

    out = ""
    for proj_id, proj_map in result_map.items():
        out += "PROJECT: %s\n" % proj_id
        for mem_id, mem_roles in proj_map.items():
            out +="\t%s: %s\n" % (mem_id, str(mem_roles))
        out += "\n"

    return out
 def __init__(self, results, context, request):
     """Take the results and the request.
     """
     self.context = context
     self.results = results
     self.currentresults = []
     self.pagemap = OrderedDict()
     self.request = request
     self.showBatch = True
             
     if len(results) < self.threshold:
         self.showBatch = False
         self.currentresults = results
     else:
         self.initialize()
Beispiel #16
0
    def _getTranslatedVocabularyDict(self, lang):
        """returns a vocabulary dict using the titles of the
        translations for language ``lang``

        Only canonical objects are used to build up this
        dictionary. If available, the translation's titles
        are used.
        """
        vdict = OrderedDict()

        for obj in self.contentValues():
            if obj.isCanonical():
                # we only add the canonical objects to this dict
                key = obj.getTermKey()
                # but use the title of the appropriate translation
                # if it is available (getTermValue is LP aware)
                vsubdict = obj._getTranslatedVocabularyDict(lang)
                vdict[key] = (obj.getTermValue(lang=lang), vsubdict)
        return vdict
Beispiel #17
0
    def _get_issues(self):
        " fetch all oshmail issues "
        folder = self.context.data.oshmail
        pc = self.context.portal_catalog
        yearmap = dict()
        allissues = []
        latestissue = None

        for issue in pc(portal_type='Collage', review_state="published"):
            if not 'oshmail' in issue['getId']:
                continue
            # Don't list OSHMails that are both expired and outdated,
            # aka "deleted"
            if getattr(issue, 'outdated', False) and isExpired(issue):
                continue
            date = issue['effective']
            if latestissue is None or date > latestissue['effective']:
                latestissue = issue
            (name, num) = issue['getId'].split('-')
            yearlist = yearmap.get(date.year(), [])
            yearlist.append((int(num),
                             dict(id=issue['getId'],
                                  day=date.Day(),
                                  month=date.Month(),
                                  year=date.year(),
                                  url=issue.getURL(),
                                  title=issue['Title'])))

            yearmap[date.year()] = yearlist

        ordered_yearmap = OrderedDict()
        years = yearmap.keys()
        years.sort()
        years.reverse()
        for year in years:
            yearlist = yearmap[year]
            yearlist.sort()
            yearlist.reverse()
            ordered_yearmap[year] = yearlist

        return latestissue, ordered_yearmap
Beispiel #18
0
    def getVocabularyDict(self, instance=None):
        """Returns a vocabulary dictionary as defined in the interface
        """

        if self.isLinguaPloneInstalled():
            # if lp is installed
            # obtain language and return translated dict
            try:
                # we use the language of instance for this dictionary
                lang = instance.getLanguage()
            except AttributeError:
                # we retrieve the current language
                langtool = getToolByName(self, 'portal_languages')
                lang = langtool.getPreferredLanguage()
            return self._getTranslatedVocabularyDict(lang)
        else:
            # just return all terms
            vdict = OrderedDict()
            for obj in self.contentValues():
                vdict[obj.getTermKey()] = obj.getTermValue()
            return vdict
Beispiel #19
0
    def sortByDate(self, competitions):
        yearmap = dict()
        for competition in competitions:
            date = competition.effective()
            yearlist = yearmap.get(date.year(), [])
            yearlist.append((
                date.month(),
                dict(id=competition.getId(),
                     url=competition.absolute_url(),
                     title=competition.Title()),
            ))
            yearmap[date.year()] = yearlist

        ordered_yearmap = OrderedDict()
        keys = yearmap.keys()
        keys.sort()
        keys.reverse()
        for year in keys:
            yearlist = yearmap[year]
            yearlist.sort()
            yearlist.reverse()
            ordered_yearmap[year] = yearlist

        return ordered_yearmap
    # See CMFPlone/tests/dummy.py for faking a FileField
    return "Created %d PHC Videos." % i


def CreateTestData(self, portal):
    out = []
    out.append(CreateRootPHC(self, portal))
    out.append(CreateUsers(self, portal))
    out.append(CreateHowtos(self, portal))
    out.append(CreateTutorials(self, portal))
    out.append(CreateFaqs(self, portal))
    out.append(CreateErrorRefs(self, portal))
    out.append(CreateDefinitions(self, portal))
    out.append(CreateLinks(self, portal))
    out.append(CreateReferenceManuals(self, portal))
    out.append(CreateVideos(self, portal))
    return '  \n'.join(out)

functions = OrderedDict()
functions['Create Test Data'] = CreateTestData
functions['Create Test Users'] = CreateUsers
functions['Create Test PloneHelpCenter'] = CreateRootPHC
functions['Create Test Tutorials'] = CreateTutorials
functions['Create Test Howtos'] = CreateHowtos
functions['Create Test FAQs'] = CreateFaqs
functions['Create Test Error References'] = CreateReferenceManuals
functions['Create Test Definitions'] = CreateDefinitions
functions['Create Test Links'] = CreateLinks
functions['Create Test Reference Manuals'] = CreateReferenceManuals
functions['Create Test Videos'] = CreateVideos
Beispiel #21
0
    def get_header_body_tuple(self,
                              fields,
                              request,
                              from_addr=None,
                              to_addr=None,
                              subject=None,
                              **kwargs):
        """Return header and body of e-mail as an 3-tuple:
        (header, additional_header, body)

        header is a dictionary, additional header is a list, body is a StringIO

        Keyword arguments:
        request -- (optional) alternate request object to use
        """

        pprops = getToolByName(self, 'portal_properties')
        site_props = getToolByName(pprops, 'site_properties')
        portal = getToolByName(self, 'portal_url').getPortalObject()
        pms = getToolByName(self, 'portal_membership')
        utils = getToolByName(self, 'plone_utils')

        body = self.get_mail_body(fields, **kwargs)

        # fields = self.fgFields()

        # get Reply-To
        reply_addr = None
        if shasattr(self, 'replyto_field'):
            reply_addr = request.form.get(self.replyto_field, None)

        # get subject header
        nosubject = '(no subject)'
        if shasattr(self, 'subjectOverride') and self.getRawSubjectOverride():
            # subject has a TALES override
            subject = self.getSubjectOverride().strip()
        else:
            subject = getattr(self, 'msg_subject', nosubject)
            subjectField = request.form.get(self.subject_field, None)
            if subjectField is not None:
                subject = subjectField
            else:
                # we only do subject expansion if there's no field chosen
                subject = self._dreplace(subject)

        # Get From address
        if shasattr(self, 'senderOverride') and self.getRawSenderOverride():
            from_addr = self.getSenderOverride().strip()
        else:
            from_addr = from_addr or site_props.getProperty('email_from_address') or \
                        portal.getProperty('email_from_address')

        # Get To address and full name
        if shasattr(self,
                    'recipientOverride') and self.getRawRecipientOverride():
            recip_email = self.getRecipientOverride()
        else:
            recip_email = None
            if shasattr(self, 'to_field'):
                recip_email = request.form.get(self.to_field, None)
            if not recip_email:
                recip_email = self.recipient_email
        recip_email = self._destFormat(recip_email)

        recip_name = self.recipient_name.encode('utf-8')

        # if no to_addr and no recip_email specified, use owner adress if possible.
        # if not, fall back to portal email_from_address.
        # if still no destination, raise an assertion exception.
        if not recip_email and not to_addr:
            ownerinfo = self.getOwner()
            ownerid = ownerinfo.getId()
            fullname = ownerid
            userdest = pms.getMemberById(ownerid)
            if userdest is not None:
                fullname = userdest.getProperty('fullname', ownerid)
            toemail = ''
            if userdest is not None:
                toemail = userdest.getProperty('email', '')
            if not toemail:
                toemail = portal.getProperty('email_from_address')
            assert toemail, """
                    Unable to mail form input because no recipient address has been specified.
                    Please check the recipient settings of the PloneFormGen "Mailer" within the
                    current form folder.
                """
            to = formataddr((fullname, toemail))
        else:
            to = to_addr or '%s %s' % (recip_name, recip_email)

        headerinfo = OrderedDict()

        headerinfo['To'] = self.secure_header_line(to)
        headerinfo['From'] = self.secure_header_line(from_addr)
        if reply_addr:
            headerinfo['Reply-To'] = self.secure_header_line(reply_addr)

        # transform subject into mail header encoded string
        email_charset = portal.getProperty('email_charset', 'utf-8')

        if not isinstance(subject, unicode):
            site_charset = utils.getSiteEncoding()
            subject = unicode(subject, site_charset, 'replace')

        msgSubject = self.secure_header_line(subject).encode(
            email_charset, 'replace')
        msgSubject = str(Header(msgSubject, email_charset))
        headerinfo['Subject'] = msgSubject

        # CC
        cc_recips = filter(None, self.cc_recipients)
        if shasattr(self, 'ccOverride') and self.getRawCcOverride():
            cc_recips = self.getCcOverride()
        if cc_recips:
            headerinfo['Cc'] = self._destFormat(cc_recips)

        # BCC
        bcc_recips = filter(None, self.bcc_recipients)
        if shasattr(self, 'bccOverride') and self.getRawBccOverride():
            bcc_recips = self.getBccOverride()
        if bcc_recips:
            headerinfo['Bcc'] = self._destFormat(bcc_recips)

        for key in getattr(self, 'xinfo_headers', []):
            headerinfo['X-%s' % key] = self.secure_header_line(
                request.get(key, 'MISSING'))

        # return 3-Tuple
        return (headerinfo, self.additional_headers, body)
    <field>
      <name>%(name)s</name>
%(properties)s %(widget)s
    </field>
"""

XML_WIDGET = u"""
    <widget>
%(properties)s
    </widget>
"""

TEXT_FIELD_CONTENT_TYPES = ( 'text/plain', 'text/html', )

# init routines for field,widget and storage management
field_registry = OrderedDict()
widget_registry = OrderedDict()
storage_registry = OrderedDict()

for k, v in FIELD_REGISTRY_INFO:
    field_registry[k] = v

for k, v in WIDGET_REGISTRY_INFO:
    widget_registry[k] = v

for k, v in STORAGE_REGISTRY_INFO:
    storage_registry[k] = v

# support for ATReferenceBrowserWidget
HAS_ATREF_WIDGET = False
try:
class AlphaBatch(object):
    """Object used to batch results alphabetically.
    """
    
    security = ClassSecurityInfo()
    
    JOKER = '*'

    vocab = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
             'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
             JOKER]
             
    threshold = 30
    
    
    def __init__(self, results, context, request):
        """Take the results and the request.
        """
        self.context = context
        self.results = results
        self.currentresults = []
        self.pagemap = OrderedDict()
        self.request = request
        self.showBatch = True
                
        if len(results) < self.threshold:
            self.showBatch = False
            self.currentresults = results
        else:
            self.initialize()
    
    def initialize(self):
        """Initialize this batch object.
        """
        current = self.request.get('currentPage', None)
        pointer = 0
        hasResults = len(self.results)
        nonresults = []

        for term in self.vocab:
            
            # full init for term
            self.pagemap[term] = dict()
            self.pagemap[term]['value'] = term
            self.pagemap[term]['visible'] = False
            self.pagemap[term]['current'] = False
            
            # special handling for joker
            if term == self.JOKER:
                continue

            # assume alpha sorted results here
            for result in self.results[pointer:]:                
                title = safe_unicode(result['fullname']).upper()
                # title.replace(u'ü',u'Ü')
                # title.replace(u'ö',u'Ö')
                # title.replace(u'ä',u'Ä')
                
                currentTerm = title and title[0] or None
                if currentTerm is None or currentTerm not in self.vocab:
                    nonresults.append(result)
                    pointer += 1
                    continue
                
                if title.startswith(term):
                    self.pagemap[term]['visible'] = True
                    if current is None:
                        current = term
                    if term == current:
                        self.currentresults.append(result)
                    pointer += 1
                else:
                    break
            
            # check for current after processing
            if term == current:
                self.pagemap[term]['current'] = True

        if nonresults:
            self.pagemap[self.JOKER]['visible'] = True
        if current == '*':
            self.currentresults = nonresults
            self.pagemap[self.JOKER]['current'] = True
            
    
    security.declarePublic('showBatch') 
    def showBatch(self):
        """Return True if results reaches threshold.
        """
        return self.showBatch
    
    security.declarePublic('getPages')    
    def getPages(self):
        """Return a list of dicts containing page definitions.
        """
        return self.pagemap.values()
    
    security.declarePublic('getResults')
    def getResults(self):
        """Return the current result.
        """
        return self.currentresults
Beispiel #24
0
class OrderedDictTest(ATTestCase):

    def afterSetUp(self):
        self.d = OrderedDict()
        self.d['a'] = '1'
        self.d['b'] = '2'
        self.d['c'] = '3'

    def test_order(self):
        self.assertTrue(self.d.keys() == ['a', 'b', 'c'])
        self.assertTrue(self.d.values() == ['1', '2', '3'])
        self.assertTrue(self.d.items() == [('a', '1'), ('b', '2'), ('c', '3')])
        self.assertTrue(self.d.reverse() == [
                        ('c', '3'), ('b', '2'), ('a', '1')])

    def test_setitem(self):
        self.d['d'] = '4'
        self.assertTrue(self.d.keys() == ['a', 'b', 'c', 'd'])
        self.assertTrue(self.d.values() == ['1', '2', '3', '4'])
        self.assertTrue(self.d.items() == [
                        ('a', '1'), ('b', '2'), ('c', '3'), ('d', '4')])
        self.assertTrue(self.d.reverse() == [
                        ('d', '4'), ('c', '3'), ('b', '2'), ('a', '1')])

        self.d['c'] = 'C'
        self.assertTrue(self.d.keys() == ['a', 'b', 'c', 'd'])
        self.assertTrue(self.d.values() == ['1', '2', 'C', '4'])
        self.assertTrue(self.d.items() == [
                        ('a', '1'), ('b', '2'), ('c', 'C'), ('d', '4')])
        self.assertTrue(self.d.reverse() == [
                        ('d', '4'), ('c', 'C'), ('b', '2'), ('a', '1')])

    def test_del(self):
        del self.d['b']
        self.assertTrue(self.d.keys() == ['a', 'c'])
        self.assertTrue(self.d.values() == ['1', '3'])
        self.assertTrue(self.d.items() == [('a', '1'), ('c', '3')])
        self.assertTrue(self.d.reverse() == [('c', '3'), ('a', '1')])
        self.assertTrue('b' not in self.d)
        self.assertTrue(self.d.get('b', None) == None)

    def test_clear(self):
        self.d.clear()
        self.assertTrue(self.d.keys() == [])
        self.assertTrue(self.d.values() == [])
        self.assertTrue(self.d.items() == [])
        self.assertTrue(self.d.reverse() == [])

    def test_update(self):
        d2 = {'b': 'B', 'd': '4'}
        self.d.update(d2)
        self.assertTrue(self.d.keys() == ['a', 'b', 'c', 'd'])
        self.assertTrue(self.d.values() == ['1', 'B', '3', '4'])
        self.assertTrue(self.d.items() == [
                        ('a', '1'), ('b', 'B'), ('c', '3'), ('d', '4')])
        self.assertTrue(self.d.reverse() == [
                        ('d', '4'), ('c', '3'), ('b', 'B'), ('a', '1')])

    def test_popitem(self):
        (k, v) = self.d.popitem()
        self.assertTrue(k == 'c')
        self.assertTrue(v == '3')
Beispiel #25
0
 def afterSetUp(self):
     self.d = OrderedDict()
     self.d['a'] = '1'
     self.d['b'] = '2'
     self.d['c'] = '3'
class AlphaBatch(object):
    """Object used to batch results alphabetically.
    """

    security = ClassSecurityInfo()

    JOKER = '*'

    vocab = [
        'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N',
        'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', JOKER
    ]

    threshold = 30

    def __init__(self, results, context, request):
        """Take the results and the request.
        """
        self.context = context
        self.results = results
        self.currentresults = []
        self.pagemap = OrderedDict()
        self.request = request
        self.showBatch = True

        if len(results) < self.threshold:
            self.showBatch = False
            self.currentresults = results
        else:
            self.initialize()

    def initialize(self):
        """Initialize this batch object.
        """
        current = self.request.get('currentPage', None)
        pointer = 0
        hasResults = len(self.results)
        nonresults = []

        for term in self.vocab:

            # full init for term
            self.pagemap[term] = dict()
            self.pagemap[term]['value'] = term
            self.pagemap[term]['visible'] = False
            self.pagemap[term]['current'] = False

            # special handling for joker
            if term == self.JOKER:
                continue

            # assume alpha sorted results here
            for result in self.results[pointer:]:
                title = safe_unicode(result['fullname']).upper()
                # title.replace(u'ü',u'Ü')
                # title.replace(u'ö',u'Ö')
                # title.replace(u'ä',u'Ä')

                currentTerm = title and title[0] or None
                if currentTerm is None or currentTerm not in self.vocab:
                    nonresults.append(result)
                    pointer += 1
                    continue

                if title.startswith(term):
                    self.pagemap[term]['visible'] = True
                    if current is None:
                        current = term
                    if term == current:
                        self.currentresults.append(result)
                    pointer += 1
                else:
                    break

            # check for current after processing
            if term == current:
                self.pagemap[term]['current'] = True

        if nonresults:
            self.pagemap[self.JOKER]['visible'] = True
        if current == '*':
            self.currentresults = nonresults
            self.pagemap[self.JOKER]['current'] = True

    security.declarePublic('showBatch')

    def showBatch(self):
        """Return True if results reaches threshold.
        """
        return self.showBatch

    security.declarePublic('getPages')

    def getPages(self):
        """Return a list of dicts containing page definitions.
        """
        return self.pagemap.values()

    security.declarePublic('getResults')

    def getResults(self):
        """Return the current result.
        """
        return self.currentresults
Beispiel #27
0
 def getOrder(self, original):
     neworder = OrderedDict()
     for schemata in original.keys():
         neworder[schemata] = original[schemata]
     return neworder
Beispiel #28
0
class OrderedDictTest(ATTestCase):

    def afterSetUp(self):
        self.d = OrderedDict()
        self.d['a'] = '1'
        self.d['b'] = '2'
        self.d['c'] = '3'

    def test_order(self):
        self.assertTrue(self.d.keys() == ['a', 'b', 'c'])
        self.assertTrue(self.d.values() == ['1', '2', '3'])
        self.assertTrue(self.d.items() == [('a', '1'), ('b', '2'), ('c', '3')])
        self.assertTrue(self.d.reverse() == [('c', '3'), ('b', '2'), ('a', '1')])

    def test_setitem(self):
        self.d['d'] = '4'
        self.assertTrue(self.d.keys() == ['a', 'b', 'c', 'd'])
        self.assertTrue(self.d.values() == ['1', '2', '3', '4'])
        self.assertTrue(self.d.items() == [('a', '1'), ('b', '2'), ('c', '3'), ('d', '4')])
        self.assertTrue(self.d.reverse() == [('d', '4'), ('c', '3'), ('b', '2'), ('a', '1')])

        self.d['c'] = 'C'
        self.assertTrue(self.d.keys() == ['a', 'b', 'c', 'd'])
        self.assertTrue(self.d.values() == ['1', '2', 'C', '4'])
        self.assertTrue(self.d.items() == [('a', '1'), ('b', '2'), ('c', 'C'), ('d', '4')])
        self.assertTrue(self.d.reverse() == [('d', '4'), ('c', 'C'), ('b', '2'), ('a', '1')])

    def test_del(self):
        del self.d['b']
        self.assertTrue(self.d.keys() == ['a', 'c'])
        self.assertTrue(self.d.values() == ['1', '3'])
        self.assertTrue(self.d.items() == [('a', '1'), ('c', '3')])
        self.assertTrue(self.d.reverse() == [('c', '3'), ('a', '1')])
        self.assertTrue('b' not in self.d)
        self.assertTrue(self.d.get('b', None) == None)

    def test_clear(self):
        self.d.clear()
        self.assertTrue(self.d.keys() == [])
        self.assertTrue(self.d.values() == [])
        self.assertTrue(self.d.items() == [])
        self.assertTrue(self.d.reverse() == [])

    def test_update(self):
        d2 = {'b': 'B', 'd': '4'}
        self.d.update(d2)
        self.assertTrue(self.d.keys() == ['a', 'b', 'c', 'd'])
        self.assertTrue(self.d.values() == ['1', 'B', '3', '4'])
        self.assertTrue(self.d.items() == [('a', '1'), ('b', 'B'), ('c', '3'), ('d', '4')])
        self.assertTrue(self.d.reverse() == [('d', '4'), ('c', '3'), ('b', 'B'), ('a', '1')])

    def test_popitem(self):
        (k, v) = self.d.popitem()
        self.assertTrue(k == 'c')
        self.assertTrue(v == '3')
Beispiel #29
0
 def afterSetUp(self):
     self.d = OrderedDict()
     self.d['a'] = '1'
     self.d['b'] = '2'
     self.d['c'] = '3'
Beispiel #30
0
 def _getTranslatedVocabularyDict(self, lang):
     vdict = OrderedDict()
     for obj in self.contentValues():
         vdict[obj.getTermKey()] = obj.getTermValue(lang)
     return vdict