blob: f0ce7d8e493c86b1046864643b6067d2d2971ad7 [file] [log] [blame]
#!/usr/bin/env python3
# -*- encoding: utf-8 -*-
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
''' module for defining windowconfig'''
import datetime
class WindowConfig(object):
"""WindowConfig allows streamlet API users to program window configuration for operations
that rely on windowing. Currently we only support time/count based
sliding/tumbling windows.
def __init__(self, window_duration, slide_interval):
self._window_duration = window_duration
self._slide_interval = slide_interval
if self._window_duration.microseconds > 0 or self._slide_interval.microseconds > 0:
raise RuntimeError("Python Windowing curently only supports second resolution")
def create_tumbling_window(window_duration):
return WindowConfig(window_duration, window_duration)
def create_sliding_window(window_duration, slide_interval):
if isinstance(window_duration, int):
window_duration = datetime.timedelta(seconds=window_duration)
if isinstance(slide_interval, int):
slide_interval = datetime.timedelta(seconds=slide_interval)
if not isinstance(window_duration, datetime.timedelta):
raise RuntimeError("Window Duration has to be of type datetime.timedelta")
if not isinstance(slide_interval, datetime.timedelta):
raise RuntimeError("Slide Interval has to be of type datetime.timedelta")
return WindowConfig(window_duration, slide_interval)