am aa771b2c: am 92582aed: am e641e248: Use gcc for mips target.
[platform/upstream/VK-GL-CTS.git] / scripts / khr_util / registry_cache.py
1 # -*- coding: utf-8 -*-
2
3 import os
4 import urllib2
5 import hashlib
6
7 import registry
8
9 BASE_URL = ""
10
11 class RegistrySource:
12         def __init__(self, filename, revision, checksum):
13                 self.filename   = filename
14                 self.revision   = revision
15                 self.checksum   = checksum
16
17         def __hash__(self):
18                 return hash((self.filename, self.revision, self.checksum))
19
20         def __eq__(self, other):
21                 return (self.filename, self.revision, self.checksum) == (other.filename, other.revision, other.checksum)
22
23         def getFilename (self):
24                 return self.filename
25
26         def getCacheFilename (self):
27                 return "r%d-%s" % (self.revision, self.filename)
28
29         def getChecksum (self):
30                 return self.checksum
31
32         def getRevision (self):
33                 return self.revision
34
35         def getSourceUrl (self):
36                 return "https://cvs.khronos.org/svn/repos/ogl/trunk/doc/registry/public/api/%s?r=%d" % (self.filename, self.revision)
37
38 def computeChecksum (data):
39         return hashlib.sha256(data).hexdigest()
40
41 def fetchUrl (url):
42         req             = urllib2.urlopen(url)
43         data    = req.read()
44         return data
45
46 def fetchFile (dstPath, url, checksum):
47         def writeFile (filename, data):
48                 f = open(filename, 'wb')
49                 f.write(data)
50                 f.close()
51
52         if not os.path.exists(os.path.dirname(dstPath)):
53                 os.makedirs(os.path.dirname(dstPath))
54
55         print "Fetching %s" % url
56         data            = fetchUrl(url)
57         gotChecksum     = computeChecksum(data)
58
59         if checksum != gotChecksum:
60                 raise Exception("Checksum mismatch, exepected %s, got %s" % (checksum, gotChecksum))
61
62         writeFile(dstPath, data)
63
64 def checkFile (filename, checksum):
65         def readFile (filename):
66                 f = open(filename, 'rb')
67                 data = f.read()
68                 f.close()
69                 return data
70
71         if os.path.exists(filename):
72                 return computeChecksum(readFile(filename)) == checksum
73         else:
74                 return False
75
76 g_registryCache = {}
77
78 def getRegistry (source):
79         global g_registryCache
80
81         if source in g_registryCache:
82                 return g_registryCache[source]
83
84         cacheDir        = os.path.join(os.path.dirname(__file__), "cache")
85         cachePath       = os.path.join(cacheDir, source.getCacheFilename())
86
87         if not checkFile(cachePath, source.checksum):
88                 fetchFile(cachePath, source.getSourceUrl(), source.getChecksum())
89
90         parsedReg       = registry.parse(cachePath)
91
92         g_registryCache[source] = parsedReg
93
94         return parsedReg