Пример #1
0
 def test_baseline_memory_sync(self):
     data1 = track({}, sync=MemoryConduit())
     data2 = track({}, sync=MemoryConduit())
     
     data1['a'] = 1
     
     time.sleep(0.1)
     handler(data1).sync.stop()
     handler(data2).sync.stop()
     
     self.assertTrue(data1 == data2)
Пример #2
0
 def test_existing_file(self):
     file_content = 'ä: 1\n'
     m = mock.mock_open(read_data=file_content)
     with mock.patch('tinysync.persistence.open', m):
         t = track({}, 'testing')
     m.assert_called_once_with('testing.yaml', encoding='utf-8')
     self.assertTrue(t['ä'] == 1)
Пример #3
0
 def test_basics_list(self):
     l = [0, 1]
     t = track(l)
     self.assertTrue(istracked(t))
     self.assertTrue(t.__subject__ == l)
     t[1] = ['a']
     self.assertTrue(istracked(t[1]))
Пример #4
0
 def test_lock_ctxtmgr(self):
     t = track({'a': 1})
     with t:
         t._tracker.handler.lock.release()
         t._tracker.handler.lock.acquire()
     with self.assertRaises(RuntimeError):
         t._tracker.handler.lock.release()
Пример #5
0
 def refresh_album_data(self):
     albums = self.driver.get_albums()
     for i, album in enumerate(albums):
         album = track(album)
         #self.status.text = f'{i+1}/{len(albums)} - {album.name}'
         #self.status.size_to_fit()
         #self.status.center = #self.bounds.center()
         if album.id not in self.albums:
             photos = [
                 {
                     'id': photo['id'],
                     'album_id': album.id,
                     #'name': photo['name'],
                     'taken': str(self.get_datetime(photo)),
                     #'size': photo['size'],
                     'height': photo['image']['height'],
                     'width': photo['image']['width'],
                     #'url': photo['@microsoft.graph.downloadUrl'],
                 } for photo in self.driver.get_children(album.id)
                 if 'file' in photo and not 'video' in photo
             ]
             photos.sort(key=lambda p: p['taken'])
             self.albums[album.id] = {
                 'name': album.name,
                 'id': album.id,
                 'active': True,
                 'photos': photos
             }
             self.menu.data_source.refresh()
         if self.state.current_photo is None:
             self.state.current_photo = (album.id, 0)
Пример #6
0
 def test_basics_dict(self):
     d = {'a': 1, 'b': 2}
     t = track(d)
     self.assertTrue(istracked(t))
     self.assertTrue(t.__subject__ == d)
     t['b'] = [3]
     self.assertTrue(istracked(t['b']))
Пример #7
0
 def test_new_file(self):
     m = mock.mock_open()
     with mock.patch('tinysync.persistence.open', m):
         t = track({'ä': 1}, 'testing')
     m.assert_any_call('testing.yaml', encoding='utf-8')
     m.assert_called_with('testing.yaml', 'w', encoding='utf-8')
     h = m()
     [h.write.assert_any_call(letter) for letter in 'ä: 1\n']
Пример #8
0
 def test_change_callback(self):
     l = [0, [1]]
     def change_callback(data):
         self.assertTrue(type(data.name) == NoNameNoPersistence)
         self.assertTrue(data.path == [1])
         self.assertTrue(data.target==l[1])
     t = track(l, change_callback=change_callback)
     t[1][0] = 2
Пример #9
0
    def test_change_action(self):
        l = [0, 1]
        check = []

        def change_action(check):
            check.append(True)

        t = track(l, change_action=partial(change_action, check))
        t[1] = 2
        self.assertTrue(check[0])
Пример #10
0
 def test_history(self):
     data = track({}, history=True)
     h = handler(data).history
     data['a'] = 5
     data['a'] = [1, 2]
     self.assertTrue(h.capacity == 0)
     self.assertTrue(len(h) == 2)
     self.assertTrue(h.undo() == 1)
     self.assertTrue(h.active == 1)
     self.assertTrue(data['a'] == 5)
     self.assertTrue(h.redo() == 0)
     self.assertTrue(data['a'] == [1, 2])
Пример #11
0
    def test_change_callback(self):
        l = [0, [1]]

        def change_callback(data):
            self.assertTrue(type(data.name) == NoNameNoPersistence)
            self.assertTrue(data.path == [1])
            self.assertTrue(data.target == l[1])
            self.assertTrue(data.func_name == '__setitem__')
            self.assertTrue(data.args == (0, 2))

        t = track(l, change_callback=change_callback)
        t[1][0] = 2
Пример #12
0
    def __init__(self, tableview):
        self.tableview = tableview
        self.ruoat = track([], 'ruoat')

        self.add_button = ui.ButtonItem(
            tint_color='black',
            title='Lisää',
            enabled=True,
            action=self.add,
        )
        tableview.right_button_items = [self.add_button]

        self.last_created = None
        self.full_height = None
