1+ import ast
2+ import datetime
13import io
2- import sys
34import logging
45import os
5- import ast
6+ import sys
67
78from irods .models import DataObject
89from irods .meta import iRODSMetaCollection
@@ -41,6 +42,20 @@ def __repr__(self):
4142 return "<{}.{} {}>" .format (self .__class__ .__module__ , self .__class__ .__name__ , self .resource_name )
4243
4344
45+ _REPL_STATUSES = (1 , 0 , 2 , 3 , 4 )
46+ _REFERENCE_DATETIME = datetime .datetime (1970 , 1 , 1 , 0 , 0 , 0 , tzinfo = datetime .timezone .utc )
47+
48+ def _DEFAULT_SORT_KEY_FN (row ):
49+ repl_status = int (row [DataObject .replica_status ])
50+
51+ repl_status_rank = (
52+ _REPL_STATUSES .index (repl_status ) if _REPL_STATUSES .count (repl_status )
53+ else sys .maxsize
54+ )
55+
56+ return (repl_status_rank , _REFERENCE_DATETIME - row [DataObject .modify_time ])
57+
58+
4459class iRODSDataObject :
4560 def __init__ (self , manager , parent = None , results = None ):
4661 self .manager = manager
@@ -54,7 +69,7 @@ def __init__(self, manager, parent=None, results=None):
5469 # backward compatibility with older schema versions
5570 pass
5671 self .path = self .collection .path + "/" + self .name
57- replicas = sorted (results , key = lambda r : r [ DataObject . replica_number ] )
72+ replicas = sorted (results , key = _DEFAULT_SORT_KEY_FN )
5873
5974 # The status quo before iRODS 5
6075
0 commit comments