def test_DBDelSelect(self):
        # DB操作をモックに置き換える
        with patch('DBControlar.sqlite3') as mocksql, freezegun.freeze_time(
                '2018-11-18 17:12:58'):
            mocksql.connect().cursor(
            ).execute.return_value = 'execute sql done'
            mocksql.connect().commit.return_value = 'commit done'
            controlar = DBControlar.DBControlar()

            expect = (
                "rowid_sample", ) + controlar._DBControlar__GetDelUpdateParam(
                    self.del_tweet_s)
            mocksql.connect().cursor().execute.return_value = [expect]

            t = date.today() - timedelta(1)
            w = "delete_done = 0 and created_at < '{}'".format(
                t.strftime('%Y-%m-%d'))
            expect_select_sql_s = "select * from DeleteTarget where " + w
            u = "delete_done = 1, deleted_at = '{}'".format(
                t.strftime('%Y-%m-%d'))
            expect_update_sql_s = "update DeleteTarget set {} where {}".format(
                u, w)

            # DB操作を伴う操作を行う
            actual = controlar.DBDelSelect()

            # DB操作が規定の引数で呼び出されたことを確認する
            mocksql.connect().cursor().execute.assert_any_call(
                expect_select_sql_s)
            mocksql.connect().cursor().execute.assert_any_call(
                expect_update_sql_s)

            # 取得した値の確認
            self.assertEqual(expect, actual[0])
    def test_DBRetweetSelect(self):
        # DB操作をモックに置き換える
        with patch('DBControlar.sqlite3') as mocksql, freezegun.freeze_time(
                '2018-11-18 17:12:58'):
            mocksql.connect().cursor(
            ).execute.return_value = 'execute sql done'
            controlar = DBControlar.DBControlar()
            expect = ("rowid_sample", "is_exist_save_file_flag_sample"
                      ) + controlar._DBControlar__GetUpdateParam(
                          self.img_url_s, self.tweet_s,
                          self.save_file_fullpath_s)
            mocksql.connect().cursor().execute.return_value = [expect]

            # DB操作を伴う操作を行う
            limit_s = 300
            actual = controlar.DBRetweetSelect(limit_s)

            # DB操作が規定の引数で呼び出されたことを確認する
            retweet_select_sql_s = controlar._DBControlar__GetRetweetSelectSQL(
                limit_s)
            mocksql.connect().cursor().execute.assert_called_once_with(
                retweet_select_sql_s)

            # 取得した値の確認
            self.assertEqual(self.img_url_s + ":orig", actual[0][3])
            self.assertEqual(self.tweet_url_s, actual[0][6])
            self.assertEqual(expect, actual[0])
    def test_DBDelInsert(self):
        # DB操作をモックに置き換える
        with patch('DBControlar.sqlite3') as mocksql, freezegun.freeze_time(
                '2018-11-18 17:12:58'):
            mocksql.connect().cursor(
            ).execute.return_value = 'execute sql done'
            mocksql.connect().commit.return_value = 'commit done'
            controlar = DBControlar.DBControlar()

            # DB操作を伴う操作を行う
            controlar.DBDelInsert(self.del_tweet_s)

            # DB操作が規定の引数で呼び出されたことを確認する
            param_s = controlar._DBControlar__GetDelUpdateParam(
                self.del_tweet_s)
            mocksql.connect().cursor().execute.assert_called_once_with(
                controlar._DBControlar__del_sql, param_s)
    def test_DBRetweetFlagUpdate(self):
        # DB操作をモックに置き換える
        with patch('DBControlar.sqlite3') as mocksql, freezegun.freeze_time(
                '2018-11-18 17:12:58'):
            mocksql.connect().cursor(
            ).execute.return_value = 'execute sql done'
            mocksql.connect().commit.return_value = 'commit done'
            controlar = DBControlar.DBControlar()

            # DB操作を伴う操作を行う
            controlar.DBRetweetFlagUpdate(self.img_filename_s)

            # DB操作が規定の引数で呼び出されたことを確認する
            retweet_flag_update_sql_s = controlar._DBControlar__GetRetweetFlagUpdateSQL(
                self.img_filename_s)
            mocksql.connect().cursor().execute.assert_called_once_with(
                retweet_flag_update_sql_s)
    def test_DBRetweetUpsert(self):
        # DB操作をモックに置き換える
        with patch('DBControlar.sqlite3') as mocksql, freezegun.freeze_time(
                '2018-11-18 17:12:58'):
            mocksql.connect().cursor(
            ).execute.return_value = 'execute sql done'
            mocksql.connect().commit.return_value = 'commit done'
            controlar = DBControlar.DBControlar()

            # DB操作を伴う操作を行う
            controlar.DBRetweetUpsert(self.img_url_s, self.tweet_s,
                                      self.save_file_fullpath_s)

            # DB操作が規定の引数で呼び出されたことを確認する
            param_s = controlar._DBControlar__GetUpdateParam(
                self.img_url_s, self.tweet_s, self.save_file_fullpath_s)
            retweet_sql_s = controlar._DBControlar__retweet_sql
            mocksql.connect().cursor().execute.assert_called_once_with(
                retweet_sql_s, param_s)