Пример #13
0
 def test_atomic_ctxtmgr_exception(self):
     original = {'a': {'b': 1}}
     call_count = 0
     def cb(data):
         nonlocal call_count
         call_count += 1
     t = track(copy.deepcopy(original), change_callback=cb)
     with self.assertRaises(RuntimeError):
         with atomic(t):
             t['a']['b'] = [2, 3]
             raise RuntimeError('Something failed')
     self.assertTrue(t['a']['b'] == 1, t['a']['b'])
     self.assertTrue(t == original, t)
     self.assertTrue(istracked(t['a']))
     self.assertTrue(call_count == 0, call_count)
Пример #14
0
    def __init__(self,
                 initial_value,
                 content=None,
                 data_id='default',
                 persist=False,
                 conduit=None,
                 change_callback=None):
        super().__init__()
        self.initial_value = initial_value
        self.initial_checksum = Sync.generate_checksum(initial_value)
        self.content = content if content is not None else copy.deepcopy(
            self.initial_value)
        self.data_id = data_id
        self.conduit = conduit or MemoryConduit()
        self.change_callback = change_callback

        self.conduit.register_handler(self)

        self.state = tinysync.track({},
                                    name=data_id + '-sync',
                                    dot_access=True,
                                    persist=persist)
Пример #15
0
    def __init__(self, conduit=None, **kwargs):
        super().__init__(**kwargs)
        enable(self)
        self.background_color = .3
        self.ball_views = {}
        more_b = Button(title='+',
                        name='',
                        background_color='blue',
                        tint_color='lightblue',
                        font=('<system-bold>', 32))
        self.add_subview(more_b)
        more_b.dock.bottom_trailing()
        more_b.at.width == 40
        more_b.at.height == 40
        more_b.corner_radius = 20
        more_b.action = self.add_ball

        self.balls = tinysync.track({},
                                    name='balls',
                                    persist=False,
                                    sync=conduit,
                                    change_callback=self.update_view,
                                    dot_access=True)
Пример #16
0
    for view in container.subviews:
        id = int(view.name)
        (x, y, color) = moving_balls[id]
        view.center = x, y
        needed.remove(id)
    for id in needed:
        (x, y, color) = moving_balls[id]
        view = MoveableView(name=str(id), background_color=color)
        container.add_subview(view)
        view.frame = (0, 0, 40, 40)
        view.corner_radius = 20
        view.center = x, y


more_b = Button(title='+',
                background_color='blue',
                tint_color='lightblue',
                font=('<system-bold>', 32))
v.add_subview(more_b)
more_b.dock.bottom_trailing()
more_b.at.width == 40
more_b.at.height == 40
more_b.corner_radius = 20
more_b.action = add_ball

v.present()

moving_balls = tinysync.track(moving_balls,
                              change_action=functools.partial(
                                  update_view, passive))
Пример #17
0
        return True

    def add(self, sender):
        self.ex.append({
            'title': '?',
            'image_name': '',
            'reps': '3x10',
            'weight_mikael': 0,
            'weight_oskari': 0,
        })
        self.tableview.reload()


if __name__ == '__main__':

    exercises = tinysync.track([], name='gym-program')

    v = ui.View(background_color='black', )

    day_table = ui.TableView(
        background_color='black',
        frame=v.bounds,
        flex='WH',
    )

    day_source = DaySource(day_table, exercises)
    day_table.data_source = day_source
    day_table.delegate = day_source

    n = anchor.NavigationView(day_table,
                              navigation_bar_hidden=False,
Пример #18
0
 def initialize_local(self):
     self.albums = track({}, str(self.folder / 'slideshow_album_data'))
     self.state = track({'current_photo': None},
                        str(self.folder / 'slideshow_state'))
     self.continuum = {}
Пример #19
0
 def locate_photo(self, photo_spec, offset=0):
     album_id, photo_index = self.update_spec(photo_spec, offset)
     album = self.albums[album_id]
     photo = album.photos[photo_index]
     return track(photo)
Пример #20
0
 def test_atomic_ctxtmgr_baseline(self):
     t = track({'a': 1})
     with atomic(t):
         t['a'] = { 'b': [2, 3]}
     self.assertTrue(t['a']['b'][1] == 3)
     self.assertTrue(istracked(t['a']['b']))
Пример #21
0
 def test_vanilla_copy(self):
     l = [0, { 'a': 1 }]
     t = track(l)
     back_to_l = copy.deepcopy(t)
     self.assertTrue(type(back_to_l) == list)
     self.assertTrue(type(back_to_l[1]) == dict)
Пример #22
0
 def test_basics_set(self):
     s = {'a', 'b'}
     t = track(s)
     self.assertTrue(istracked(t))
     self.assertTrue(t.__subject__ == s)