Metadata-Version: 2.1
Name: chatora.mmid
Version: 0.1
Summary: Python helper libraries for MMID.
Home-page: https://github.com/takaomag/chatora.mmid
Author: Takao Magoori
Author-email: takaomag@users.noreply.github.com
Maintainer: Takao Magoori
Maintainer-email: takaomag@users.noreply.github.com
License: MIT
Download-URL: https://github.com/takaomag/chatora.mmid/releases
Project-URL: source code, https://github.com/takaomag/chatora.mmid
Project-URL: issues, https://github.com/takaomag/chatora.mmid/issues
Project-URL: documentation, https://github.com/takaomag/chatora.mmid/blob/master/README.md
Keywords: MMID,UUID
Platform: UNKNOWN
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: Other Environment
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Natural Language :: English
Classifier: Operating System :: POSIX :: Linux
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Requires-Python: >=3.7
Description-Content-Type: text/markdown
Requires-Dist: setuptools (>=40.6.3)
Requires-Dist: pip (>=18.1)
Requires-Dist: wheel (>=0.32.3)
Requires-Dist: packaging (>=18.0)
Requires-Dist: attrs (>=18.2.0)
Requires-Dist: netaddr (>=0.7.19)
Requires-Dist: plpygis (>=0.1.0)
Requires-Dist: psycopg2 (>=2.7.6.1)
Requires-Dist: simplejson (>=3.16.0)
Requires-Dist: structlog (>=18.2.0)
Requires-Dist: chatora.util (>=0.1.1)
Provides-Extra: dev
Requires-Dist: bumpversion (>=0.5.3) ; extra == 'dev'
Requires-Dist: check-manifest (>=0.37) ; extra == 'dev'
Requires-Dist: colorama (>=0.4.1) ; extra == 'dev'

chatora.mmid
============

Python helper libraries for MMID.
MMID is similar to UUIDv1 but sortable.


## Usage
```python
import datetime
import random
import uuid
from chatora.mmid.api import BaseMMID1


BASE_DT = datetime.datetime(2011, 1, 1, tzinfo=datetime.timezone.utc)


class MMID1v0(BaseMMID1):
    UUID_VERSION = 4
    MMID_VERSION = 0
    TS_BIT_LENGTH = 55
    EPOCH_DT = datetime.datetime(2010, 1, 1, tzinfo=datetime.timezone.utc)


# Construct
assert MMID1v0().version == 4
assert MMID1v0(dt=BASE_DT).dt == MMID1v0(ts=BASE_DT.timestamp()).dt == BASE_DT


# Sortable, which is useful for RDB column index (PostgreSQL UUID/BYTEA, MySQL BINARY).
assert MMID1v0(dt=BASE_DT) < MMID1v0(dt=BASE_DT + datetime.timedelta(days=1))

clock_seq = random.getrandbits(14)
assert MMID1v0(dt=BASE_DT, clock_seq=clock_seq) == MMID1v0(dt=BASE_DT, clock_seq=clock_seq)

# create_min_instance_from_time()/create_max_instance_from_time() may be useful if case of range query on RDB.
assert MMID1v0.create_min_instance_from_time(
    dt=BASE_DT,
) == MMID1v0(hex_='811ed178-c6c0-4000-0000-000000000000')

assert MMID1v0.create_max_instance_from_time(
    dt=BASE_DT,
) == MMID1v0(hex_='811ed178-c6c0-4000-ffff-ffffffffffff')



# Compatible with UUID1
uuid1 = uuid.uuid1()
mmid1v0 = MMID1v0(src_uuid1=uuid1)

assert uuid1 == mmid1v0
assert mmid1v0.uuid1 == uuid1
```


Changelog
=========

0.1 (2019-01-16)
----------------
- Birth!

