forked from indymedia/epicyon
Fix status number using sequence data
parent
78bb91505a
commit
b0be557047
12
tests.py
12
tests.py
|
@ -41,6 +41,7 @@ from utils import followPerson
|
||||||
from utils import getNicknameFromActor
|
from utils import getNicknameFromActor
|
||||||
from utils import getDomainFromActor
|
from utils import getDomainFromActor
|
||||||
from utils import copytree
|
from utils import copytree
|
||||||
|
from utils import getStatusNumber
|
||||||
from follow import followerOfPerson
|
from follow import followerOfPerson
|
||||||
from follow import unfollowPerson
|
from follow import unfollowPerson
|
||||||
from follow import unfollowerOfPerson
|
from follow import unfollowerOfPerson
|
||||||
|
@ -1426,8 +1427,19 @@ def testAddEmoji():
|
||||||
os.chdir(baseDirOriginal)
|
os.chdir(baseDirOriginal)
|
||||||
shutil.rmtree(baseDirOriginal+'/.tests')
|
shutil.rmtree(baseDirOriginal+'/.tests')
|
||||||
|
|
||||||
|
def testGetStatusNumber():
|
||||||
|
print('testGetStatusNumber')
|
||||||
|
prevStatusNumber=None
|
||||||
|
for i in range(1,20):
|
||||||
|
statusNumber,published = getStatusNumber()
|
||||||
|
if prevStatusNumber:
|
||||||
|
assert len(statusNumber) == 18
|
||||||
|
assert int(statusNumber) > prevStatusNumber
|
||||||
|
prevStatusNumber=int(statusNumber)
|
||||||
|
|
||||||
def runAllTests():
|
def runAllTests():
|
||||||
print('Running tests...')
|
print('Running tests...')
|
||||||
|
testGetStatusNumber()
|
||||||
testAddEmoji()
|
testAddEmoji()
|
||||||
testWebLinks()
|
testWebLinks()
|
||||||
testActorParsing()
|
testActorParsing()
|
||||||
|
|
7
utils.py
7
utils.py
|
@ -18,7 +18,12 @@ def getStatusNumber() -> (str,str):
|
||||||
currTime=datetime.datetime.utcnow()
|
currTime=datetime.datetime.utcnow()
|
||||||
daysSinceEpoch=(currTime - datetime.datetime(1970,1,1)).days
|
daysSinceEpoch=(currTime - datetime.datetime(1970,1,1)).days
|
||||||
# status is the number of seconds since epoch
|
# status is the number of seconds since epoch
|
||||||
statusNumber=str(((daysSinceEpoch*24*60*60) + (currTime.hour*60*60) + (currTime.minute*60) + currTime.second)*1000000 + currTime.microsecond)
|
statusNumber=str(((daysSinceEpoch*24*60*60) + (currTime.hour*60*60) + (currTime.minute*60) + currTime.second)*1000 + int(currTime.microsecond/1000))
|
||||||
|
# See https://github.com/tootsuite/mastodon/blob/995f8b389a66ab76ec92d9a240de376f1fc13a38/lib/mastodon/snowflake.rb
|
||||||
|
# use the leftover microseconds as the sequence number
|
||||||
|
sequenceId=currTime.microsecond % 1000
|
||||||
|
# shift by 16bits "sequence data"
|
||||||
|
statusNumber=str((int(statusNumber)<<16)+sequenceId)
|
||||||
published=currTime.strftime("%Y-%m-%dT%H:%M:%SZ")
|
published=currTime.strftime("%Y-%m-%dT%H:%M:%SZ")
|
||||||
return statusNumber,published
|
return statusNumber,published
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue