diff options
Diffstat (limited to 'crocoite/util.py')
-rw-r--r-- | crocoite/util.py | 53 |
1 files changed, 32 insertions, 21 deletions
diff --git a/crocoite/util.py b/crocoite/util.py index 3a62533..da377a3 100644 --- a/crocoite/util.py +++ b/crocoite/util.py @@ -22,31 +22,42 @@ Random utility functions """ -import random, sys -import hashlib, os, pkg_resources -from urllib.parse import urlsplit, urlunsplit +import random, sys, platform, os, json, urllib +from datetime import datetime +import hashlib, pkg_resources -def randomString (length=None, chars='abcdefghijklmnopqrstuvwxyz'): - if length is None: - length = random.randint (16, 32) - return ''.join (map (lambda x: random.choice (chars), range (length))) +from yarl import URL -def packageUrl (path): - """ - Create URL for package data stored into WARC - """ - return 'urn:' + __package__ + ':' + path +class StrJsonEncoder (json.JSONEncoder): + """ JSON encoder that turns unknown classes into a string and thus never + fails """ + def default (self, obj): + if isinstance (obj, datetime): + return obj.isoformat () + + # make sure serialization always succeeds + try: + return json.JSONEncoder.default(self, obj) + except TypeError: + return str (obj) -def getFormattedViewportMetrics (tab): - layoutMetrics = tab.Page.getLayoutMetrics () +async def getFormattedViewportMetrics (tab): + layoutMetrics = await tab.Page.getLayoutMetrics () # XXX: I’m not entirely sure which one we should use here - return '{}x{}'.format (layoutMetrics['layoutViewport']['clientWidth'], - layoutMetrics['layoutViewport']['clientHeight']) + viewport = layoutMetrics['layoutViewport'] + return f"{viewport['clientWidth']}x{viewport['clientHeight']}" -def removeFragment (u): - """ Remove fragment from url (i.e. #hashvalue) """ - s = urlsplit (u) - return urlunsplit ((s.scheme, s.netloc, s.path, s.query, '')) +def getSoftwareInfo (): + """ Get software info for inclusion into warcinfo """ + return { + 'platform': platform.platform (), + 'python': { + 'implementation': platform.python_implementation(), + 'version': platform.python_version (), + 'build': platform.python_build () + }, + 'self': getRequirements (__package__) + } def getRequirements (dist): """ Get dependencies of a package. @@ -72,7 +83,7 @@ def getRequirements (dist): pkg = getattr (m, '__package__', None) # is loaded? if pkg in modules: - if f: + if f and os.path.isfile (f): with open (f, 'rb') as fd: contents = fd.read () h = hashlib.new ('sha512') |