Skip to content

Commit 9216a1d

Browse files
committed
a reasonable defafult sort function for data replicas
1 parent f3a4fa7 commit 9216a1d

1 file changed

Lines changed: 18 additions & 3 deletions

File tree

irods/data_object.py

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1+
import ast
2+
import datetime
13
import io
2-
import sys
34
import logging
45
import os
5-
import ast
6+
import sys
67

78
from irods.models import DataObject
89
from 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+
4459
class 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

Comments
 (0)