コード例 #1
0
ファイル: zg_listener.py プロジェクト: thnguyn2/ECE_527_MP
    def handle_VM_SHARE_CREATED(self, share_id):
        """Log the share accepted event."""
        share = self.vm.shares[share_id]

        folder = Subject.new_for_values(
            uri=URI_PROTOCOL_U1 + str(share.node_id),
            interpretation=Interpretation.FOLDER,
            manifestation=Manifestation.REMOTE_DATA_OBJECT,
            origin="file:///" + share.path,
            text=basename(share.path),
            mimetype=DIRECTORY_MIMETYPE,
            storage=STORAGE_NETWORK)

        other_username = share.other_username
        other_user = Subject.new_for_values(
            uri="mailto:" + other_username,
            interpretation=INTERPRETATION_U1_CONTACT,
            text=other_username,
            manifestation=MANIFESTATION_U1_CONTACT_DATA_OBJECT)

        event = Event.new_for_values(
            interpretation=EVENT_INTERPRETATION_U1_SHARE_ACCEPTED,
            manifestation=Manifestation.USER_ACTIVITY,
            actor=ACTOR_UBUNTUONE,
            subjects=[folder, other_user])

        self.zg.log(event)
コード例 #2
0
 def _on_view_pages(self, widget):
     self.home.reset()
     uris = []
     for pIndex in xrange(self.pages.get_n_pages()):
         self.pages.set_current_page(pIndex)
         page = self.pages.get_nth_page(pIndex)
         overviewPage = PageOverviewWidget(page)
         overviewPage.connect("clicked", self._on_page_clicked)
         self.home.add_page(overviewPage)
         uris.append(page.webview.get_uri())
     self.home.show_all()
     self.box.set_current_page(0)
     
     def callback(events):
         self.home.recentDashboard.recentPages.reset()
         for event in events:
             page = PageButton(event.subjects[0])
             print event.subjects[0].uri
             self.home.recentDashboard.recentPages.add_page(page)
         self.home.show_all()
     event = Event()
     event.actor = "application://web.desktop"
     event.subjects = []
     for uri in uris:
         if uri:
             subject = Subject()
             subject.uri = "!"+uri
             event.subjects.append(subject)
     print event
     ZG.find_events_for_template(event, callback, result_type=2)
コード例 #3
0
ファイル: zg_listener.py プロジェクト: thnguyn2/ECE_527_MP
    def log_folder_shared(self, share, share_id):
        """Log the 'directory shared' event."""
        fullpath = share.path
        folder_name = basename(fullpath)

        folder = Subject.new_for_values(
            uri=URI_PROTOCOL_U1 + str(share.node_id),
            interpretation=Interpretation.FOLDER,
            manifestation=Manifestation.REMOTE_DATA_OBJECT,
            origin="file:///" + fullpath,
            text=folder_name,
            mimetype=DIRECTORY_MIMETYPE,
            storage=STORAGE_NETWORK)

        other_username = share.other_username
        other_user = Subject.new_for_values(
            uri="mailto:" + other_username,
            interpretation=INTERPRETATION_U1_CONTACT,
            text=other_username,
            manifestation=MANIFESTATION_U1_CONTACT_DATA_OBJECT)

        event = Event.new_for_values(
            interpretation=EVENT_INTERPRETATION_U1_FOLDER_SHARED,
            manifestation=Manifestation.USER_ACTIVITY,
            actor=ACTOR_UBUNTUONE,
            subjects=[folder, other_user])

        self.zg.log(event)
コード例 #4
0
    def register_message_event(self, ac_id, who, msg, event_info):
        subject = Subject.new_for_values(
                uri="pidgin://%s/%s" % (ac_id, who),
                interpretation=unicode(Interpretation.IMMESSAGE),
                manifestation=unicode(Manifestation.SOFTWARE_SERVICE),
                origin="pidgin://%s" % (ac_id,),
                mimetype="text/plain",
                storage="local",
                text="%s" % (self._strip_tags(msg)))
        subjects = [subject]
        uris = URIS.findall(self._strip_tags(msg))
        for link in uris:
            if uris.count(link) == 1:
                subject = Subject.new_for_values(
                        uri=link,
                        interpretation=unicode(Interpretation.WEBSITE),
                        manifestation=unicode(#WEB if match http
                                              Manifestation.WEB_DATA_OBJECT  if HTTP.match(link)\
                                              #File if match file
                                              else Manifestation.FILE_DATA_OBJECT if FILE.match(link)\
                                              #something else
                                              else Manifestation.FILE_DATA_OBJECT.REMOTE_DATA_OBJECT
                                            ),
                        origin=origin_from_uri(link),
                        storage=storage_from_uri(link),
                        text=link)
                subjects.append(subject)
            else:
                uris.remove(link)
        event_info['subjects'] = subjects
        event_info['timestamp'] = int(time.time() * 1000)

        event_info['actor'] = 'application://pidgin.desktop'
        self.zclient.insert_event_for_values(**event_info)
        self.event_sent(ac_id, who, msg, event_info)
コード例 #5
0
    def request_last_n_days_events(self, n=90, func=None):
        """
        Find the events for 'n' days and packs them into the store

        Optionally calls func upon completion
        """
        subject = Subject()
        subject.uri = "!application://*"
        event_templates = (
            Event.new_for_values(
                interpretation=Interpretation.ACCESS_EVENT.uri,
                subjects=[subject]),
            Event.new_for_values(
                interpretation=Interpretation.MODIFY_EVENT.uri,
                subjects=[subject]),
            Event.new_for_values(
                interpretation=Interpretation.CREATE_EVENT.uri,
                subjects=[subject]),
            Event.new_for_values(
                interpretation=Interpretation.RECEIVE_EVENT.uri,
                subjects=[subject]),
            Event.new_for_values(
                actor="!application://activity-log-manager.desktop"))

        def callback(events):
            def _thread_fn(events):
                event_chunks = []
                chunk = []
                for i, event in enumerate(events):
                    chunk.append(event)
                    if i % 20 == 0:
                        event_chunks.append(chunk)
                        chunk = []
                map(self.add_events, event_chunks)
                if func:
                    func()
                return False

            thread = threading.Thread(target=_thread_fn, args=(events, ))
            thread.start()

        end = time.time() - 3 * 86400
        start = end - n * 86400
        if n >= 60:
            inc = (end - start) / (n / 30)
            for i in range(n / 30):
                a = end - (inc * (i + 1)) + 1
                b = end - (inc * (i))
                CLIENT.find_events_for_templates(
                    event_templates,
                    callback, [a * 1000, b * 1000],
                    num_events=50000,
                    storage_state=StorageState.Available)
        else:
            CLIENT.find_events_for_templates(
                event_templates,
                callback, [start * 1000, end * 1000],
                num_events=50000,
                storage_state=StorageState.Available)
        return False
