def test_edit_frame_at(): client = Watson(config_dir=WORKDIR) # Edit first frame. start0 = local_arrow_from_tuple((2018, 6, 14, 15, 59, 54)) stop0 = local_arrow_from_tuple((2018, 6, 14, 16, 34, 25)) edit_frame_at(client, 0, start=start0, stop=stop0, tags=['edited']) frame = client.frames[0] assert frame.start.format('YYYY-MM-DD HH:mm:ss') == '2018-06-14 15:59:54' assert frame.stop.format('YYYY-MM-DD HH:mm:ss') == '2018-06-14 16:34:25' assert client.frames[0].tags == ['edited'] # Edit second frame. start1 = '2018-06-14 16:48:05' stop1 = '2018-06-14 17:00:00' edit_frame_at(client, 1, start=start1, stop=stop1, tags=['edited']) frame = client.frames[1] assert frame.start.format('YYYY-MM-DD HH:mm:ss') == start1 assert frame.stop.format('YYYY-MM-DD HH:mm:ss') == stop1 assert client.frames[1].tags == ['edited'] # Edit third frame. start2 = '2018-06-14 18:02:57' stop2 = '2018-06-14 23:34:25' edit_frame_at(client, 2, start=start2, stop=stop2, tags=['edited']) frame = client.frames[2] assert frame.start.format('YYYY-MM-DD HH:mm:ss') == start2 assert frame.stop.format('YYYY-MM-DD HH:mm:ss') == stop2 assert client.frames[2].tags == ['edited'] client.save()
def __init__(self, config_dir=None, parent=None): super(QWatson, self).__init__(parent) self.setWindowIcon(icons.get_icon('master')) self.setWindowTitle(__namever__) self.setMinimumWidth(300) self.setWindowFlags(Qt.Window | Qt.WindowMinimizeButtonHint | Qt.WindowCloseButtonHint) if platform.system() == 'Windows': import ctypes myappid = __namever__ ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID( myappid) config_dir = (config_dir or os.environ.get('QWATSON_DIR') or click.get_app_dir('QWatson')) self.client = Watson(config_dir=config_dir) self.model = WatsonTableModel(self.client) self.setup_activity_overview() self.setup() if self.client.is_started: self.add_new_project(self.client.current['project']) self.stop_watson(tags=['error'], message="last session not closed correctly.") self.set_settings_from_index(-1)
def test_client_loading_frames(): """Test that the client saved and loaded the frames correctly.""" client = Watson(config_dir=WORKDIR) assert len(client.frames) == 3 assert client.frames[0].message == FIRSTCOMMENT assert client.frames[1].message == THIRDCOMMENT assert client.frames[2].message == SECONDCOMMENT
def test_client_frame_insert(): """Test that inserting a frame works as expected.""" client = Watson(config_dir=WORKDIR) assert len(client.frames) == 2 client.insert(1, project='ci-tests', start=arrow.now(), stop=arrow.now(), message=THIRDCOMMENT) client.save() assert len(client.frames) == 3
def test_client_start_stop(): """Test starting and stopping the client from an empty state.""" frames_file = osp.join(WORKDIR, 'frames') delete_file_safely(frames_file) delete_file_safely(frames_file + '.bak') assert not osp.exists(frames_file) client = Watson(config_dir=WORKDIR) assert client.frames_file == frames_file assert (len(client.frames)) == 0 client.start('ci-tests') client._current['message'] = FIRSTCOMMENT client.stop() client.start('ci-tests') client._current['message'] = SECONDCOMMENT client.stop() client.save() assert osp.exists(client.frames_file) assert (len(client.frames)) == 2
def test_round_frame_at(): client = Watson(config_dir=WORKDIR) # Round first frame to 1min. round_frame_at(client, 0, 1) frame = client.frames[0] assert frame.start.format('YYYY-MM-DD HH:mm') == '2018-06-14 16:00' assert frame.stop.format('YYYY-MM-DD HH:mm') == '2018-06-14 16:34' # Round second frame to 5min. round_frame_at(client, 1, 5) frame = client.frames[1] assert frame.start.format('YYYY-MM-DD HH:mm') == '2018-06-14 16:50' assert frame.stop.format('YYYY-MM-DD HH:mm') == '2018-06-14 17:00' # Round third frame to 10min. round_frame_at(client, 2, 10) frame = client.frames[2] assert frame.start.format('YYYY-MM-DD HH:mm') == '2018-06-14 18:00' assert frame.stop.format('YYYY-MM-DD HH:mm') == '2018-06-14 23:30' client.save()
def itemEnterEvent(self, index): self.set_hovered_row(index.row()) def leaveEvent(self, event): super(FormatedWatsonTableView, self).leaveEvent(event) self.set_hovered_row(None) def focusOutEvent(self, event): super(FormatedWatsonTableView, self).focusOutEvent(event) self.set_hovered_row(None) if __name__ == '__main__': from qwatson.watson_ext.watsonextends import Watson from qwatson.models.tablemodels import WatsonTableModel import os.path as osp from qwatson import __rootdir__ dirname = osp.join(__rootdir__, 'tests', 'appdir', 'activity_overview') client = Watson(config_dir=dirname) model = WatsonTableModel(client) app = QApplication(sys.argv) from PyQt5.QtWidgets import QStyleFactory app.setStyle(QStyleFactory.create('WindowsVista')) overview_window = ActivityOverviewWidget(model) overview_window.show() app.exec_()
def __init__(self, client=None, parent=None): super().__init__('Projects', client, parent) def items(self): """Base class method implementation.""" return self.client.projects class FilterTagsMenu(FilterBaseMenu): """An implementation of the FilterBaseMenu for activity tags.""" def __init__(self, client=None, parent=None): super().__init__('Tags', client, parent) def items(self): """Base class method implementation.""" return [''] + self.client.tags if __name__ == '__main__': from PyQt5.QtWidgets import QApplication, QWidget, QGridLayout from qwatson.watson_ext.watsonextends import Watson app = QApplication(sys.argv) window = QWidget() layout = QGridLayout(window) layout.addWidget(FilterButton(Watson()), 0, 0) window.show() sys.exit(app.exec_())