File size: 982 Bytes
c8e5eaa
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
"""可选发布请求身份;只提供现存内容记录范围内的重复创建确认。"""
import hashlib
import json
import re


def publication_identity(kind, account, key):
    if key is None:
        return None
    if kind not in {'post', 'prompt'} or not isinstance(account, str) or not account:
        raise ValueError('invalid publication owner')
    if not isinstance(key, str) or re.fullmatch(r'[0-9a-f]{32}', key) is None:
        raise ValueError('invalid publication key')
    data = json.dumps([kind, account, key], ensure_ascii=False, separators=(',', ':')).encode('utf-8')
    return f'{kind}_publish_{hashlib.sha256(data).hexdigest()}'


def same_publication(existing, incoming, fields):
    def content(record):
        return json.dumps({field: record.get(field) for field in fields}, ensure_ascii=False,
                          sort_keys=True, separators=(',', ':'), allow_nan=False)
    return content(existing) == content(incoming)