コード例 #6
0
	def testFindTwoOfThreeEvents(self):
		events = parse_events("test/data/three_events.js")
		ids = self.insertEventsAndWait(events)
		self.assertEqual(3, len(ids))
		
		events = self.getEventsAndWait(ids)
		self.assertEqual(3, len(events))
		for event in events:
			self.assertTrue(isinstance(event, Event))
			self.assertEqual(Manifestation.USER_ACTIVITY, event.manifestation)
			self.assertTrue(event.actor.startswith("Boogaloo"))
		
		# Search for everything
		ids = self.findEventIdsAndWait([], num_events=3)
		self.assertEqual(3, len(ids))
		
		# Search for some specific templates
		subj_templ1 = Subject.new_for_values(manifestation=Manifestation.FILE_DATA_OBJECT)
		subj_templ2 = Subject.new_for_values(interpretation=Interpretation.IMAGE)
		event_template = Event.new_for_values(
					actor="Boogaloo*",
					interpretation=Interpretation.ACCESS_EVENT,
					subjects=[subj_templ1, subj_templ2])
		ids = self.findEventIdsAndWait([event_template],
						num_events=10)
		self.assertEqual(1, len(ids))
コード例 #7
0
ファイル: engine-test.py プロジェクト: freedesktop/zeitgeist
	def testFindEventIdsWithMultipleSubjects(self):
		subj1 = Subject.new_for_values(uri="file:///tmp/foo.txt")
		subj2 = Subject.new_for_values(uri="file:///tmp/loo.txt")
		event = new_event(subjects=[subj1, subj2])
		orig_ids = self.insertEventsAndWait([event])
		result_ids = self.findEventIdsAndWait([Event()], num_events=0,
			result_type=ResultType.LeastRecentEvents)
		self.assertEqual(orig_ids, list(result_ids))
	def testFindEventIdsWithMultipleSubjects(self):
		subj1 = Subject.new_for_values(uri="file:///tmp/foo.txt")
		subj2 = Subject.new_for_values(uri="file:///tmp/loo.txt")
		event = new_event(subjects=[subj1, subj2])
		orig_ids = self.insertEventsAndWait([event])
		result_ids = self.findEventIdsAndWait([Event()], num_events=0,
			result_type=ResultType.LeastRecentEvents)
		self.assertEquals(orig_ids, list(result_ids))
コード例 #9
0
 def templates(self):
     subject = Subject()
     subject.uri = "!application://*"
     return [
         Event.new_for_values(
             subjects=[subject],
             actor="!application://activity-log-manager.desktop")
     ]
コード例 #10
0
ファイル: engine-test.py プロジェクト: freedesktop/zeitgeist
	def testGetWithMultipleSubjects(self):
		subj1 = Subject.new_for_values(uri="file:///tmp/foo.txt")
		subj2 = Subject.new_for_values(uri="file:///tmp/loo.txt")
		event = new_event(subjects=[subj1, subj2])
		result = self.insertEventsAndWait([event])
		events = self.getEventsAndWait(result)
		self.assertEqual(2, len(events[0].subjects))
		self.assertEqual("file:///tmp/foo.txt", events[0].subjects[0].uri)
		self.assertEqual("file:///tmp/loo.txt", events[0].subjects[1].uri)
コード例 #11
0
	def testFindMultipleEvents(self):
		import_events("test/data/five_events.js", self)
		subj1 = Subject.new_for_values(uri="file:///home/foo.txt")
		event_template1 = Event.new_for_values(subjects=[subj1])
		subj2 = Subject.new_for_values(uri="file:///tmp/foo.txt")
		event_template2 = Event.new_for_values(subjects=[subj2])
		result = self.findEventIdsAndWait([event_template1, event_template2], num_events=0, result_type=4)
		self.assertEquals(2, len(result))
		events = self.getEventsAndWait(result)
コード例 #12
0
	def testGetWithMultipleSubjects(self):
		subj1 = Subject.new_for_values(uri="file:///tmp/foo.txt")
		subj2 = Subject.new_for_values(uri="file:///tmp/loo.txt")
		event = new_event(subjects=[subj1, subj2])
		result = self.insertEventsAndWait([event])
		events = self.getEventsAndWait(result)
		self.assertEquals(2, len(events[0].subjects))
		self.assertEquals("file:///tmp/foo.txt", events[0].subjects[0].uri)
		self.assertEquals("file:///tmp/loo.txt", events[0].subjects[1].uri)
コード例 #13
0
ファイル: zeitgeist_menus.py プロジェクト: genesi/dockmanager
	def _get_base_template(self):
		base_template = Event()
		if self.has_uri:
			subj = Subject()
			subj.set_uri(self.uri+"/*")
			base_template.set_subjects([subj])
		else:
			base_template.set_actor(self.uri)
		return base_template
コード例 #14
0
ファイル: engine-test.py プロジェクト: freedesktop/zeitgeist
	def testFindMultipleEvents(self):
		import_events("test/data/five_events.js", self)
		subj1 = Subject.new_for_values(uri="file:///home/foo.txt")
		event_template1 = Event.new_for_values(subjects=[subj1])
		subj2 = Subject.new_for_values(uri="file:///tmp/foo.txt")
		event_template2 = Event.new_for_values(subjects=[subj2])
		result = self.findEventIdsAndWait([event_template1, event_template2], num_events=0, result_type=4)
		self.assertEqual(2, len(result))
		events = self.getEventsAndWait(result)
コード例 #15
0
ファイル: zeitgeist_menus.py プロジェクト: genesi/dockmanager
		def handle_recent(results):
			self.recent = []
			for event in results:
				if exists(event.subjects[0].uri):
					self.recent.append([event.subjects[0].uri, event.subjects[0].text])
					subj = Subject()
					subj.uri = "!"+event.subjects[0].uri
					template.subjects.append(subj)
				if len(self.recent) >= 5:
					break
			CLIENT.find_events_for_templates([template], handle_most, num_events = 1000, result_type = 4)
コード例 #16
0
def main(argv):
    interpretation = Interpretation.MODIFY_EVENT.uri

    # FIXME: I'd be great if zeitgeist would allow for more detail:
    #           * branch
    #           * log summary (git log -1 --format=%s HEAD)
    curdir = os.path.abspath(os.curdir).decode(sys.getfilesystemencoding())
    uri = u"file://%s" % curdir

    repo, origin = get_repo()
    if not repo:
        repo = unicode(curdir.rsplit('/', 1)[1])
        origin = uri

    subject = Subject.new_for_values(
        uri=uri,
        interpretation=Interpretation.DOCUMENT.TEXT_DOCUMENT.PLAIN_TEXT_DOCUMENT.SOURCE_CODE.uri,
        manifestation=Manifestation.FILE_DATA_OBJECT.uri,
        text=repo,
        origin=origin)
    event = Event.new_for_values(
        timestamp=int(time.time() * 1000),
        interpretation=interpretation,
        manifestation=Manifestation.USER_ACTIVITY.uri,
        actor="application://gitg.desktop",
        subjects=[subject])
    CLIENT.insert_event(event)
