From c7cea3d2786bd45c2d99193ee259bc3e8b27deb5 Mon Sep 17 00:00:00 2001 From: Abhay Rana Date: Fri, 3 Oct 2014 16:26:20 +0530 Subject: [PATCH] Adds firefox module that checks urls --- hackertray/__init__.py | 1 + hackertray/firefox.py | 30 ++++++++++++++++++++++++++++++ test/firefox_test.py | 15 +++++++++++++++ test/places.sqlite | Bin 0 -> 10485760 bytes 4 files changed, 46 insertions(+) create mode 100644 hackertray/firefox.py create mode 100644 test/firefox_test.py create mode 100644 test/places.sqlite diff --git a/hackertray/__init__.py b/hackertray/__init__.py index 5be0862..439b686 100644 --- a/hackertray/__init__.py +++ b/hackertray/__init__.py @@ -25,6 +25,7 @@ import signal from hackernews import HackerNews from chrome import Chrome +from firefox import Firefox from version import Version class HackerNewsApp: diff --git a/hackertray/firefox.py b/hackertray/firefox.py new file mode 100644 index 0000000..56a2041 --- /dev/null +++ b/hackertray/firefox.py @@ -0,0 +1,30 @@ +from __future__ import print_function +import sqlite3 +import shutil +import os +import sys + +class Firefox: + HISTORY_TMP_LOCATION = '/tmp/hackertray.firefox' + HISTORY_FILE_NAME = '/places.sqlite' + @staticmethod + def search(urls, config_folder_path): + Firefox.setup(config_folder_path) + conn = sqlite3.connect(Firefox.HISTORY_TMP_LOCATION) + db = conn.cursor() + result = [] + for url in urls: + db_result = db.execute('SELECT url from moz_places WHERE url=:url',{"url":url}) + if(db.fetchone() == None): + result.append(False) + else: + result.append(True) + os.remove(Firefox.HISTORY_TMP_LOCATION) + return result + @staticmethod + def setup(config_folder_path): + file_name = os.path.abspath(config_folder_path+Firefox.HISTORY_FILE_NAME) + if not os.path.isfile(file_name): + print("ERROR: ", "Could not find Firefox history file", file=sys.stderr) + sys.exit(1) + shutil.copyfile(file_name, Firefox.HISTORY_TMP_LOCATION) \ No newline at end of file diff --git a/test/firefox_test.py b/test/firefox_test.py new file mode 100644 index 0000000..5c5d28a --- /dev/null +++ b/test/firefox_test.py @@ -0,0 +1,15 @@ +import unittest +import os + +from hackertray import Firefox + +class ChromeTest(unittest.TestCase): + def runTest(self): + config_folder_path = os.getcwd()+'/test/' + data = Firefox.search([ + "http://www.hckrnews.com/", + "http://www.google.com/", + "http://wiki.ubuntu.com/", + "http://invalid_url/"], + config_folder_path) + self.assertTrue(data == [True,True,True,False]) \ No newline at end of file diff --git a/test/places.sqlite b/test/places.sqlite new file mode 100644 index 0000000000000000000000000000000000000000..4d6c00029a5e15643dac49f126e89fe5a0293396 GIT binary patch literal 10485760 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 z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ k0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HVZK+WbGC;$Ke literal 0 HcmV?d00001