Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implements IDateRangeIndex to exclude DateRecurringIndex by indexes with value in the keys of the catalog plan #8

Merged
merged 6 commits into from
Jan 13, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 56 additions & 0 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
name: tests

on:
push:
pull_request:
# Allow to run this workflow manually from the Actions tab
workflow_dispatch:

jobs:
build:
strategy:
# We want to see all failures:
fail-fast: false
matrix:
os:
- ubuntu
config:
# [Python version, tox env]
- ["3.9", "lint"]
- ["2.7", "py27"]
- ["3.6", "py36"]
- ["3.7", "py37"]
- ["3.8", "py38"]
- ["3.9", "py39"]
- ["3.10", "py310"]
- ["3.9", "coverage"]

runs-on: ${{ matrix.os }}-latest
name: ${{ matrix.config[1] }}
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: ${{ matrix.config[0] }}
- name: Pip cache
uses: actions/cache@v2
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ matrix.config[0] }}-${{ hashFiles('setup.*', 'tox.ini') }}
restore-keys: |
${{ runner.os }}-pip-${{ matrix.config[0] }}-
${{ runner.os }}-pip-
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install tox
- name: Test
run: tox -e ${{ matrix.config[1] }}
- name: Coverage
if: matrix.config[1] == 'coverage'
run: |
pip install coveralls coverage-python-version
coveralls --service=github
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
10 changes: 7 additions & 3 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
*.egg-info
*.mo
*.py?
.*
dist/
!.gitattributes
!.gitignore
.coverage
.coverage.*
.eggs/
.installed.cfg
.mr.developer.cfg
.tox/
.vscode/
3 changes: 2 additions & 1 deletion CHANGES.rst
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@ Changelog
3.0.2 (unreleased)
------------------

- Nothing changed yet.
- Implements IDateRangeIndex to exclude DateRecurringIndex by indexes with value in the keys of the catalog plan
[mamico]


3.0.1 (2019-10-03)
Expand Down
3 changes: 3 additions & 0 deletions MANIFEST.in
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
include *.rst
include buildout.cfg
include tox.ini
include buildout4.cfg
recursive-include docs *
recursive-include src *
global-include *.mo
Expand Down
23 changes: 23 additions & 0 deletions buildout.cfg
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
[buildout]
extends =
https://zopefoundation.github.io/Zope/releases/master/versions.cfg
develop = .
parts =
interpreter
test

[versions]
Products.DateRecurringIndex =
RestrictedPython = >= 5.1

[interpreter]
recipe = zc.recipe.egg
interpreter = py
eggs =
Products.DateRecurringIndex
tox

[test]
recipe = zc.recipe.testrunner
eggs =
Products.DateRecurringIndex
7 changes: 7 additions & 0 deletions buildout4.cfg
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
[buildout]
extends =
buildout.cfg
http://zopefoundation.github.io/Zope/releases/4.x/versions.cfg

[versions]
Products.DateRecurringIndex =
8 changes: 5 additions & 3 deletions setup.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
# -*- coding: utf-8 -*-
"""Installer for the bda.aaf.site package."""

from setuptools import find_packages
from setuptools import setup

from setuptools import find_packages, setup

version = '3.0.2.dev0'
short_description = "Zope 2 date index with support for recurring events."
Expand Down Expand Up @@ -31,6 +29,9 @@
'Programming Language :: Python :: 2.7',
'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: 3.7',
'Programming Language :: Python :: 3.8',
'Programming Language :: Python :: 3.9',
'Programming Language :: Python :: 3.10',
'Topic :: Internet :: WWW/HTTP :: Dynamic Content',
],
keywords='zope zope2 index catalog date recurring',
Expand All @@ -45,6 +46,7 @@
zip_safe=False,
install_requires=[
'setuptools',
'six',
'BTrees',
'plone.event',
'Products.ZCatalog',
Expand Down
28 changes: 18 additions & 10 deletions src/Products/DateRecurringIndex/index.py
Original file line number Diff line number Diff line change
@@ -1,26 +1,25 @@
# -*- coding: utf-8 -*-
from logging import getLogger

from AccessControl.class_init import InitializeClass
from App.special_dtml import DTMLFile
from BTrees.IIBTree import difference
from BTrees.IIBTree import IISet
from logging import getLogger
from BTrees.IIBTree import IISet, difference
from OFS.PropertyManager import PropertyManager
from plone.event.recurrence import recurrence_sequence_ical
from plone.event.utils import dt2int
from plone.event.utils import pydt
from plone.event.utils import dt2int, pydt
from Products.PageTemplates.PageTemplateFile import PageTemplateFile
from Products.PluginIndexes.interfaces import IDateRangeIndex
from Products.PluginIndexes.unindex import UnIndex
from Products.PluginIndexes.util import safe_callable
from ZODB.POSException import ConflictError
from zope.interface import implementer
from zope.interface import Interface
from zope.schema import Text


LOG = getLogger('Products.DateRecurringIndex')
_marker = object()


class IDateRecurringIndex(Interface):
class IDateRecurringIndex(IDateRangeIndex):
attr_recurdef = Text(
title=u"Attribute- or fieldname of recurrence rule definition."
u"RFC2445 compatible string or timedelta."
Expand Down Expand Up @@ -48,7 +47,6 @@ class DateRecurringIndex(UnIndex, PropertyManager):
{'label': 'Browse', 'action': 'manage_browse'},
) + PropertyManager.manage_options


def __init__(self, id, ignore_ex=None, call_methods=None,
extra=None, caller=None):
""" Initialize the index
Expand Down Expand Up @@ -87,7 +85,7 @@ def index_object(self, documentId, obj, threshold=None):
if not recurdef:
dates = [pydt(date_attr)]
else:
until = getattr(obj, self.attr_until, None)
until = getattr(obj, self.getUntilField(), None)
if safe_callable(until):
until = until()

Expand Down Expand Up @@ -156,6 +154,16 @@ def _convert(self, value, default=None):
"""
return dt2int(value) or default

def getSinceField(self):
"""Get the name of the attribute indexed as start date.
"""
return None

def getUntilField(self):
"""Get the name of the attribute indexed as end date.
"""
return self.attr_until


manage_addDRIndexForm = DTMLFile('www/addDRIndex', globals())

Expand Down
3 changes: 1 addition & 2 deletions src/Products/DateRecurringIndex/testing.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
# -*- coding: utf-8 -*-
from plone.testing import z2
from plone.testing import Layer
from plone.testing import Layer, z2


class DRILayer(Layer):
Expand Down
Loading