summaryrefslogtreecommitdiffstats
path: root/testing/condprofile/condprof/metadata.py
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 19:33:14 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 19:33:14 +0000
commit36d22d82aa202bb199967e9512281e9a53db42c9 (patch)
tree105e8c98ddea1c1e4784a60a5a6410fa416be2de /testing/condprofile/condprof/metadata.py
parentInitial commit. (diff)
downloadfirefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.tar.xz
firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.zip
Adding upstream version 115.7.0esr.upstream/115.7.0esrupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'testing/condprofile/condprof/metadata.py')
-rw-r--r--testing/condprofile/condprof/metadata.py83
1 files changed, 83 insertions, 0 deletions
diff --git a/testing/condprofile/condprof/metadata.py b/testing/condprofile/condprof/metadata.py
new file mode 100644
index 0000000000..4d03e57f6f
--- /dev/null
+++ b/testing/condprofile/condprof/metadata.py
@@ -0,0 +1,83 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+""" Manages a metadata file.
+"""
+import datetime
+import json
+import os
+from collections.abc import MutableMapping
+
+from condprof.util import logger
+
+METADATA_NAME = "condprofile.json"
+
+
+class Metadata(MutableMapping):
+ """dict-like class that holds metadata for a profile."""
+
+ def __init__(self, profile_dir):
+ self.metadata_file = os.path.join(profile_dir, METADATA_NAME)
+ logger.info("Reading existing metadata at %s" % self.metadata_file)
+ if not os.path.exists(self.metadata_file):
+ logger.info("Could not find the metadata file in that profile")
+ self._data = {}
+ else:
+ with open(self.metadata_file) as f:
+ self._data = json.loads(f.read())
+
+ def __getitem__(self, key):
+ return self._data[self.__keytransform__(key)]
+
+ def __setitem__(self, key, value):
+ self._data[self.__keytransform__(key)] = value
+
+ def __delitem__(self, key):
+ del self._data[self.__keytransform__(key)]
+
+ def __iter__(self):
+ return iter(self._data)
+
+ def __len__(self):
+ return len(self._data)
+
+ def __keytransform__(self, key):
+ return key
+
+ def _days2age(self, days):
+ if days < 7:
+ return "days"
+ if days < 30:
+ return "weeks"
+ if days < 30 * 6:
+ return "months"
+ return "old" # :)
+
+ def _delta(self, created, updated):
+ created = created[:26]
+ updated = updated[:26]
+ # tz..
+ format = "%Y-%m-%d %H:%M:%S.%f"
+ created = datetime.datetime.strptime(created, format)
+ updated = datetime.datetime.strptime(updated, format)
+ delta = created - updated
+ return delta.days
+
+ def write(self, **extras):
+ # writing metadata
+ logger.info("Creating metadata...")
+ self._data.update(**extras)
+ ts = str(datetime.datetime.now())
+ if "created" not in self._data:
+ self._data["created"] = ts
+ self._data["updated"] = ts
+ # XXX need android arch version here
+ days = self._delta(self._data["created"], self._data["updated"])
+ self._data["days"] = days
+ self._data["age"] = self._days2age(days)
+ # adding info about the firefox version
+ # XXX build ID ??
+ # XXX android ??
+ logger.info("Saving metadata file in %s" % self.metadata_file)
+ with open(self.metadata_file, "w") as f:
+ f.write(json.dumps(self._data))