@@ -666,9 +666,9 @@ def _write_audit(self, user, message, changed_version):
666
666
# Create the audit entry
667
667
mongo_retry (self ._audit .insert_one )(audit )
668
668
669
- def snapshot (self , snap_name , metadata = None , skip_symbols = None ):
669
+ def snapshot (self , snap_name , metadata = None , skip_symbols = None , versions = None ):
670
670
"""
671
- Snapshot the current versions of symbols in the library. Can be used like:
671
+ Snapshot versions of symbols in the library. Can be used like:
672
672
673
673
Parameters
674
674
----------
@@ -688,22 +688,23 @@ def snapshot(self, snap_name, metadata=None, skip_symbols=None):
688
688
snapshot = {'_id' : bson .ObjectId ()}
689
689
snapshot ['name' ] = snap_name
690
690
snapshot ['metadata' ] = metadata
691
+
692
+ skip_symbols = set () if skip_symbols is None else set (skip_symbols )
691
693
692
- if skip_symbols is None :
693
- skip_symbols = set ()
694
- else :
695
- skip_symbols = set (skip_symbols )
694
+ if versions is None :
695
+ versions = {sym : None for sym in set (self .list_symbols ()) - skip_symbols }
696
696
697
697
# Loop over, and snapshot all versions except those we've been asked to skip
698
- for sym in set ( self . list_symbols ()) - skip_symbols :
698
+ for sym in versions :
699
699
try :
700
- sym = self ._read_metadata (sym , read_preference = ReadPreference .PRIMARY )
700
+ sym = self ._read_metadata (sym , read_preference = ReadPreference .PRIMARY , as_of = versions [ sym ] )
701
701
# Update the parents field of the version document
702
702
mongo_retry (self ._versions .update_one )({'_id' : sym ['_id' ]},
703
703
{'$addToSet' : {'parent' : snapshot ['_id' ]}})
704
704
except NoDataFoundException :
705
705
# Version has been deleted, not included in the snapshot
706
706
pass
707
+
707
708
mongo_retry (self ._snapshots .insert_one )(snapshot )
708
709
709
710
def delete_snapshot (self , snap_name ):
0 commit comments