Example #1
0
    def save(self, pypi_version, current_time):
        # type: (str, datetime.datetime) -> None
        # If we do not have a path to cache in, don't bother saving.
        if not self.statefile_path:
            return

        # Check to make sure that we own the directory
        if not check_path_owner(os.path.dirname(self.statefile_path)):
            return

        # Now that we've ensured the directory is owned by this user, we'll go
        # ahead and make sure that all our directories are created.
        ensure_dir(os.path.dirname(self.statefile_path))

        # Attempt to write out our version check file
        with lockfile.LockFile(self.statefile_path):
            if os.path.exists(self.statefile_path):
                with open(self.statefile_path) as statefile:
                    state = json_01.load(statefile)
            else:
                state = {}

            state[sys.prefix] = {
                "last_check": current_time.strftime(SELFCHECK_DATE_FMT),
                "pypi_version": pypi_version,
            }

            with open(self.statefile_path, "w") as statefile:
                json_01.dump(state, statefile, sort_keys=True,
                             separators=(",", ":"))
Example #2
0
 def write(self, path=None, fileobj=None, legacy=False, skip_unknown=True):
     if [path, fileobj].count(None) != 1:
         raise ValueError('Exactly one of path and fileobj is needed')
     self.validate()
     if legacy:
         if self._legacy:
             legacy_md = self._legacy
         else:
             legacy_md = self._to_legacy()
         if path:
             legacy_md.write(path, skip_unknown=skip_unknown)
         else:
             legacy_md.write_file(fileobj, skip_unknown=skip_unknown)
     else:
         if self._legacy:
             d = self._from_legacy()
         else:
             d = self._data
         if fileobj:
             json_01.dump(d,
                          fileobj,
                          ensure_ascii=True,
                          indent=2,
                          sort_keys=True)
         else:
             with codecs.open(path, 'w', 'utf-8') as f:
                 json_01.dump(d,
                              f,
                              ensure_ascii=True,
                              indent=2,
                              sort_keys=True)
Example #3
0
 def end_object(self, obj):
     # self._current has the field data
     indent = self.options.get("indent")
     if not self.first:
         self.stream.write(",")
         if not indent:
             self.stream.write(" ")
     if indent:
         self.stream.write("\n")
     json_01.dump(self.get_dump_object(obj), self.stream,
                  **self.json_kwargs)
     self._current = None
Example #4
0
 def write_json(obj, path, **kwargs):
     with open(path, 'w', encoding='utf-8') as f:
         json_01.dump(obj, f, **kwargs)