예제 #1
0
파일: ddict_t.py 프로젝트: perrozzi/DAS
    def test_DotDict_keys(self):
        """Test DotDict get_keys method"""
        res = {'a': [{'b': 1, 'c': 1}, {'c': 2}]}
        mdict = DotDict(res)
        expect = ['a.b', 'a.c']
        result = [r for r in mdict.get_keys('a')]
        self.assertEqual(set(expect), set(result))

        res = {
            'a': [{
                'b': [{
                    'c': 2
                }, {
                    'c': {
                        'd': 1
                    }
                }]
            }, {
                'b': [{
                    'c': 4
                }, {
                    'c': 5
                }]
            }]
        }
        mdict = DotDict(res)
        expect = ['a.b', 'a.b.c', 'a.b.c.d']
        result = [r for r in mdict.get_keys('a')]
        self.assertEqual(set(expect), set(result))
예제 #2
0
파일: ddict_t.py 프로젝트: dmwm/DAS
    def test_DotDict_keys(self):
        """Test DotDict get_keys method"""
        res = {'a':[{'b':1, 'c':1}, {'c':2}]}
        mdict = DotDict(res)
        expect = ['a.b', 'a.c']
        result = [r for r in mdict.get_keys('a')]
        self.assertEqual(set(expect), set(result))

        res = {'a':[{'b': [{'c':2}, {'c':{'d':1}}]},
                    {'b': [{'c':4}, {'c':5}]}]}
        mdict = DotDict(res)
        expect = ['a.b', 'a.b.c', 'a.b.c.d']
        result = [r for r in mdict.get_keys('a')]
        self.assertEqual(set(expect), set(result))
예제 #3
0
 def fltpage(self, row):
     """Prepare filter snippet for a given query"""
     rowkeys = []
     page = ''
     if  row and row.has_key('das') and row['das'].has_key('primary_key'):
         pkey = row['das']['primary_key']
         if  pkey and (isinstance(pkey, str) or isinstance(pkey, unicode)):
             try:
                 mkey = pkey.split('.')[0]
                 if  isinstance(row[mkey], list):
                     # take first five or less entries from the list to cover
                     # possible aggregated records and extract row keys
                     lmax    = len(row[mkey]) if len(row[mkey]) < 5 else 5
                     sublist = [row[mkey][i] for i in range(0, lmax)]
                     ndict   = DotDict({mkey:sublist})
                     rowkeys = [k for k in ndict.get_keys(mkey)]
                 else:
                     rowkeys = [k for k in DotDict(row).get_keys(mkey)]
                 rowkeys.sort()
                 rowkeys += ['das.conflict']
                 dflt = das_filters() + das_aggregators()
                 dflt.remove('unique')
                 page = self.templatepage('das_filters', \
                         filters=dflt, das_keys=rowkeys)
             except Exception as exc:
                 msg = "Fail to pkey.split('.') for pkey=%s" % pkey
                 print msg
                 print_exc(exc)
                 pass
     return page
예제 #4
0
파일: ddict_t.py 프로젝트: perrozzi/DAS
    def test_get_keys(self):
        """test get_keys method"""
        rec = DotDict(self.rec1)
        expect = ['a', 'a.b', 'a.c']
        expect.sort()
        result = rec.get_keys()
        result.sort()
        self.assertEqual(expect, result)

        rec = DotDict(self.rec2)
        result = rec.get_keys()
        result.sort()
        self.assertEqual(expect, result)

        doc = {
            "site": [{
                "mapping": {
                    "pfn": [{
                        "protocol": "direct",
                        "result": "/store/$1",
                        "path": "/+hadoop/cms/store/(.*)"
                    }, {
                        "protocol": "direct",
                        "result": "/store/$1",
                        "path": "/+hadoop/cms/store/(.*)"
                    }]
                }
            }]
        }
        result = DotDict(doc).get_keys()
        result.sort()
        expect = [
            'site', 'site.mapping', 'site.mapping.pfn',
            'site.mapping.pfn.path', 'site.mapping.pfn.protocol',
            'site.mapping.pfn.result'
        ]
        self.assertEqual(expect, result)