示例#6
0
    def __init__(self):
        self.config = configparser.SafeConfigParser()
        try:
            self.db_cont = DBControlar.DBControlar()
            if not self.config.read(self.CONFIG_FILE_NAME, encoding="utf8"):
                raise IOError

            config = self.config["twitter_token_keys"]
            self.TW_CONSUMER_KEY = config["consumer_key"]
            self.TW_CONSUMER_SECRET = config["consumer_secret"]
            self.TW_ACCESS_TOKEN_KEY = config["access_token"]
            self.TW_ACCESS_TOKEN_SECRET = config["access_token_secret"]

            config = self.config["line_token_keys"]
            self.LN_TOKEN_KEY = config["token_key"]

            self.save_retweet_path = os.path.abspath(
                self.config["save_directory"]["save_retweet_path"])

            # count * retweet_get_max_loop だけツイートをさかのぼる。
            self.user_name = self.config["tweet_timeline"]["user_name"]
            self.retweet_get_max_loop = int(
                self.config["tweet_timeline"]["retweet_get_max_loop"])
            self.count = int(self.config["tweet_timeline"]["count"])
        except IOError:
            print(CONFIG_FILE_NAME + " is not exist or cannot be opened.")
            exit(-1)
        except KeyError:
            ex, ms, tb = sys.exc_info()
            traceback.print_exception(ex, ms, tb)
            exit(-1)
        except Exception:
            ex, ms, tb = sys.exc_info()
            traceback.print_exception(ex, ms, tb)
            exit(-1)

        self.oath = OAuth1Session(self.TW_CONSUMER_KEY,
                                  self.TW_CONSUMER_SECRET,
                                  self.TW_ACCESS_TOKEN_KEY,
                                  self.TW_ACCESS_TOKEN_SECRET)

        self.max_id = None
示例#7
0
</html>
'''
th_template = '''<th>
     <div style="position: relative; width: {pic_width}px;" >
      <a href="{url}" target="_blank">
      <img border="0" src="{url}" alt="{url}" width="{pic_width}px">
      </a>
      <a href="{tweet_url}" target="_blank">
      <img src="{pointer_path}" alt="pointer"
       style="opacity: 0.5; position: absolute; right: 10px; bottom: 10px;"  />
      </a>
     </div>
    </th>
'''
POINTER_PATH = './pointer.png'
db_cont = DBControlar.DBControlar()


def MakeTHTag(url, tweet_url):
    pic_width = 256
    return th_template.format(pic_width=pic_width,
                              url=url,
                              tweet_url=tweet_url,
                              pointer_path=POINTER_PATH)


def WriteFavHTML(del_url_list):
    db = db_cont.DBFavSelect()
    res = ''

    COLUMN_NUM = 5
    def test_SQLText(self):
        # 使用するSQL構文をチェックする
        # 実際にDB操作はしないためモックは省略
        controlar = DBControlar.DBControlar()

        p1 = 'img_filename,url,url_large,'
        p2 = 'tweet_id,tweet_url,created_at,user_id,user_name,screan_name,tweet_text,'
        p3 = 'saved_localpath,saved_created_at'
        pn = '?,?,?,?,?,?,?,?,?,?,?,?'
        expect = 'replace into Favorite (' + p1 + p2 + p3 + ') values (' + pn + ')'
        actual = controlar._DBControlar__fav_sql
        self.assertEqual(expect, actual)

        p1 = 'img_filename,url,url_large,'
        p2 = 'tweet_id,tweet_url,created_at,user_id,user_name,screan_name,tweet_text,'
        p3 = 'saved_localpath,saved_created_at'
        pn = '?,?,?,?,?,?,?,?,?,?,?,?'
        expect = 'replace into Retweet (' + p1 + p2 + p3 + ') values (' + pn + ')'
        actual = controlar._DBControlar__retweet_sql
        self.assertEqual(expect, actual)

        p1 = 'tweet_id,delete_done,created_at,deleted_at,tweet_text,add_num,del_num'
        pn = '?,?,?,?,?,?,?'
        expect = 'replace into DeleteTarget (' + p1 + ') values (' + pn + ')'
        actual = controlar._DBControlar__del_sql
        self.assertEqual(expect, actual)

        limit_s = 300
        expect = 'select * from Favorite order by id desc limit {}'.format(
            limit_s)
        actual = controlar._DBControlar__GetFavoriteSelectSQL(limit_s)
        self.assertEqual(expect, actual)

        limit_s = 300
        expect = 'select * from Retweet where is_exist_saved_file = \'True\' order by id desc limit {}'.format(
            limit_s)
        actual = controlar._DBControlar__GetRetweetSelectSQL(limit_s)
        self.assertEqual(expect, actual)

        expect = 'update Retweet set is_exist_saved_file = 0 where img_filename = \'{}\''.format(
            self.img_filename_s)
        actual = controlar._DBControlar__GetRetweetFlagUpdateSQL(
            self.img_filename_s)
        self.assertEqual(expect, actual)

        with freezegun.freeze_time('2018-11-18 17:12:58'):
            url_orig_s = self.img_url_s + ":orig"
            td_format_s = '%a %b %d %H:%M:%S +0000 %Y'
            dts_format_s = '%Y-%m-%d %H:%M:%S'
            tca = self.tweet_s["created_at"]
            dst = datetime.strptime(tca, td_format_s)
            expect = (os.path.basename(self.img_url_s), url_orig_s,
                      self.img_url_s + ":large", self.tweet_s["id_str"],
                      self.tweet_s["entities"]["media"][0]["expanded_url"],
                      dst.strftime(dts_format_s),
                      self.tweet_s["user"]["id_str"],
                      self.tweet_s["user"]["name"],
                      self.tweet_s["user"]["screen_name"],
                      self.tweet_s["text"], self.save_file_fullpath_s,
                      datetime.now().strftime(dts_format_s))
            actual = controlar._DBControlar__GetUpdateParam(
                self.img_url_s, self.tweet_s, self.save_file_fullpath_s)
            self.assertEqual(expect, actual)