Change serialization backend from pickle to json
This commit is contained in:
		@@ -3,9 +3,8 @@
 | 
				
			|||||||
.. module:: rbackup.struct.hierarchy
 | 
					.. module:: rbackup.struct.hierarchy
 | 
				
			||||||
    :synopsis: Classes for creating the backup hierarchy.
 | 
					    :synopsis: Classes for creating the backup hierarchy.
 | 
				
			||||||
"""
 | 
					"""
 | 
				
			||||||
 | 
					import json
 | 
				
			||||||
import logging
 | 
					import logging
 | 
				
			||||||
import pickle
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
from os import PathLike
 | 
					from os import PathLike
 | 
				
			||||||
from pathlib import Path
 | 
					from pathlib import Path
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -14,8 +13,8 @@ syslog = logging.getLogger(__name__)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# ========== Constants ==========
 | 
					# ========== Constants ==========
 | 
				
			||||||
METADATA_READ = "rb"
 | 
					METADATA_READ = "r"
 | 
				
			||||||
METADATA_WRITE = "wb"
 | 
					METADATA_WRITE = "w"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# ========== Classes ==========
 | 
					# ========== Classes ==========
 | 
				
			||||||
@@ -101,22 +100,25 @@ class Hierarchy(PathLike):
 | 
				
			|||||||
        """Read this repository's metadata from its file and
 | 
					        """Read this repository's metadata from its file and
 | 
				
			||||||
        then return it.
 | 
					        then return it.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        :rtype: dict
 | 
					        :rtype: type that the data is serialized as
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
        syslog.debug(f"Reading metadata from {self.metadata_path}")
 | 
					        syslog.debug(f"Reading metadata from {self.metadata_path}")
 | 
				
			||||||
        with self.metadata_path.open(mode=METADATA_READ) as mfile:
 | 
					        with self.metadata_path.open(mode=METADATA_READ) as mfile:
 | 
				
			||||||
            return pickle.load(mfile)
 | 
					            return json.load(mfile)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def write_metadata(self):
 | 
					    def write_metadata(self, attr):
 | 
				
			||||||
        """Write this repository's metadata to its file.
 | 
					        """Write this repository's metadata to its file.
 | 
				
			||||||
            Note that this write operation is atomic to the caller.
 | 
					            Note that this write operation is atomic to the caller.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        :param attr: data to write to file
 | 
				
			||||||
 | 
					        :type attr: class member to write
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
        syslog.debug(f"Writing metadata to {self.metadata_path}")
 | 
					        syslog.debug(f"Writing metadata to {self.metadata_path}")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        tmpfile = self.metadata_path.with_suffix(".tmp")
 | 
					        tmpfile = self.metadata_path.with_suffix(".tmp")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        with tmpfile.open(mode=METADATA_WRITE) as mfile:
 | 
					        with tmpfile.open(mode=METADATA_WRITE) as mfile:
 | 
				
			||||||
            pickle.dump(self._data, mfile)
 | 
					            json.dump(attr, mfile)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        tmpfile.rename(self.metadata_path)
 | 
					        tmpfile.rename(self.metadata_path)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,4 @@
 | 
				
			|||||||
import doctest
 | 
					import json
 | 
				
			||||||
import unittest
 | 
					import unittest
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from hypothesis import given
 | 
					from hypothesis import given
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user