예제 #5
0
파일: ddict_t.py 프로젝트: dmwm/DAS
    def test_get_keys(self):
        """test get_keys method"""
        rec = DotDict(self.rec1)
        expect = ['a', 'a.b', 'a.c']
        expect.sort()
        result = rec.get_keys()
        result.sort()
        self.assertEqual(expect, result)

        rec = DotDict(self.rec2)
        result = rec.get_keys()
        result.sort()
        self.assertEqual(expect, result)

        doc = {"site": [{"mapping": { "pfn": [
                    {
                     "protocol": "direct",
                     "result": "/store/$1",
                     "path": "/+hadoop/cms/store/(.*)"
                    },
                    {
                     "protocol": "direct",
                     "result": "/store/$1",
                     "path": "/+hadoop/cms/store/(.*)"
                    }]
                }}]
        }
        result = DotDict(doc).get_keys()
        result.sort()
        expect = ['site',
                  'site.mapping',
                  'site.mapping.pfn',
                  'site.mapping.pfn.path',
                  'site.mapping.pfn.protocol',
                  'site.mapping.pfn.result']
        self.assertEqual(expect, result)
예제 #6
0
파일: utils.py 프로젝트: zdenekmaxa/DAS
def fix_times(row):
    "Convert creation/modification times into DAS time format"
    rec = DotDict(row)
    times = ['creation_time', 'modification_time', 'create_time', 'end_time']
    def callback(elem, key):
#        print "\n### callback", key, elem
        val = elem[key]
        if  val:
            elem[key] = presentation_datetime(val)
    for key in rec.get_keys():
        if  key.find('creation_time') != -1 or \
            key.find('modification_time') != -1 or \
            key.find('start_time') != -1 or \
            key.find('end_time') != -1:
            rec.set_values(key, callback)
예제 #7
0
 def get_result_fieldlist(self, row):
     rowkeys = []
     if  row and 'das' in row  and 'primary_key' in row['das']:
         pkey = row['das']['primary_key']
         if  pkey and (isinstance(pkey, str) or isinstance(pkey, unicode)):
             try:
                 mkey = pkey.split('.')[0]
                 if  mkey not in row:
                     return []
                 if  isinstance(row[mkey], list):
                     # take first five or less entries from the list to cover
                     # possible aggregated records and extract row keys
                     ndict   = DotDict({mkey: row[mkey][:10]})
                     rowkeys = list(ndict.get_keys(mkey))
                 else:
                     rowkeys = list(DotDict(row).get_keys(mkey))
                 rowkeys.sort()
                 rowkeys += ['das.conflict']
             except Exception as exc:
                 # TODO: pkey.split fail only if called on non-string
                 msg = "Fail to pkey.split('.') for pkey=%s" % pkey
                 print msg
                 print_exc(exc)
     return rowkeys
예제 #8
0
 def get_result_fieldlist(self, row):
     rowkeys = []
     if  row and 'das' in row  and 'primary_key' in row['das']:
         pkey = row['das']['primary_key']
         if  pkey and (isinstance(pkey, str) or isinstance(pkey, unicode)):
             try:
                 mkey = pkey.split('.')[0]
                 if  mkey not in row:
                     return []
                 if  isinstance(row[mkey], list):
                     # take first five or less entries from the list to cover
                     # possible aggregated records and extract row keys
                     ndict   = DotDict({mkey: row[mkey][:10]})
                     rowkeys = list(ndict.get_keys(mkey))
                 else:
                     rowkeys = list(DotDict(row).get_keys(mkey))
                 rowkeys.sort()
                 rowkeys += ['das.conflict']
             except Exception as exc:
                 # TODO: pkey.split fail only if called on non-string
                 msg = "Fail to pkey.split('.') for pkey=%s" % pkey
                 print(msg)
                 print_exc(exc)
     return rowkeys