Skip to content

Fix module installation - #241

Merged
DifferentialOrange merged 7 commits into
masterfrom
DifferentialOrange/gh-238-fix-install
Oct 14, 2022
Merged

Fix module installation#241
DifferentialOrange merged 7 commits into
masterfrom
DifferentialOrange/gh-238-fix-install

Conversation

@DifferentialOrange

@DifferentialOrangeDifferentialOrange commented Oct 10, 2022

Copy link
Copy Markdown
Member

Part of #238 (required for correct autoversion display)

Refer to commits for detailed info.

This PR fixed installation commands like

pip install git+https://github.com/tarantool/tarantool-python.git@DifferentialOrange/gh-238-fix-install

Before this patch, setup.py missed several requirements and msgpack_ext folder was missing from the package.

@DifferentialOrange
DifferentialOrange changed the base branch from master to DifferentialOrange/gh-67-relevant-docsOctober 10, 2022 13:00
@DifferentialOrange
DifferentialOrangeforce-pushed the DifferentialOrange/gh-238-fix-install branch from 3b54c24 to ed2a329CompareOctober 10, 2022 13:03
@DifferentialOrange
DifferentialOrangeforce-pushed the DifferentialOrange/gh-67-relevant-docs branch from 6619781 to 589d3ffCompareOctober 10, 2022 13:38
@DifferentialOrange
DifferentialOrangeforce-pushed the DifferentialOrange/gh-238-fix-install branch from ed2a329 to 256e653CompareOctober 10, 2022 14:02
Base automatically changed from DifferentialOrange/gh-67-relevant-docs to masterOctober 11, 2022 06:55
@DifferentialOrange
DifferentialOrangeforce-pushed the DifferentialOrange/gh-238-fix-install branch from 256e653 to 2b289daCompareOctober 11, 2022 07:08
@DifferentialOrange
DifferentialOrangeforce-pushed the DifferentialOrange/gh-238-fix-install branch from 2b289da to 8460273CompareOctober 11, 2022 07:30

@oleg-jukovecoleg-jukovec left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We could add test install to CI.

Comment threadsetup.py Outdated
Comment threadsetup.py Outdated
@DifferentialOrange
DifferentialOrangeforce-pushed the DifferentialOrange/gh-238-fix-install branch 5 times, most recently from 79abc97 to 94bbf1eCompareOctober 11, 2022 12:59
@DifferentialOrange

DifferentialOrange commented Oct 11, 2022

Copy link
Copy Markdown
MemberAuthor

We could add test install to CI.

Added in separate commit

UPD: work in progress

UPD2: all issues resolved, ready for review

@DifferentialOrange
DifferentialOrangeforce-pushed the DifferentialOrange/gh-238-fix-install branch 2 times, most recently from 2f59d65 to 370999fCompareOctober 12, 2022 08:33
tarantool:
- '2.10.0.g0a5ce0b9c-1'
python:
- '3.10'

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are there any restrictions on the python version on Windows? Does it need to be documented?

@DifferentialOrangeDifferentialOrangeOct 14, 2022

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Well, there are no restrictions, it's more like "test only minimal required" since Windows pipelines are rather long and GitHub provides less Windows runners than Linux runners.

@oleg-jukovecoleg-jukovecOct 14, 2022

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think then we need to add 3.6 (3.6, 3.10) since we claim it as a minimal supported version.

Anyway, a short comment will look good here, but up to you.

@DifferentialOrangeDifferentialOrangeOct 14, 2022

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That's a good comment, added.

