import datetime
from typing import Optional, Sequence, List
from aw_client import ActivityWatchClient
from aw_watcher_project.aw_time import get_begin_time, get_default_end_time
from aw_watcher_project.events.activity import Activity, ActivityData
DEFAULT_ACTIVITY_BUCKETS = ('aw-watcher-window_',)
def _bucket_name_to_event_name(name: str) -> str:
return name.replace('-', '_') + 'events'
def _bucket_query(name: str, project_name: str) -> str:
event_name = _bucket_name_to_event_name(name)
query = f"""
{event_name} = query_bucket(find_bucket("{name}"));
{event_name} = filter_period_intersect({event_name}, filter_keyvals(project_events, "project", ["{project_name}"]));
""".strip()
return query
def _get_query_return_value(activity_buckets: Sequence[str]) -> str:
event_names = [_bucket_name_to_event_name(name) for name in activity_buckets]
key_value_pairs = [f'"{name}": {name}' for name in event_names]
return 'RETURN = {' + ', '.join(key_value_pairs) + '};'
def _get_activity_query(project: str, activity_buckets: Sequence[str] = DEFAULT_ACTIVITY_BUCKETS) -> str:
bucket_queries = '\n'.join([_bucket_query(bucket, project) for bucket in activity_buckets])
query = f"""
afk_events = query_bucket(find_bucket("aw-watcher-afk_"));
project_events = query_bucket(find_bucket("aw-watcher-project-selected_"));
project_events = filter_keyvals(project_events, "project", ["{project}"]);
project_events = filter_period_intersect(project_events, filter_keyvals(afk_events, "status", ["not-afk"]));
{bucket_queries}
{_get_query_return_value(activity_buckets)}
""".strip()
return query
[docs]def get_activity(
project: str, begin: Optional[datetime.datetime] = None, end: Optional[datetime.datetime] = None,
activity_buckets: Sequence[str] = DEFAULT_ACTIVITY_BUCKETS
) -> Activity:
if begin is None:
begin = get_begin_time()
if end is None:
end = get_default_end_time()
time_periods = [(begin, end)]
client = ActivityWatchClient()
query = _get_activity_query(project, activity_buckets)
events: List[ActivityData] = client.query(query, time_periods)
return Activity(events[0]['aw_watcher_window_events'])
if __name__ == '__main__':
begin = datetime.datetime(2021, 2, 15)
end = datetime.datetime(2021, 2, 18)
resp = get_activity('awproject-watcher', begin=begin, end=end)
print(resp.events)
print('\n')
print('\n'.join(set(resp.for_app('jetbrains-pycharm-ce').titles)))