コード例 #17
0
ファイル: rbzeitgeist.py プロジェクト: jaivalis/rhythmbox
        def file_info_complete(obj, res, user_data):
            try:
                fi = obj.query_info_finish(res)
            except:
                return

            uri_mimetype = fi.get_content_type()

            subject = Subject.new_for_values(
                uri=song["location"],
                interpretation=unicode(Interpretation.AUDIO),
                manifestation=unicode(Manifestation.FILE_DATA_OBJECT),
                origin=song["location"].rpartition("/")[0],
                mimetype=uri_mimetype,
                text=" - ".join([song["title"], song["artist"],
                                 song["album"]]))
            event = Event.new_for_values(
                timestamp=int(time.time() * 1000),
                interpretation=unicode(event_type),
                manifestation=unicode(manifest),
                actor="application://rhythmbox.desktop",
                subjects=[
                    subject,
                ])
            IFACE.insert_event(event)
コード例 #18
0
ファイル: zg_listener.py プロジェクト: thnguyn2/ECE_527_MP
    def handle_AQ_UNLINK_OK(self, share_id, parent_id, node_id,
                            new_generation, was_dir, old_path):
        """A file or folder was deleted on the server by Syncdaemon,"""
        if was_dir:
            mime, interp = DIRECTORY_MIMETYPE, Interpretation.FOLDER
        else:
            mime, interp = self.get_mime_and_interpretation_for_filepath(
                                                                    old_path)

        file_subject = Subject.new_for_values(
            uri=URI_PROTOCOL_U1 + str(node_id),
            interpretation=interp,
            manifestation=Manifestation.DELETED_RESOURCE,
            origin="file:///" + old_path,
            text=basename(old_path),
            mimetype=mime,
            storage=STORAGE_DELETED)

        event = Event.new_for_values(
            interpretation=Interpretation.DELETE_EVENT,
            manifestation=Manifestation.SCHEDULED_ACTIVITY,
            actor=ACTOR_UBUNTUONE,
            subjects=[file_subject])

        self.zg.log(event)
コード例 #19
0
ファイル: zg_listener.py プロジェクト: thnguyn2/ECE_527_MP
    def handle_AQ_DOWNLOAD_FINISHED(self, share_id, node_id, server_hash):
        """A file finished downloading from the server."""

        mdo = self.fsm.get_by_node_id(share_id, node_id)
        path = self.fsm.get_abspath(share_id, mdo.path)

        if (share_id, node_id) in self.newly_created_local_files:
            self.newly_created_local_files.remove((share_id, node_id))
            event_interpretation = Interpretation.CREATE_EVENT
        else:
            event_interpretation = Interpretation.MODIFY_EVENT

        mime, interp = self.get_mime_and_interpretation_for_filepath(path)

        file_subject = Subject.new_for_values(
            uri="file:///" + path,
            interpretation=interp,
            manifestation=Manifestation.FILE_DATA_OBJECT,
            origin=URI_PROTOCOL_U1 + str(node_id),
            text=basename(path),
            mimetype=mime,
            storage=STORAGE_LOCAL)

        event = Event.new_for_values(
            interpretation=event_interpretation,
            manifestation=Manifestation.WORLD_ACTIVITY,
            actor=ACTOR_UBUNTUONE,
            subjects=[file_subject])

        self.zg.log(event)
コード例 #20
0
	def create_and_send_event(self, page, event_type):
		if not self.zeitgeist_client:
			return

		if not hasattr(page, 'source') \
		or not isinstance(page.source, File):
			return

		uri = page.source.uri
		origin = gio.File(uri).get_parent().get_uri()
		text = _('Wiki page: %s') % page.name
			# T: label for how zim pages show up in the recent files menu, %s is the page name

		subject = Subject.new_for_values(mimetype='text/x-zim-wiki',
		                                 uri=uri,
		                                 origin=origin,
		                                 interpretation=Interpretation.TEXT_DOCUMENT,
		                                 manifestation=Manifestation.FILE_DATA_OBJECT,
		                                 text=text)
		event = Event.new_for_values(actor='application://zim.desktop',
		                             interpretation=event_type,
		                             manifestation=Manifestation.USER_ACTIVITY,
		                             subjects=[subject,])

		self.zeitgeist_client.insert_event(event)
コード例 #21
0
ファイル: __init__.py プロジェクト: dignan/control
    def send_to_zeitgeist(self, db, entry, event_type):
        song = self.get_song_info(db, entry)

        if self.__manual_switch:
            manifest = Manifestation.USER_ACTIVITY
        else:
            manifest = Manifestation.SCHEDULED_ACTIVITY

        subject = Subject.new_for_values(
            uri=song["location"],
            interpretation=unicode(Interpretation.AUDIO),
            manifestation=unicode(Manifestation.FILE_DATA_OBJECT),
            #~ origin="", #TBD
            mimetype=song["mimetype"],
            text=" - ".join([song["title"], song["artist"], song["album"]])
        )
        event = Event.new_for_values(
            timestamp=int(time.time()*1000),
            interpretation=unicode(event_type),
            manifestation=unicode(manifest),
            actor="application://rhythmbox.desktop",
            subjects=[subject,]
        )
        #print event
        IFACE.insert_event(event)
コード例 #22
0
ファイル: zeitgeist-logger.py プロジェクト: DarioGT/Zim-QDA
    def create_and_send_event(self, page, path, event_type):
        if not self.zeitgeist_client:
            return

        #FIXME: Assumes file store
        store = self.ui.notebook.get_store(page.name)
        if path is not None:
            fileobj  = store._get_file(path)
        else:
            fileobj = store._get_file(page)

        uri = fileobj.uri
        origin = gio.File(uri).get_parent().get_uri()
        text = _('Wiki page: %s') % page.name
            # T: label for how zim pages show up in the recent files menu, %s is the page name

        subject = Subject.new_for_values(mimetype='text/x-zim-wiki',
                                         uri=uri,
                                         origin=origin,
                                         interpretation=Interpretation.TEXT_DOCUMENT,
                                         manifestation=Manifestation.FILE_DATA_OBJECT,
                                         text=text)
        event = Event.new_for_values(actor='application://zim.desktop',
                                     interpretation=event_type,
                                     manifestation=Manifestation.USER_ACTIVITY,
                                     subjects=[subject,])

        self.zeitgeist_client.insert_event(event)
コード例 #23
0
    def create_and_send_event(self, page, event_type):
        if not self.zeitgeist_client:
            return

        if not hasattr(page, 'source') \
        or not isinstance(page.source, File):
            return

        uri = page.source.uri
        origin = gio.File(uri).get_parent().get_uri()
        text = _('Wiki page: %s') % page.name
        # T: label for how zim pages show up in the recent files menu, %s is the page name

        subject = Subject.new_for_values(
            mimetype='text/x-zim-wiki',
            uri=uri,
            origin=origin,
            interpretation=Interpretation.TEXT_DOCUMENT,
            manifestation=Manifestation.FILE_DATA_OBJECT,
            text=text)
        event = Event.new_for_values(actor='application://zim.desktop',
                                     interpretation=event_type,
                                     manifestation=Manifestation.USER_ACTIVITY,
                                     subjects=[
                                         subject,
                                     ])

        self.zeitgeist_client.insert_event(event)