Package dependencies in setup.py is outdated.
Part of #238
Modern Python expects package name instead of full folder path [1].
1. https://docs.python.org/3/distutils/setupscript.html#listing-whole-packages
Part of #238
Windows ``pip install`` resulted in missing msgpack_ext folder scripts.
Package finder together with empty inits fixes it.
Part of #238
GitHub actions clone the repo for test files, install current branch
module with pip and run unittest (same as ran under setup.py) tests.
"Run tests" stage is full of ResourceWarning messages. It's not clear
why these messages are suppressed by `setup.py test`. We also can't
disable these warning separately from application warnings (some tests
rely on application warnings).
Part of #238
@DifferentialOrange
DifferentialOrangeforce-pushed the DifferentialOrange/gh-238-fix-install branch from 370999f to c3d45e4CompareOctober 14, 2022 07:59
@DifferentialOrange
DifferentialOrange merged commit a94f97c into masterOct 14, 2022
@DifferentialOrange
DifferentialOrange deleted the DifferentialOrange/gh-238-fix-install branch October 14, 2022 08:24
DifferentialOrange added a commit that referenced this pull request Nov 9, 2022
Overview
This release introduces the support of extention types (decimal, uuid,
error, datetime, interval) in MessagePack, various IProto features
support (feature discovery and push protocol) and major infrastructure
updates (scm version computation, full documentation for external and
internal API both as code docstrings and readthedocs HTML, deb and RPM
packages, and everything is processed with CI/CD pipelines).
Breaking changes
This release should not break any existing behavior.
New features
- Backport ConnectionPool support for Python 3.6 (PR #245).
- Support iproto feature discovery (#206).
- Decimal type support (#203).
- UUID type support (#202).
- Support extra information for iproto errors (#232).
- Error extension type support (#232).
- Datetime type support and tarantool.Datetime type (#204, PR #252).
Tarantool datetime objects are decoded to `tarantool.Datetime`
type. `tarantool.Datetime` may be encoded to Tarantool datetime
objects.
You can create `tarantool.Datetime` objects either from
MessagePack data or by using the same API as in Tarantool:
```python
dt1 = tarantool.Datetime(year=2022, month=8, day=31,
hour=18, minute=7, sec=54,
nsec=308543321)
dt2 = tarantool.Datetime(timestamp=1661969274)
dt3 = tarantool.Datetime(timestamp=1661969274, nsec=308543321)
```
`tarantool.Datetime` exposes `year`, `month`, `day`, `hour`,
`minute`, `sec`, `nsec`, `timestamp` and `value` (integer epoch time
with nanoseconds precision) properties if you need to convert
`tarantool.Datetime` to any other kind of datetime object:
```python
pdt = pandas.Timestamp(year=dt.year, month=dt.month, day=dt.day,
hour=dt.hour, minute=dt.minute, second=dt.sec,
microsecond=(dt.nsec // 1000),
nanosecond=(dt.nsec % 1000))
```
Use `tzoffset` parameter to set up offset timezone:
```python
dt = tarantool.Datetime(year=2022, month=8, day=31,
hour=18, minute=7, sec=54,
nsec=308543321, tzoffset=180)
```
You may use `tzoffset` property to get timezone offset of a datetime
object.
Use `tz` parameter to set up timezone name:
```python
dt = tarantool.Datetime(year=2022, month=8, day=31,
hour=18, minute=7, sec=54,
nsec=308543321, tz='Europe/Moscow')
```
If both `tz` and `tzoffset` is specified, `tz` is used.
You may use `tz` property to get timezone name of a datetime object.
`timestamp_since_utc_epoch` is a parameter to set timestamp
convertion behavior for timezone-aware datetimes.
If ``False`` (default), behaves similar to Tarantool `datetime.new()`:
```python
>>> dt = tarantool.Datetime(timestamp=1640995200, timestamp_since_utc_epoch=False)
>>> dt
datetime: Timestamp('2022-01-01 00:00:00'), tz: ""
>>> dt.timestamp
1640995200.0
>>> dt = tarantool.Datetime(timestamp=1640995200, tz='Europe/Moscow',
... timestamp_since_utc_epoch=False)
>>> dt
datetime: Timestamp('2022-01-01 00:00:00+0300', tz='Europe/Moscow'), tz: "Europe/Moscow"
>>> dt.timestamp
1640984400.0
```
Thus, if ``False``, datetime is computed from timestamp
since epoch and then timezone is applied without any
convertion. In that case, `dt.timestamp` won't be equal to
initialization `timestamp` for all timezones with non-zero offset.
If ``True``, behaves similar to `pandas.Timestamp`:
```python
>>> dt = tarantool.Datetime(timestamp=1640995200, timestamp_since_utc_epoch=True)
>>> dt
datetime: Timestamp('2022-01-01 00:00:00'), tz: ""
>>> dt.timestamp
1640995200.0
>>> dt = tarantool.Datetime(timestamp=1640995200, tz='Europe/Moscow',
... timestamp_since_utc_epoch=True)
>>> dt
datetime: Timestamp('2022-01-01 03:00:00+0300', tz='Europe/Moscow'), tz: "Europe/Moscow"
>>> dt.timestamp
1640995200.0
```
Thus, if ``True``, datetime is computed in a way that `dt.timestamp`
will always be equal to initialization `timestamp`.
- Datetime interval type support and tarantool.Interval type (#229).
Tarantool datetime interval objects are decoded to
`tarantool.Interval` type. `tarantool.Interval` may be encoded to
Tarantool interval objects.
You can create `tarantool.Interval` objects either from
MessagePack data or by using the same API as in Tarantool:
```python
di = tarantool.Interval(year=-1, month=2, day=3,
hour=4, minute=-5, sec=6,
nsec=308543321,
adjust=tarantool.IntervalAdjust.NONE)
```
Its attributes (same as in init API) are exposed, so you can
use them if needed.
- Datetime interval arithmetic support (#229).
Valid operations:
- `tarantool.Datetime` + `tarantool.Interval` = `tarantool.Datetime`
- `tarantool.Datetime` - `tarantool.Interval` = `tarantool.Datetime`
- `tarantool.Datetime` - `tarantool.Datetime` = `tarantool.Interval`
- `tarantool.Interval` + `tarantool.Interval` = `tarantool.Interval`
- `tarantool.Interval` - `tarantool.Interval` = `tarantool.Interval`
Since `tarantool.Interval` could contain `month` and `year` fields
and such operations could be ambiguous, you can use `adjust` field
to tune the logic. The behavior is the same as in Tarantool, see
[Interval arithmetic RFC](https://github.com/tarantool/tarantool/wiki/Datetime-Internals#interval-arithmetic).
- `tarantool.IntervalAdjust.NONE` -- only truncation toward the end
of month performed (default mode).
```python
>>> dt = tarantool.Datetime(year=2022, month=3, day=31)
datetime: Timestamp('2022-03-31 00:00:00'), tz: ""
>>> di = tarantool.Interval(month=1, adjust=tarantool.IntervalAdjust.NONE)
>>> dt + di
datetime: Timestamp('2022-04-30 00:00:00'), tz: ""
```
- `tarantool.IntervalAdjust.EXCESS` -- overflow mode, without any
snap or truncation to the end of month, straight addition of days
in month, stopping over month boundaries if there is less number
of days.
```python
>>> dt = tarantool.Datetime(year=2022, month=1, day=31)
datetime: Timestamp('2022-01-31 00:00:00'), tz: ""
>>> di = tarantool.Interval(month=1, adjust=tarantool.IntervalAdjust.EXCESS)
>>> dt + di
datetime: Timestamp('2022-03-02 00:00:00'), tz: ""
```
- `tarantool.IntervalAdjust.LAST` -- mode when day snaps to the end
of month, if happens.
```python
>>> dt = tarantool.Datetime(year=2022, month=2, day=28)
datetime: Timestamp('2022-02-28 00:00:00'), tz: ""
>>> di = tarantool.Interval(month=1, adjust=tarantool.IntervalAdjust.LAST)
>>> dt + di
datetime: Timestamp('2022-03-31 00:00:00'), tz: ""
```
- Full documentation of internal and external API (#67).
Bugfixes
- Allow any MessagePack supported type as a request key (#240).
- Make connection close idempotent (#250).
Infrastructure
- Use git version to set package version (#238).
- Test pip install from branch (PR #241).
- Pack and publish pip, RPM and deb packages with GitHub Actions
(#164, #198).
- Publish on readthedocs with CI/CD (including PRs) (#67).
@DifferentialOrangeDifferentialOrange mentioned this pull request Nov 9, 2022
DifferentialOrange added a commit that referenced this pull request Nov 9, 2022
Overview
This release introduces the support of extention types (decimal, uuid,
error, datetime, interval) in MessagePack, various IProto features
support (feature discovery and push protocol) and major infrastructure
updates (scm version computation, full documentation for external and
internal API both as code docstrings and readthedocs HTML, deb and RPM
packages, and everything is processed with CI/CD pipelines).
Breaking changes
This release should not break any existing behavior.
New features
- Backport ConnectionPool support for Python 3.6 (PR #245).
- Support iproto feature discovery (#206).
- Decimal type support (#203).
- UUID type support (#202).
- Support extra information for iproto errors (#232).
- Error extension type support (#232).
- Datetime type support and tarantool.Datetime type (#204, PR #252).
Tarantool datetime objects are decoded to `tarantool.Datetime`
type. `tarantool.Datetime` may be encoded to Tarantool datetime
objects.
You can create `tarantool.Datetime` objects either from
MessagePack data or by using the same API as in Tarantool:
```python
dt1 = tarantool.Datetime(year=2022, month=8, day=31,
hour=18, minute=7, sec=54,
nsec=308543321)
dt2 = tarantool.Datetime(timestamp=1661969274)
dt3 = tarantool.Datetime(timestamp=1661969274, nsec=308543321)
```
`tarantool.Datetime` exposes `year`, `month`, `day`, `hour`,
`minute`, `sec`, `nsec`, `timestamp` and `value` (integer epoch time
with nanoseconds precision) properties if you need to convert
`tarantool.Datetime` to any other kind of datetime object:
```python
pdt = pandas.Timestamp(year=dt.year, month=dt.month, day=dt.day,
hour=dt.hour, minute=dt.minute, second=dt.sec,
microsecond=(dt.nsec // 1000),
nanosecond=(dt.nsec % 1000))
```
Use `tzoffset` parameter to set up offset timezone:
```python
dt = tarantool.Datetime(year=2022, month=8, day=31,
hour=18, minute=7, sec=54,
nsec=308543321, tzoffset=180)
```
You may use `tzoffset` property to get timezone offset of a datetime
object.
Use `tz` parameter to set up timezone name:
```python
dt = tarantool.Datetime(year=2022, month=8, day=31,
hour=18, minute=7, sec=54,
nsec=308543321, tz='Europe/Moscow')
```
If both `tz` and `tzoffset` is specified, `tz` is used.
You may use `tz` property to get timezone name of a datetime object.
`timestamp_since_utc_epoch` is a parameter to set timestamp
convertion behavior for timezone-aware datetimes.
If ``False`` (default), behaves similar to Tarantool `datetime.new()`:
```python
>>> dt = tarantool.Datetime(timestamp=1640995200, timestamp_since_utc_epoch=False)
>>> dt
datetime: Timestamp('2022-01-01 00:00:00'), tz: ""
>>> dt.timestamp
1640995200.0
>>> dt = tarantool.Datetime(timestamp=1640995200, tz='Europe/Moscow',
... timestamp_since_utc_epoch=False)
>>> dt
datetime: Timestamp('2022-01-01 00:00:00+0300', tz='Europe/Moscow'), tz: "Europe/Moscow"
>>> dt.timestamp
1640984400.0
```
Thus, if ``False``, datetime is computed from timestamp
since epoch and then timezone is applied without any
convertion. In that case, `dt.timestamp` won't be equal to
initialization `timestamp` for all timezones with non-zero offset.
If ``True``, behaves similar to `pandas.Timestamp`:
```python
>>> dt = tarantool.Datetime(timestamp=1640995200, timestamp_since_utc_epoch=True)
>>> dt
datetime: Timestamp('2022-01-01 00:00:00'), tz: ""
>>> dt.timestamp
1640995200.0
>>> dt = tarantool.Datetime(timestamp=1640995200, tz='Europe/Moscow',
... timestamp_since_utc_epoch=True)
>>> dt
datetime: Timestamp('2022-01-01 03:00:00+0300', tz='Europe/Moscow'), tz: "Europe/Moscow"
>>> dt.timestamp
1640995200.0
```
Thus, if ``True``, datetime is computed in a way that `dt.timestamp`
will always be equal to initialization `timestamp`.
- Datetime interval type support and tarantool.Interval type (#229).
Tarantool datetime interval objects are decoded to
`tarantool.Interval` type. `tarantool.Interval` may be encoded to
Tarantool interval objects.
You can create `tarantool.Interval` objects either from
MessagePack data or by using the same API as in Tarantool:
```python
di = tarantool.Interval(year=-1, month=2, day=3,
hour=4, minute=-5, sec=6,
nsec=308543321,
adjust=tarantool.IntervalAdjust.NONE)
```
Its attributes (same as in init API) are exposed, so you can
use them if needed.
- Datetime interval arithmetic support (#229).
Valid operations:
- `tarantool.Datetime` + `tarantool.Interval` = `tarantool.Datetime`
- `tarantool.Datetime` - `tarantool.Interval` = `tarantool.Datetime`
- `tarantool.Datetime` - `tarantool.Datetime` = `tarantool.Interval`
- `tarantool.Interval` + `tarantool.Interval` = `tarantool.Interval`
- `tarantool.Interval` - `tarantool.Interval` = `tarantool.Interval`
Since `tarantool.Interval` could contain `month` and `year` fields
and such operations could be ambiguous, you can use `adjust` field
to tune the logic. The behavior is the same as in Tarantool, see
[Interval arithmetic RFC](https://github.com/tarantool/tarantool/wiki/Datetime-Internals#interval-arithmetic).
- `tarantool.IntervalAdjust.NONE` -- only truncation toward the end
of month performed (default mode).
```python
>>> dt = tarantool.Datetime(year=2022, month=3, day=31)
datetime: Timestamp('2022-03-31 00:00:00'), tz: ""
>>> di = tarantool.Interval(month=1, adjust=tarantool.IntervalAdjust.NONE)
>>> dt + di
datetime: Timestamp('2022-04-30 00:00:00'), tz: ""
```
- `tarantool.IntervalAdjust.EXCESS` -- overflow mode, without any
snap or truncation to the end of month, straight addition of days
in month, stopping over month boundaries if there is less number
of days.
```python
>>> dt = tarantool.Datetime(year=2022, month=1, day=31)
datetime: Timestamp('2022-01-31 00:00:00'), tz: ""
>>> di = tarantool.Interval(month=1, adjust=tarantool.IntervalAdjust.EXCESS)
>>> dt + di
datetime: Timestamp('2022-03-02 00:00:00'), tz: ""
```
- `tarantool.IntervalAdjust.LAST` -- mode when day snaps to the end
of month, if happens.
```python
>>> dt = tarantool.Datetime(year=2022, month=2, day=28)
datetime: Timestamp('2022-02-28 00:00:00'), tz: ""
>>> di = tarantool.Interval(month=1, adjust=tarantool.IntervalAdjust.LAST)
>>> dt + di
datetime: Timestamp('2022-03-31 00:00:00'), tz: ""
```
- Full documentation of internal and external API (#67).
Bugfixes
- Allow any MessagePack supported type as a request key (#240).
- Make connection close idempotent (#250).
Infrastructure
- Use git version to set package version (#238).
- Test pip install from branch (PR #241).
- Pack and publish pip, RPM and deb packages with GitHub Actions
(#164, #198).
- Publish on readthedocs with CI/CD (including PRs) (#67).
DifferentialOrange added a commit that referenced this pull request Nov 9, 2022
Overview
This release introduces the support of extention types (decimal, uuid,
error, datetime, interval) in MessagePack, various IProto features
support (feature discovery and push protocol) and major infrastructure
updates (scm version computation, full documentation for external and
internal API both as code docstrings and readthedocs HTML, deb and RPM
packages, and everything is processed with CI/CD pipelines).
Breaking changes
This release should not break any existing behavior.
New features
- Backport ConnectionPool support for Python 3.6 (PR #245).
- Support iproto feature discovery (#206).
- Decimal type support (#203).
- UUID type support (#202).
- Support extra information for iproto errors (#232).
- Error extension type support (#232).
- Datetime type support and tarantool.Datetime type (#204, PR #252).
Tarantool datetime objects are decoded to `tarantool.Datetime`
type. `tarantool.Datetime` may be encoded to Tarantool datetime
objects.
You can create `tarantool.Datetime` objects either from
MessagePack data or by using the same API as in Tarantool:
```python
dt1 = tarantool.Datetime(year=2022, month=8, day=31,
hour=18, minute=7, sec=54,
nsec=308543321)
dt2 = tarantool.Datetime(timestamp=1661969274)
dt3 = tarantool.Datetime(timestamp=1661969274, nsec=308543321)
```
`tarantool.Datetime` exposes `year`, `month`, `day`, `hour`,
`minute`, `sec`, `nsec`, `timestamp` and `value` (integer epoch time
with nanoseconds precision) properties if you need to convert
`tarantool.Datetime` to any other kind of datetime object:
```python
pdt = pandas.Timestamp(year=dt.year, month=dt.month, day=dt.day,
hour=dt.hour, minute=dt.minute, second=dt.sec,
microsecond=(dt.nsec // 1000),
nanosecond=(dt.nsec % 1000))
```
Use `tzoffset` parameter to set up offset timezone:
```python
dt = tarantool.Datetime(year=2022, month=8, day=31,
hour=18, minute=7, sec=54,
nsec=308543321, tzoffset=180)
```
You may use `tzoffset` property to get timezone offset of a datetime
object.
Use `tz` parameter to set up timezone name:
```python
dt = tarantool.Datetime(year=2022, month=8, day=31,
hour=18, minute=7, sec=54,
nsec=308543321, tz='Europe/Moscow')
```
If both `tz` and `tzoffset` is specified, `tz` is used.
You may use `tz` property to get timezone name of a datetime object.
`timestamp_since_utc_epoch` is a parameter to set timestamp
convertion behavior for timezone-aware datetimes.
If ``False`` (default), behaves similar to Tarantool `datetime.new()`:
```python
>>> dt = tarantool.Datetime(timestamp=1640995200, timestamp_since_utc_epoch=False)
>>> dt
datetime: Timestamp('2022-01-01 00:00:00'), tz: ""
>>> dt.timestamp
1640995200.0
>>> dt = tarantool.Datetime(timestamp=1640995200, tz='Europe/Moscow',
... timestamp_since_utc_epoch=False)
>>> dt
datetime: Timestamp('2022-01-01 00:00:00+0300', tz='Europe/Moscow'), tz: "Europe/Moscow"
>>> dt.timestamp
1640984400.0
```
Thus, if ``False``, datetime is computed from timestamp
since epoch and then timezone is applied without any
convertion. In that case, `dt.timestamp` won't be equal to
initialization `timestamp` for all timezones with non-zero offset.
If ``True``, behaves similar to `pandas.Timestamp`:
```python
>>> dt = tarantool.Datetime(timestamp=1640995200, timestamp_since_utc_epoch=True)
>>> dt
datetime: Timestamp('2022-01-01 00:00:00'), tz: ""
>>> dt.timestamp
1640995200.0
>>> dt = tarantool.Datetime(timestamp=1640995200, tz='Europe/Moscow',
... timestamp_since_utc_epoch=True)
>>> dt
datetime: Timestamp('2022-01-01 03:00:00+0300', tz='Europe/Moscow'), tz: "Europe/Moscow"
>>> dt.timestamp
1640995200.0
```
Thus, if ``True``, datetime is computed in a way that `dt.timestamp`
will always be equal to initialization `timestamp`.
- Datetime interval type support and tarantool.Interval type (#229).
Tarantool datetime interval objects are decoded to
`tarantool.Interval` type. `tarantool.Interval` may be encoded to
Tarantool interval objects.
You can create `tarantool.Interval` objects either from
MessagePack data or by using the same API as in Tarantool:
```python
di = tarantool.Interval(year=-1, month=2, day=3,
hour=4, minute=-5, sec=6,
nsec=308543321,
adjust=tarantool.IntervalAdjust.NONE)
```
Its attributes (same as in init API) are exposed, so you can
use them if needed.
- Datetime interval arithmetic support (#229).
Valid operations:
- `tarantool.Datetime` + `tarantool.Interval` = `tarantool.Datetime`
- `tarantool.Datetime` - `tarantool.Interval` = `tarantool.Datetime`
- `tarantool.Datetime` - `tarantool.Datetime` = `tarantool.Interval`
- `tarantool.Interval` + `tarantool.Interval` = `tarantool.Interval`
- `tarantool.Interval` - `tarantool.Interval` = `tarantool.Interval`
Since `tarantool.Interval` could contain `month` and `year` fields
and such operations could be ambiguous, you can use `adjust` field
to tune the logic. The behavior is the same as in Tarantool, see
[Interval arithmetic RFC](https://github.com/tarantool/tarantool/wiki/Datetime-Internals#interval-arithmetic).
- `tarantool.IntervalAdjust.NONE` -- only truncation toward the end
of month performed (default mode).
```python
>>> dt = tarantool.Datetime(year=2022, month=3, day=31)
datetime: Timestamp('2022-03-31 00:00:00'), tz: ""
>>> di = tarantool.Interval(month=1, adjust=tarantool.IntervalAdjust.NONE)
>>> dt + di
datetime: Timestamp('2022-04-30 00:00:00'), tz: ""
```
- `tarantool.IntervalAdjust.EXCESS` -- overflow mode, without any
snap or truncation to the end of month, straight addition of days
in month, stopping over month boundaries if there is less number
of days.
```python
>>> dt = tarantool.Datetime(year=2022, month=1, day=31)
datetime: Timestamp('2022-01-31 00:00:00'), tz: ""
>>> di = tarantool.Interval(month=1, adjust=tarantool.IntervalAdjust.EXCESS)
>>> dt + di
datetime: Timestamp('2022-03-02 00:00:00'), tz: ""
```
- `tarantool.IntervalAdjust.LAST` -- mode when day snaps to the end
of month, if happens.
```python
>>> dt = tarantool.Datetime(year=2022, month=2, day=28)
datetime: Timestamp('2022-02-28 00:00:00'), tz: ""
>>> di = tarantool.Interval(month=1, adjust=tarantool.IntervalAdjust.LAST)
>>> dt + di
datetime: Timestamp('2022-03-31 00:00:00'), tz: ""
```
- Full documentation of internal and external API (#67).
Bugfixes
- Allow any MessagePack supported type as a request key (#240).
- Make connection close idempotent (#250).
Infrastructure
- Use git version to set package version (#238).
- Test pip install from branch (PR #241).
- Pack and publish pip, RPM and deb packages with GitHub Actions
(#164, #198).
- Publish on readthedocs with CI/CD (including PRs) (#67).
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@DifferentialOrange@oleg-jukovec