コード例 #24
0
ファイル: engine-test.py プロジェクト: freedesktop/zeitgeist
	def testUnicodeEventInsert(self):
		# Insert and get a unicode event
		ids = import_events("test/data/unicode_event.js", self)
		self.assertEqual(len(ids), 1)
		result = self.getEventsAndWait(ids)
		self.assertEqual(1, len(result))
		event = result[0]
		self.assertEqual(1, len(event.subjects))
		self.assertEqual("hällö, I'm gürmen - åge drikker øl - ☠", event.subjects[0].text)
		self.assertEqual("http://live.gnome.org/☠", event.subjects[0].uri)

		# Update the event we got from the DB's timestamp and insert
		# it again, we want to to test some ping-pong back and forth
		event[0][Event.Id] = ""
		event.timestamp = "243"
		ids = self.insertEventsAndWait([event])
		result = self.getEventsAndWait(ids)
		self.assertEqual(1, len(result))
		event = result[0]
		self.assertEqual(1, len(event.subjects))
		self.assertEqual("hällö, I'm gürmen - åge drikker øl - ☠", event.subjects[0].text)
		self.assertEqual("http://live.gnome.org/☠", event.subjects[0].uri)

		# Try and find a unicode event
		subj = Subject.new_for_values(text="hällö, I'm gürmen - åge drikker øl - ☠",
			origin="file:///åges_øl í", uri="http://live.gnome.org/☠")
		event_template = Event.new_for_values(subjects=[subj,])

		result = self.findEventIdsAndWait([event_template],
			timerange=(0,200), num_events=100, result_type=0)
		self.assertEqual(len(result), 1)
def buildQuery(chromosome):
  storage = StorageState.Any
  numResults = 10
  if chromosome[0] == 0 or chromosome[1] == 0:
    timerange = TimeRange.always()
  else:
    timerange = (chromosome[0]*60*60*24, chromosome[1]*60*60*24)
    if timerange[0] > timerange[1]:
       timerange = (timerange[1], timerange[0])
  searchType = chromosome[2]%30

  eventTemplate = {}
  subjectTemplate = {}

  if chromosome[3]%2 == 0:
    subjectTemplate['interpretation'] = random.choice(list(Interpretation.EVENT_INTERPRETATION.get_children()))
  if chromosome[4]%2 == 0:
    subjectTemplate['manifestation'] = random.choice(list(Manifestation.EVENT_MANIFESTATION.get_children()))
  if chromosome[5]%2 == 0:
    eventTemplate['actor'] = "application://google-chrome.desktop"
  if chromosome[6]%2 == 0:
    subjectTemplate['origin'] = "http://google.com"
  if chromosome[7]%2 == 0:
    subjectTemplate['uri'] = "http://google.com"
  if chromosome[8]%2 == 0:
    subjectTemplate['mimetype'] = "text/html"
  if chromosome[9]%2 == 0:
    subjectTemplate['text'] = "fish"
  if chromosome[10]%2 == 0:
    eventTemplate['manifestation'] = random.choice(list(Manifestation.EVENT_MANIFESTATION.get_children()))
  if chromosome[11]%2 == 0:
    eventTemplate['interpretation'] = random.choice(list(Interpretation.EVENT_INTERPRETATION.get_children()))
  templates = [Event.new_for_values(subjects=[Subject.new_for_values(**subjectTemplate)], **eventTemplate)]

  return (timerange, templates, storage, numResults, searchType)
コード例 #26
0
ファイル: client.py プロジェクト: pombreda/dist-packages
    def find_related_uris_for_uris(self,
                                   subject_uris,
                                   uris_reply_handler,
                                   time_range=None,
                                   result_event_templates=[],
                                   storage_state=StorageState.Any,
                                   num_events=10,
                                   result_type=0,
                                   error_handler=None):
        """
		Warning: This API is EXPERIMENTAL and is not fully supported yet.
		
		Same as :meth:`find_related_uris_for_events`, but taking a list
		of subject URIs instead of event templates.
		"""

        event_template = Event.new_for_values(
            subjects=[Subject.new_for_values(uri=uri) for uri in subject_uris])

        self.find_related_uris_for_events(
            [event_template],
            uris_reply_handler,
            time_range=time_range,
            result_event_templates=result_event_templates,
            storage_state=storage_state,
            num_events=num_events,
            result_type=result_type,
            error_handler=error_handler)
コード例 #27
0
	def testUnicodeEventInsert(self):
		# Insert and get a unicode event
		ids = import_events("test/data/unicode_event.js", self)
		self.assertEquals(len(ids), 1)
		result = self.getEventsAndWait(ids)
		self.assertEquals(1, len(result))
		event = result[0]
		self.assertEquals(1, len(event.subjects))
		self.assertEquals(u"hällö, I'm gürmen - åge drikker øl - ☠", event.subjects[0].text)
		self.assertEquals(u"http://live.gnome.org/☠", event.subjects[0].uri)

		# Update the event we got from the DB's timestamp and insert
		# it again, we want to to test some ping-pong back and forth
		event[0][Event.Id] = ""
		event.timestamp = "243"
		ids = self.insertEventsAndWait([event])
		result = self.getEventsAndWait(ids)
		self.assertEquals(1, len(result))
		event = result[0]
		self.assertEquals(1, len(event.subjects))
		self.assertEquals(u"hällö, I'm gürmen - åge drikker øl - ☠", event.subjects[0].text)
		self.assertEquals(u"http://live.gnome.org/☠", event.subjects[0].uri)

		# Try and find a unicode event
		subj = Subject.new_for_values(text="hällö, I'm gürmen - åge drikker øl - ☠",
			origin="file:///åges_øl í", uri=u"http://live.gnome.org/☠")
		event_template = Event.new_for_values(subjects=[subj,])

		result = self.findEventIdsAndWait([event_template],
			timerange=(0,200), num_events=100, result_type=0)
		self.assertEquals(len(result), 1)
コード例 #28
0
    def onNewTrack(self, track):
        """ Send track information to Zeitgeist """
        import mimetypes, os.path

        from zeitgeist.datamodel import Event, Subject, Interpretation, Manifestation

        mime, encoding = mimetypes.guess_type(track.getFilePath(), strict=False)

        subject = Subject.new_for_values(
            uri            = os.path.dirname(track.getURI()),
            text           = track.getTitle() + ' - ' + track.getArtist() + ' - ' + track.getExtendedAlbum(),
            mimetype       = mime,
            manifestation  = unicode(Manifestation.FILE),
            interpretation = unicode(Interpretation.AUDIO),
        )

        if hasattr(Interpretation, 'ACCESS_EVENT'):
            eventType = Interpretation.ACCESS_EVENT
        else:
            eventType = Interpretation.OPEN_EVENT

        event = Event.new_for_values(
            actor          = "application://decibel-audio-player.desktop",
            subjects       = [subject,],
            interpretation = eventType,
        )

        self.client.insert_event(event)
コード例 #29
0
	def testFindWithSubjectOrigin(self):
		import_events("test/data/five_events.js", self)
		subj = Subject.new_for_values(origin="file:///tmp")
		event_template = Event.new_for_values(subjects=[subj])
		result = self.findEventIdsAndWait([event_template], num_events=0, result_type=1)
		events = self.getEventsAndWait(result)
		for event in events:
			test = any(subj.origin == "file:///tmp" for subj in event.subjects)
			self.assertTrue(test)
コード例 #30
0
ファイル: engine-test.py プロジェクト: freedesktop/zeitgeist
	def testFindWithInterpretation(self):
		import_events("test/data/five_events.js", self)
		subj = Subject()
		event_template = Event.new_for_values(interpretation="stfu:OpenEvent", subjects=[subj])
		result = self.findEventIdsAndWait([event_template], num_events=0, result_type=1)
		self.assertEqual(2, len(result))
		events = self.getEventsAndWait(result)
		for event in events:
			self.assertEqual(event.interpretation, "stfu:OpenEvent")
コード例 #31
0
ファイル: engine-test.py プロジェクト: freedesktop/zeitgeist
	def testFindWithSubjectOrigin(self):
		import_events("test/data/five_events.js", self)
		subj = Subject.new_for_values(origin="file:///tmp")
		event_template = Event.new_for_values(subjects=[subj])
		result = self.findEventIdsAndWait([event_template], num_events=0, result_type=1)
		events = self.getEventsAndWait(result)
		for event in events:
			test = any(subj.origin == "file:///tmp" for subj in event.subjects)
			self.assertTrue(test)
コード例 #32
0
ファイル: engine-test.py プロジェクト: freedesktop/zeitgeist
	def testFindWithManifestation(self):
		import_events("test/data/five_events.js", self)
		subj = Subject()
		event_template = Event.new_for_values(manifestation="stfu:EpicFailActivity", subjects=[subj])

		result = self.findEventIdsAndWait([event_template],
			num_events=0, result_type=1)
		self.assertEqual(1, len(result))
		events = self.getEventsAndWait(result)
		for event in events:
			self.assertEqual(event.manifestation, "stfu:EpicFailActivity")
コード例 #33
0
ファイル: engine-test.py プロジェクト: freedesktop/zeitgeist
	def testFindWithActor(self):
		test_event_1 = parse_events("test/data/one_event.js")[0]
		self.testSingleInsertGet()
		subj = Subject()
		event_template = Event.new_for_values(
			actor="application://gnome-about.desktop",
			subjects=[subj,])
		result = self.findEventIdsAndWait([event_template], num_events=0, result_type=1)
		self.assertEqual(1, len(result))
		test_event_1[0][0] = 1
		self.assertEqual(result[0], test_event_1.id)
コード例 #34
0
ファイル: engine-test.py プロジェクト: freedesktop/zeitgeist
	def testFindEventsEventTemplate(self):
		import_events("test/data/five_events.js", self)
		subj = Subject.new_for_values(interpretation="stfu:Bee")
		subj1 = Subject.new_for_values(interpretation="stfu:Bar")
		event_template = Event.new_for_values(subjects=[subj, subj1])
		result = self.findEventIdsAndWait(
			[event_template, ],
			timerange = (0, 200),
			num_events=100,
			result_type=0)
		self.assertEqual(0, len(result)) # no subject with two different
										  # interpretations at the same time
		subj = Subject.new_for_values(uri="file:///tmp/foo.txt")
		subj1 = Subject.new_for_values(interpretation="stfu:Image")
		event_template = Event.new_for_values(subjects=[subj, subj1])
		result = self.findEventIdsAndWait(
			[event_template, ],
			timerange = (0, 200),
			num_events=100,
			result_type=0)
		self.assertEqual(1, len(result))
コード例 #35
0
    def view_event (self, uri):
        ev = Event.new_for_values(timestamp=int(time.time()),
                                  interpretation=Interpretation.VISIT_EVENT.uri,
                                  manifestation=Manifestation.USER_ACTIVITY.uri,
                                  actor=APP_ID)
        subj = Subject.new_for_values(uri=uri,
                                      interpretation=Interpretation.DOCUMENT.uri,
                                      manifestation=Manifestation.FILE.uri)
        ev.append_subject(subj)

        self.iface.InsertEvents ([ev])
        print "VISIT event for <%s> " % (uri)
コード例 #36
0
	def testFindEventsEventTemplate(self):
		import_events("test/data/five_events.js", self)
		subj = Subject.new_for_values(interpretation="stfu:Bee")
		subj1 = Subject.new_for_values(interpretation="stfu:Bar")
		event_template = Event.new_for_values(subjects=[subj, subj1])
		result = self.findEventIdsAndWait(
			[event_template, ],
			timerange = (0, 200),
			num_events=100,
			result_type=0)
		self.assertEquals(0, len(result)) # no subject with two different
										  # interpretations at the same time
		subj = Subject.new_for_values(uri="file:///tmp/foo.txt")
		subj1 = Subject.new_for_values(interpretation="stfu:Image")
		event_template = Event.new_for_values(subjects=[subj, subj1])
		result = self.findEventIdsAndWait(
			[event_template, ],
			timerange = (0, 200),
			num_events=100,
			result_type=0)
		self.assertEquals(1, len(result))
コード例 #37
0
ファイル: zeitgeist_logger.py プロジェクト: sti-lyneos/shop
 def __create_app_subject(self, desktop_file):
     subject = ZeitgeistSubject()
     subject.interpretation = ZeitgeistDataModel.Interpretation.SOFTWARE
     subject.manifestation = ZeitgeistDataModel.Manifestation.SOFTWARE_ITEM
     subject.uri = APPLICATION_URI_PREFIX + get_desktop_id(desktop_file)
     subject.current_uri = subject.uri
     subject.mimetype = "application/x-desktop"
     return subject
コード例 #38
0
ファイル: zeitgeist_logger.py プロジェクト: pombredanne/shop
 def __create_app_subject(self, desktop_file):
     subject = ZeitgeistSubject()
     subject.interpretation = ZeitgeistDataModel.Interpretation.SOFTWARE
     subject.manifestation = ZeitgeistDataModel.Manifestation.SOFTWARE_ITEM
     subject.uri = APPLICATION_URI_PREFIX + get_desktop_id(desktop_file);
     subject.current_uri = subject.uri
     subject.mimetype = "application/x-desktop"
     return subject
コード例 #39
0
    def view_event(self, uri):
        ev = Event.new_for_values(
            timestamp=int(time.time()),
            interpretation=Interpretation.VISIT_EVENT.uri,
            manifestation=Manifestation.USER_ACTIVITY.uri,
            actor=APP_ID)
        subj = Subject.new_for_values(
            uri=uri,
            interpretation=Interpretation.DOCUMENT.uri,
            manifestation=Manifestation.FILE.uri)
        ev.append_subject(subj)

        self.iface.InsertEvents([ev])
        print "VISIT event for <%s> " % (uri)
コード例 #40
0
    def register_message_event(self, ac_id, who, msg, event_info):
        subject = Subject.new_for_values(
            uri="pidgin://%s/%s" % (ac_id, who),
            interpretation=unicode(Interpretation.IMMESSAGE),
            manifestation=unicode(Manifestation.SOFTWARE_SERVICE),
            origin="pidgin://%s" % (ac_id, ),
            mimetype="text/plain",
            storage="local",
            text="%s" % (self._strip_tags(msg)))
        subjects = [subject]
        uris = URIS.findall(self._strip_tags(msg))
        for link in uris:
            if uris.count(link) == 1:
                subject = Subject.new_for_values(
                        uri=link,
                        interpretation=unicode(Interpretation.WEBSITE),
                        manifestation=unicode(#WEB if match http
                                              Manifestation.WEB_DATA_OBJECT  if HTTP.match(link)\
                                              #File if match file

                                              else Manifestation.FILE_DATA_OBJECT if FILE.match(link)\
                                              #something else

                                              else Manifestation.FILE_DATA_OBJECT.REMOTE_DATA_OBJECT
                                            ),
                        origin=origin_from_uri(link),
                        storage=storage_from_uri(link),
                        text=link)
                subjects.append(subject)
            else:
                uris.remove(link)
        event_info['subjects'] = subjects
        event_info['timestamp'] = int(time.time() * 1000)

        event_info['actor'] = 'application://pidgin.desktop'
        self.zclient.insert_event_for_values(**event_info)
        self.event_sent(ac_id, who, msg, event_info)
コード例 #41
0
    def __init__(self):
        super(Store, self).__init__()
        self.run_build_thread = False
        self._days = {}
        self._day_connections = {}
        self._deleted_uris = []
        #Search for uris that have been deleted in order to not display them.
        #FIXME we should add a timestamp field with the deleted uri
        #to prevent that a recent event with same uri than an older and deleted one
        #isn't displayed. - cando
        self._deleted_uris = []
        subject = Subject()
        subject.uri = "!application://*"
        template = Event.new_for_values(
            interpretation=Interpretation.DELETE_EVENT.uri,
            subjects=[subject],
            actor="!application://activity-log-manager.desktop")

        CLIENT.find_events_for_templates((template, ),
                                         self.__set_deleted_uris,
                                         TimeRange.until_now(),
                                         num_events=MAXEVENTS)
        global currentTimestamp, histogramLoaderCounter
        today = datetime.date.today()
        currentTimestamp = time.mktime(today.timetuple())
        days_population = CLIENT_EXTENSION.GetHistogramData()
        for i in xrange(50 * 6):
            date = datetime.date.fromtimestamp(currentTimestamp)
            day = Day(date, days_population)
            self.add_day(date, day)
            currentTimestamp -= 86400
        for day in self.days[-6:]:
            day.load_ids()
        content_objects.AbstractContentObject.connect_to_manager(
            "add", self.add_content_object_with_new_type)
        content_objects.AbstractContentObject.connect_to_manager(
            "remove", self.remove_content_objects_with_type)
コード例 #42
0
 def _event_id_request_handler(uris):
     templates = []
     if len(uris) > 0:
         for i, uri in enumerate(uris):
             sub = Subject.new_for_values(uri=uri)
             templates += [
                 Event.new_for_values(subjects=[sub]),
             ]
         CLIENT.find_event_ids_for_templates(
             templates,
             _event_request_handler,
             TimeRange.until_now(),
             num_events=len(uris),
             storage_state=StorageState.Available,
             result_type=ResultType.MostRecentSubjects)
コード例 #43
0
def dict2event(d):
	ev = Event()
	ev[0][Event.Id] = d.get("id", "").encode("UTF-8")
	ev.timestamp = str(d.get("timestamp", ""))
	ev.interpretation = str(d.get("interpretation", "").encode("UTF-8"))
	ev.manifestation = str(d.get("manifestation", "").encode("UTF-8"))
	ev.actor = str(d.get("actor", "").encode("UTF-8"))
	ev.origin = str(d.get("origin", "").encode("UTF-8"))
	ev.payload = str(d.get("payload", "").encode("UTF-8"))
	
	subjects = d.get("subjects", [])
	for sd in subjects:
		subj = Subject()
		subj.uri = str(sd.get("uri", "").encode("UTF-8"))
		subj.current_uri = str(sd.get("current_uri", "")).encode("UTF-8")
		subj.interpretation = str(sd.get("interpretation", "").encode("UTF-8"))
		subj.manifestation = str(sd.get("manifestation", "").encode("UTF-8"))
		subj.origin = str(sd.get("origin", "").encode("UTF-8"))
		subj.current_origin = str(sd.get("current_origin", "")).encode("UTF-8")
		subj.mimetype = str(sd.get("mimetype", "").encode("UTF-8"))
		subj.text = str(sd.get("text", "").encode("UTF-8"))
		subj.storage = str(sd.get("storage", "").encode("UTF-8"))
		ev.append_subject(subj)
	return ev
コード例 #44
0
ファイル: Zeitgeist.py プロジェクト: csryan/pogo
    def send_to_zeitgeist(self, track, event_type):
        """
        Other players (e.g. Rhythmbox) log the playing of individual files, but
        we want to log albums.

        Maybe it would be better to log individual files, but then we would have
        to distinguish between Manifestation.USER_ACTIVITY and
        Manifestation.SCHEDULED_ACTIVITY.

        Another possible addition would be logging Interpretation.LEAVE_EVENT.
        """
        import mimetypes, os.path

        from zeitgeist.datamodel import Event, Subject, Interpretation, Manifestation

        mime, encoding = mimetypes.guess_type(track.getFilePath(), strict=False)

        title = track.getTitle()
        album = track.getAlbum()
        artist = track.getArtist()
        uri = track.getURI()
        origin = os.path.dirname(uri)

        # Handle "unknown" tags
        if 'unknown' in title.lower():
            title = track.getBasename()
        if 'unknown' in album.lower():
            album = ''
        if 'unknown' in artist.lower():
            artist = ''

        subject = Subject.new_for_values(
            uri            = origin,
            text           = ' - '.join([part for part in [artist, album] if part]),
            mimetype       = mime,
            manifestation  = unicode(Manifestation.FILE_DATA_OBJECT),
            interpretation = unicode(Interpretation.AUDIO),
            origin         = origin,
        )

        event = Event.new_for_values(
            actor          = "application://pogo.desktop",
            subjects       = [subject,],
            interpretation = unicode(event_type),
            timestamp      = int(time.time() * 1000),
        )

        self.client.insert_event(event)
コード例 #45
0
ファイル: engine-test.py プロジェクト: freedesktop/zeitgeist
	def testInsertSubjectOptionalAttributes(self):
		ev = Event.new_for_values(
			timestamp=123,
			interpretation=Interpretation.ACCESS_EVENT,
			manifestation=Manifestation.USER_ACTIVITY,
			actor="Freak Mamma"
		)
		subj = Subject.new_for_values(
			uri="void://foobar",
			interpretation=Interpretation.DOCUMENT,
			manifestation=Manifestation.FILE_DATA_OBJECT,
			)
		ev.append_subject(subj)

		ids = self.insertEventsAndWait([ev,])
		result = self.getEventsAndWait(ids)
		self.assertEqual(len(ids), len(result))
コード例 #46
0
	def testInsertSubjectOptionalAttributes(self):
		ev = Event.new_for_values(
			timestamp=123,
			interpretation=Interpretation.ACCESS_EVENT,
			manifestation=Manifestation.USER_ACTIVITY,
			actor="Freak Mamma"
		)
		subj = Subject.new_for_values(
			uri="void://foobar",
			interpretation=Interpretation.DOCUMENT,
			manifestation=Manifestation.FILE_DATA_OBJECT,
			)
		ev.append_subject(subj)

		ids = self.insertEventsAndWait([ev,])
		result = self.getEventsAndWait(ids)
		self.assertEquals(len(ids), len(result))
コード例 #47
0
ファイル: zg_listener.py プロジェクト: thnguyn2/ECE_527_MP
    def handle_VM_UDF_CREATED(self, udf):
        """An udf was created. Log it into Zeitgeist."""
        folder = Subject.new_for_values(
            uri=URI_PROTOCOL_U1 + str(udf.node_id),
            interpretation=Interpretation.FOLDER,
            manifestation=Manifestation.REMOTE_DATA_OBJECT,
            origin="file:///" + udf.path,
            text=basename(udf.path),
            mimetype=DIRECTORY_MIMETYPE,
            storage=STORAGE_NETWORK)

        event = Event.new_for_values(
            interpretation=EVENT_INTERPRETATION_U1_UDF_CREATED,
            manifestation=Manifestation.USER_ACTIVITY,
            actor=ACTOR_UBUNTUONE,
            subjects=[folder])

        self.zg.log(event)
コード例 #48
0
ファイル: zg_listener.py プロジェクト: thnguyn2/ECE_527_MP
    def log_udf_deleted(self, volume):
        """Log the udf deleted event."""
        folder = Subject.new_for_values(
            uri=URI_PROTOCOL_U1 + str(volume.node_id),
            interpretation=Interpretation.FOLDER,
            manifestation=Manifestation.DELETED_RESOURCE,
            origin="file:///" + volume.path,
            text=basename(volume.path),
            mimetype=DIRECTORY_MIMETYPE,
            storage=STORAGE_DELETED)

        event = Event.new_for_values(
            interpretation=EVENT_INTERPRETATION_U1_UDF_DELETED,
            manifestation=Manifestation.USER_ACTIVITY,
            actor=ACTOR_UBUNTUONE,
            subjects=[folder])

        self.zg.log(event)
コード例 #49
0
ファイル: zg_listener.py プロジェクト: thnguyn2/ECE_527_MP
    def handle_FSM_DIR_CONFLICT(self, old_name, new_name):
        """A dir was renamed because of conflict."""
        folder_subject = Subject.new_for_values(
            uri="file:///" + new_name,
            interpretation=Interpretation.FOLDER,
            manifestation=Manifestation.FILE_DATA_OBJECT,
            origin="file:///" + old_name,
            text=basename(new_name),
            mimetype=DIRECTORY_MIMETYPE,
            storage=STORAGE_LOCAL)

        event = Event.new_for_values(
            interpretation=EVENT_INTERPRETATION_U1_CONFLICT_RENAME,
            manifestation=Manifestation.WORLD_ACTIVITY,
            actor=ACTOR_UBUNTUONE,
            subjects=[folder_subject])

        self.zg.log(event)
コード例 #50
0
def buildQuery(chromosome):
    storage = StorageState.Any
    numResults = 10
    if chromosome[0] == 0 or chromosome[1] == 0:
        timerange = TimeRange.always()
    else:
        timerange = (chromosome[0] * 60 * 60 * 24,
                     chromosome[1] * 60 * 60 * 24)
        if timerange[0] > timerange[1]:
            timerange = (timerange[1], timerange[0])
    searchType = chromosome[2] % 30

    eventTemplate = {}
    subjectTemplate = {}

    if chromosome[3] % 2 == 0:
        subjectTemplate['interpretation'] = random.choice(
            list(Interpretation.EVENT_INTERPRETATION.get_children()))
    if chromosome[4] % 2 == 0:
        subjectTemplate['manifestation'] = random.choice(
            list(Manifestation.EVENT_MANIFESTATION.get_children()))
    if chromosome[5] % 2 == 0:
        eventTemplate['actor'] = "application://google-chrome.desktop"
    if chromosome[6] % 2 == 0:
        subjectTemplate['origin'] = "http://google.com"
    if chromosome[7] % 2 == 0:
        subjectTemplate['uri'] = "http://google.com"
    if chromosome[8] % 2 == 0:
        subjectTemplate['mimetype'] = "text/html"
    if chromosome[9] % 2 == 0:
        subjectTemplate['text'] = "fish"
    if chromosome[10] % 2 == 0:
        eventTemplate['manifestation'] = random.choice(
            list(Manifestation.EVENT_MANIFESTATION.get_children()))
    if chromosome[11] % 2 == 0:
        eventTemplate['interpretation'] = random.choice(
            list(Interpretation.EVENT_INTERPRETATION.get_children()))
    templates = [
        Event.new_for_values(
            subjects=[Subject.new_for_values(**subjectTemplate)],
            **eventTemplate)
    ]

    return (timerange, templates, storage, numResults, searchType)
コード例 #51
0
ファイル: zg_listener.py プロジェクト: thnguyn2/ECE_527_MP
    def handle_VM_UDF_UNSUBSCRIBED(self, udf):
        """An udf was unsubscribed."""

        folder = Subject.new_for_values(
            uri="file:///" + udf.path,
            interpretation=Interpretation.FOLDER,
            manifestation=Manifestation.DELETED_RESOURCE,
            origin=URI_PROTOCOL_U1 + str(udf.node_id),
            text=basename(udf.path),
            mimetype=DIRECTORY_MIMETYPE,
            storage=STORAGE_DELETED)

        event = Event.new_for_values(
            interpretation=EVENT_INTERPRETATION_U1_UDF_UNSUBSCRIBED,
            manifestation=Manifestation.USER_ACTIVITY,
            actor=ACTOR_UBUNTUONE,
            subjects=[folder])

        self.zg.log(event)
コード例 #52
0
    def __send_event(self, song, interpretation, manifestation):
        if not song:
            return

        print_d("event: interpretation=%s, manifestation=%s" %
                (interpretation.__name__, manifestation.__name__))

        subject = Subject.new_for_values(
            uri=song("~uri"),
            interpretation=Interpretation.AUDIO,
            manifestation=Manifestation.FILE_DATA_OBJECT,
        )

        event = Event.new_for_values(timestamp=int(time.time() * 1000),
                                     interpretation=interpretation,
                                     manifestation=manifestation,
                                     actor="application://quodlibet.desktop",
                                     subjects=[subject])

        self.client.insert_event(event)
コード例 #53
0
ファイル: zg_listener.py プロジェクト: thnguyn2/ECE_527_MP
    def handle_FSM_FILE_CONFLICT(self, old_name, new_name):
        """A file was renamed because of conflict."""
        mime, interp = self.get_mime_and_interpretation_for_filepath(old_name)

        file_subject = Subject.new_for_values(
            uri="file:///" + new_name,
            interpretation=interp,
            manifestation=Manifestation.FILE_DATA_OBJECT,
            origin="file:///" + old_name,
            text=basename(new_name),
            mimetype=mime,
            storage=STORAGE_LOCAL)

        event = Event.new_for_values(
            interpretation=EVENT_INTERPRETATION_U1_CONFLICT_RENAME,
            manifestation=Manifestation.WORLD_ACTIVITY,
            actor=ACTOR_UBUNTUONE,
            subjects=[file_subject])

        self.zg.log(event)
コード例 #54
0
ファイル: monitor-test.py プロジェクト: freedesktop/zeitgeist
    def testMonitorInsertEventsWithSubjectTemplate(self):
        result = []
        mainloop = self.create_mainloop()
        tmpl = Event.new_for_values(
            subjects=[Subject.new_for_values(uri="file:///tmp/bar.txt")])
        events = parse_events("test/data/five_events.js")

        @asyncTestMethod(mainloop)
        def notify_insert_handler(time_range, events):
            result.extend(events)
            mainloop.quit()

        @asyncTestMethod(mainloop)
        def notify_delete_handler(time_range, event_ids):
            mainloop.quit()
            self.fail("Unexpected delete notification")

        self.client.install_monitor([153, 166], [tmpl], notify_insert_handler,
                                    notify_delete_handler)
        self.client.insert_events(events)
        mainloop.run()

        self.assertEqual(1, len(result))
コード例 #55
0
ファイル: engine-test.py プロジェクト: freedesktop/zeitgeist
	def testInsertGetWithoutTimestamp(self):
		# We test two things, that Event creates a default timestamp
		# and that the engine provides one for us if necessary

		subj = Subject.new_for_values(interpretation="foo://interp",
					manifestation="foo://manif",
					uri="nowhere")
		ev = Event.new_for_values(interpretation="foo://bar",
					manifestation="foo://quiz",
					actor="actor://myself",
					subjects=[subj])

		# Assert that timestamp is set
		self.assertTrue(ev.timestamp)

		# Clear the timestamp and insert event
		ev.timestamp = ""
		ids = self.insertEventsAndWait([ev])
		result = self.getEventsAndWait(ids)

		self.assertEqual(1, len(result))
		resulting_event = Event(result.pop())
		self.assertEqual("foo://bar", resulting_event.interpretation)
		self.assertTrue(resulting_event.timestamp) # We should have a timestamp again
コード例 #56
0
 def register_media_event(self, media, interpretation, *args, **kw):
     """ Called as last in line to register event.
     This function was designed to not require overrided
     
     :param media: mpris2.types.Metadata_Map, media metadata
     :param interpretation: event interpretation
     :param *args: *args from property_changed (player mpris signal)
     :param event: to override event to be registered
     :param subject: to override subject of event to be registered
     :param actor: event actor, default is self.app_uri
     :param event_interpretation:  event interpretation, default is interpretation param
     :param event_manifestation: event manifestation, default is Manifestation.SCHEDULED_ACTIVITY
     :param subject_interpretation: subject interpretation, default is self.interpretation
     :param uri: media uri, default is media Metadata_Map.URL
     :param origin: media folder uri, default is media Metadata_Map.URL without filename
     :param minetype: minetype of media, deafult is self.minetype
     :param text: register description, default is track - title - artist - album
     :param storage: storage of media, defaul is self.storage
     """
     self.log(logging.DEBUG, 'sending info %s:%s to zeitgeist', media,
              interpretation)
     #subject
     subject_values = kw.get(
         "subject_values",
         {
             "interpretation":
             kw.get("subject_interpretation",
                    self.interpretation),  #FIXME get information from file
             "manifestation":
             kw.get("subject_manifestation",
                    unicode(Manifestation.FILE_DATA_OBJECT)),
             "uri":
             kw.get("uri", media.get(Metadata_Map.URL)),
             "current_uri":
             kw.get("current_uri", media.get(Metadata_Map.URL)),
             "origin":
             kw.get("origin",
                    media.get(Metadata_Map.URL, "").replace(".\/+", "\/")),
             "mimetype":
             kw.get("mimetype",
                    self.minetype),  #FIXME get information from file
             "text":
             kw.get(
                 "text", "%s - %s - %s - %s" %
                 (media.get(Metadata_Map.TRACK_NUMBER,
                            ""), media.get(Metadata_Map.TITLE, ""), "".join(
                                media.get(Metadata_Map.ARTIST, [])),
                  media.get(Metadata_Map.ALBUM, ""))),
             "storage":
             kw.get("storage",
                    self.storage),  #FIXME get information from file
         })
     subject = kw.get("subject", Subject.new_for_values(**subject_values))
     #event
     event_values = kw.get(
         "event_values", {
             "timestamp":
             int(time.time() * 1000),
             "actor":
             kw.get("actor", self.app_uri),
             "interpretation":
             kw.get("event_interpretation", interpretation),
             "manifestation":
             kw.get("event_manifestation",
                    Manifestation.EVENT_MANIFESTATION.SCHEDULED_ACTIVITY),
         })
     event = kw.get("event", Event.new_for_values(**event_values))
     event.append_subject(subject)
     #send this to zeitgeist
     self.client.insert_event(event)
     self.event_sent(event)
     self.log(logging.DEBUG, 'info %s:%s, was sent to zeitgeist', media,
              interpretation)
コード例 #57
0
def dict2event(d):
    ev = Event()
    ev[0][Event.Id] = d.get("id", "")
    ev.timestamp = d.get("timestamp", "")
    ev.interpretation = d.get("interpretation", "")
    ev.manifestation = d.get("manifestation", "")
    ev.actor = d.get("actor", "")
    ev.origin = d.get("origin", "")
    ev.payload = d.get("payload", "")

    subjects = d.get("subjects", [])
    for sd in subjects:
        subj = Subject()
        subj.uri = sd.get("uri", "")
        subj.current_uri = sd.get("current_uri", "")
        subj.interpretation = sd.get("interpretation", "")
        subj.manifestation = sd.get("manifestation", "")
        subj.origin = sd.get("origin", "")
        subj.current_origin = sd.get("current_origin", "")
        subj.mimetype = sd.get("mimetype", "")
        subj.text = sd.get("text", "")
        subj.storage = sd.get("storage", "")
        ev.append_subject(subj)
    return ev