diff --git a/crawler.py b/crawler.py index dd06988..6ea9160 100644 --- a/crawler.py +++ b/crawler.py @@ -3,7 +3,7 @@ from storage import Task, LocalStorage import json from multiprocessing import Process, Value from apscheduler.schedulers.background import BackgroundScheduler -from parsing import GenericFileParser, Md5CheckSumCalculator, ExtensionMimeGuesser +from parsing import GenericFileParser, Md5CheckSumCalculator, ExtensionMimeGuesser, MediaFileParser, TextFileParser from indexer import Indexer from search import Search from thumbnail import ThumbnailGenerator @@ -34,17 +34,21 @@ class Crawler: self.ext_map = {} for parser in self.enabled_parsers: - for ext in parser.extensions: + for ext in parser.mime_types: self.ext_map[ext] = parser def crawl(self, root_dir: str, counter: Value=None): + mime_guesser = ExtensionMimeGuesser() #todo config + for root, dirs, files in os.walk(root_dir): for filename in files: full_path = os.path.join(root, filename) - parser = self.ext_map.get(os.path.splitext(filename)[1], self.default_parser) + mime = mime_guesser.guess_mime(full_path) + + parser = self.ext_map.get(mime, self.default_parser) try: if counter: @@ -97,7 +101,7 @@ class TaskManager: self.current_process.start() def execute_crawl(self, path: str, counter: Value, done: Value, directory: int): - c = Crawler([GenericFileParser([], ExtensionMimeGuesser())]) + c = Crawler([GenericFileParser([]), MediaFileParser([]), TextFileParser([], 1024)]) c.crawl(path, counter) # todo: create indexer inside the crawler and index every X files diff --git a/indexer.py b/indexer.py index 46692ce..5eff96f 100644 --- a/indexer.py +++ b/indexer.py @@ -35,8 +35,6 @@ class Indexer: Creates a insert string for sending to elasticsearch """ - print("Creating bulk index string...") - result = "" action_string = '{"index":{}}\n' @@ -46,8 +44,6 @@ class Indexer: result += action_string result += json.dumps(doc) + "\n" - print(result) - return result def index(self, docs: list, directory: int): diff --git a/parsing.py b/parsing.py index a4e897a..427d990 100644 --- a/parsing.py +++ b/parsing.py @@ -2,6 +2,10 @@ import hashlib import magic import os import mimetypes +import subprocess +import json +import chardet +from PIL import Image class MimeGuesser: @@ -26,9 +30,11 @@ class ExtensionMimeGuesser(MimeGuesser): class FileParser: - extensions = [] + mime_types = [] is_default = False - pass + + def parse(self, full_path: str): + raise NotImplemented class FileCheckSumCalculator: @@ -104,13 +110,12 @@ class Sha256CheckSumCalculator(FileCheckSumCalculator): class GenericFileParser(FileParser): - extensions = [] + mime_types = [] is_default = True - def __init__(self, checksum_calculators: list, mime_guesser: MimeGuesser): + def __init__(self, checksum_calculators: list): self.checksum_calculators = checksum_calculators - self.mime_guesser = mime_guesser def parse(self, full_path: str) -> dict: """ @@ -128,10 +133,229 @@ class GenericFileParser(FileParser): info["path"] = path info["name"] = name info["mtime"] = file_stat.st_mtime - info["mime"] = self.mime_guesser.guess_mime(full_path) for calculator in self.checksum_calculators: info[calculator.name] = calculator.checksum(full_path) return info + +class MediaFileParser(GenericFileParser): + + is_default = False + relevant_properties = ["bit_rate", "nb_streams", "duration", "format_name", "format_long_name"] + + def __init__(self, checksum_calculators: list): + super().__init__(checksum_calculators) + + self.mime_types = [ + "video/3gpp", + "video/mp4", + "video/mpeg", + "video/ogg", + "video/quicktime", + "video/webm", + "video/x-flv", + "video/x-mng", + "video/x-ms-asf", + "video/x-ms-wmv", + "video/x-msvideo", + "audio/basic", + "auido/L24", + "audio/mid", + "audio/mpeg", + "audio/mp4", + "audio/x-aiff", + "audio/ogg", + "audio/vorbis" + "audio/x-realaudio", + "audio/x-wav" + ] + + def parse(self, full_path: str): + info = super().parse(full_path) + + print("video/audio : " + full_path) + + result = subprocess.run(["ffprobe", "-v", "quiet", "-print_format", "json", "-show_format", full_path], + stdout=subprocess.PIPE) + + metadata = json.loads(result.stdout.decode("utf-8")) + + if "format" in metadata: + + if "bit_rate" in metadata["format"]: + info["bit_rate"] = int(metadata["format"]["bit_rate"]) + + if "nb_streams" in metadata["format"]: + info["nb_streams"] = int(metadata["format"]["nb_streams"]) + + if "duration" in metadata["format"]: + info["duration"] = float(metadata["format"]["duration"]) + + if "format_name" in metadata["format"]: + info["format_name"] = metadata["format"]["format_name"] + + if "format_long_name" in metadata["format"]: + info["format_long_name"] = metadata["format"]["format_long_name"] + + return info + + +class PictureFileParser(GenericFileParser): + + is_default = False + + def __init__(self, checksum_calculators: list): + super().__init__(checksum_calculators) + + self.mime_types = [ + "image/bmp", + "image/cgm", + "image/cis-cod", + "image/g3fax", + "image/gif", + "image/ief", + "image/jpeg", + "image/ktx", + "image/pipeg", + "image/pjpeg", + "image/png", + "image/prs.btif", + "image/svg+xml", + "image/tiff", + "image/vnd.adobe.photoshop", + "image/vnd.dece.graphic", + "image/vnd.djvu", + "image/vnd.dvb.subtitle", + "image/vnd.dwg", + "image/vnd.dxf", + "image/vnd.fastbidsheet", + "image/vnd.fpx", + "image/vnd.fst", + "image/vnd.fujixerox.edmics-mmr", + "image/vnd.fujixerox.edmics-rlc", + "image/vnd.ms-modi", + "image/vnd.net-fpx", + "image/vnd.wap.wbmp", + "image/vnd.xiff", + "image/webp", + "image/x-citrix-jpeg", + "image/x-citrix-png", + "image/x-cmu-raster", + "image/x-cmx", + "image/x-freehand", + "image/x-icon", + "image/x-pcx", + "image/x-pict", + "image/x-png", + "image/x-portable-anymap", + "image/x-portable-bitmap", + "image/x-portable-graymap", + "image/x-portable-pixmap", + "image/x-rgb", + "image/x-xbitmap", + "image/x-xpixmap", + "image/x-xwindowdump" + ] + + def parse(self, full_path: str): + + info = super().parse(full_path) + + print("picture") + + with open(full_path, "rb") as image_file: + with Image.open(image_file) as image: + + info["mode"] = image.mode + info["format"] = image.format + info["width"] = image.width + info["height"] = image.height + + return info + + +class TextFileParser(GenericFileParser): + + is_default = False + + def __init__(self, checksum_calculators: list, content_lenght: int): + super().__init__(checksum_calculators) + self.content_lenght = content_lenght + + self.mime_types = [ + "text/asp", + "text/css", + "text/ecmascript", + "text/html", + "text/javascript", + "text/mcf", + "text/pascal", + "text/plain", + "text/richtext", + "text/scriplet", + "text/sgml", + "text/tab-separated-values", + "text/uri-list", + "text/vnd.abc", + "text/vnd.fmi.flexstor", + "text/vnd.rn-realtext", + "text/vnd.wap.wml", + "text/vnd.wap.wmlscript", + "text/webviewhtml", + "text/x-asm", + "text/x-audiosoft-intra", + "text/x-c", + "text/x-component", + "text/x-fortran", + "text/x-h", + "text/x-java-source", + "text/x-la-asf", + "text/x-m", + "text/x-pascal", + "text/x-script", + "text/x-script.csh", + "text/x-script.elisp", + "text/x-script.guile", + "text/x-script.ksh", + "text/x-script.lisp", + "text/x-script.perl", + "text/x-script.perl-module", + "text/x-script.phyton", + "text/x-script.rexx", + "text/x-script.scheme", + "text/x-script.sh", + "text/x-script.tcl", + "text/x-script.tcsh", + "text/x-script.zsh", + "text/x-server-parsed-html", + "text/x-setext", + "text/x-sgml", + "text/x-speech", + "text/x-uil", + "text/x-uuencode", + "text/x-vcalendar", + "text/xml" + ] + + def parse(self, full_path: str): + + info = super().parse(full_path) + + with open(full_path, "rb") as text_file: + + raw_content = text_file.read(self.content_lenght) + + chardet.detect(raw_content) + encoding = chardet.detect(raw_content)["encoding"] + + if encoding is not None: + + print(full_path) + print(encoding) + + info["encoding"] = encoding + info["content"] = raw_content.decode(encoding, "ignore") + + return info diff --git a/requirements.txt b/requirements.txt index 3d0e91d..d53d9b3 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,4 +4,7 @@ flask_bcrypt elasticsearch python-magic requests -apscheduler \ No newline at end of file +apscheduler +ffmpeg-python +fonttools +chardet \ No newline at end of file diff --git a/run.py b/run.py index bc8c954..d2699c3 100644 --- a/run.py +++ b/run.py @@ -8,7 +8,7 @@ app = Flask(__name__) app.secret_key = "A very secret key" storage = LocalStorage("local_storage.db") -# tm = TaskManager(storage) +tm = TaskManager(storage) @app.route("/") @@ -32,6 +32,7 @@ def directory_add(): d = Directory(path, True, [], name) try: + d.set_default_options() storage.save_directory(d) flash("Created directory", "success") except DuplicateDirectoryException: diff --git a/spec/Crawler_spec.py b/spec/Crawler_spec.py index 9fdc903..9cd3c2e 100644 --- a/spec/Crawler_spec.py +++ b/spec/Crawler_spec.py @@ -8,7 +8,7 @@ class CrawlerTest(TestCase): def test_dir_walk(self): - c = Crawler([GenericFileParser([Sha1CheckSumCalculator()], ExtensionMimeGuesser())]) + c = Crawler([GenericFileParser([Sha1CheckSumCalculator()])]) c.crawl("test_folder") diff --git a/spec/FileParser_spec.py b/spec/FileParser_spec.py index 8e0aadf..fa9763f 100644 --- a/spec/FileParser_spec.py +++ b/spec/FileParser_spec.py @@ -16,7 +16,7 @@ class GenericFileParserTest(TestCase): test_file.close() os.utime("test_parse.txt", (1330123456, 1330654321)) - self.parser = GenericFileParser([Md5CheckSumCalculator()], ExtensionMimeGuesser()) + self.parser = GenericFileParser([Md5CheckSumCalculator()]) def tearDown(self): os.remove("test_parse.txt") @@ -42,11 +42,6 @@ class GenericFileParserTest(TestCase): self.assertEqual(result["mtime"], 1330654321) - def test_mime(self): - - result = self.parser.parse("test_parse.txt") - self.assertEqual(result["mime"], "text/plain") - class Md5CheckSumCalculatorTest(TestCase): diff --git a/spec/MediaFileParser_spec.py b/spec/MediaFileParser_spec.py new file mode 100644 index 0000000..8e8cbb2 --- /dev/null +++ b/spec/MediaFileParser_spec.py @@ -0,0 +1,46 @@ +from unittest import TestCase +from parsing import MediaFileParser + + +class MediaFileParserTest(TestCase): + + def test_audio_wav(self): + + parser = MediaFileParser([]) + + info = parser.parse("test_files/cat1.wav") + + self.assertEqual(info["bit_rate"], 256044) + self.assertEqual(info["format_name"], "wav") + self.assertEqual(info["format_long_name"], "WAV / WAVE (Waveform Audio)") + self.assertEqual(info["duration"], 20.173875) + + def test_video_mov(self): + parser = MediaFileParser([]) + + info = parser.parse("test_files/vid1.mp4") + + self.assertEqual(info["bit_rate"], 513012) + self.assertEqual(info["format_name"], "mov,mp4,m4a,3gp,3g2,mj2") + self.assertEqual(info["format_long_name"], "QuickTime / MOV") + self.assertEqual(info["duration"], 5.334) + + def test_video_webm(self): + parser = MediaFileParser([]) + + info = parser.parse("test_files/vid2.webm") + + self.assertEqual(info["bit_rate"], 343153) + self.assertEqual(info["format_name"], "matroska,webm") + self.assertEqual(info["format_long_name"], "Matroska / WebM") + self.assertEqual(info["duration"], 10.619) + + def test_video_ogg(self): + parser = MediaFileParser([]) + + info = parser.parse("test_files/vid3.ogv") + + self.assertEqual(info["bit_rate"], 590261) + self.assertEqual(info["format_name"], "ogg") + self.assertEqual(info["format_long_name"], "Ogg") + self.assertEqual(info["duration"], 10.618867) diff --git a/spec/PictureFileParser_spec.py b/spec/PictureFileParser_spec.py new file mode 100644 index 0000000..e94a489 --- /dev/null +++ b/spec/PictureFileParser_spec.py @@ -0,0 +1,49 @@ +from unittest import TestCase +from parsing import PictureFileParser + + +class PictureFileParserTest(TestCase): + + def test_parse_jpg(self): + + parser = PictureFileParser([]) + + info = parser.parse("test_folder/sample_1.jpg") + + self.assertEqual(info["mode"], "RGB") + self.assertEqual(info["width"], 420) + self.assertEqual(info["height"], 315) + self.assertEqual(info["format"], "JPEG") + + def test_parse_png(self): + + parser = PictureFileParser([]) + + info = parser.parse("test_folder/sample_5.png") + + self.assertEqual(info["mode"], "RGBA") + self.assertEqual(info["width"], 288) + self.assertEqual(info["height"], 64) + self.assertEqual(info["format"], "PNG") + + def test_parse_gif(self): + + parser = PictureFileParser([]) + + info = parser.parse("test_folder/sample_6.gif") + + self.assertEqual(info["mode"], "P") + self.assertEqual(info["width"], 420) + self.assertEqual(info["height"], 315) + self.assertEqual(info["format"], "GIF") + + def test_parse_bmp(self): + + parser = PictureFileParser([]) + + info = parser.parse("test_folder/sample_7.bmp") + + self.assertEqual(info["mode"], "RGB") + self.assertEqual(info["width"], 150) + self.assertEqual(info["height"], 200) + self.assertEqual(info["format"], "BMP") diff --git a/spec/TextFileParser_spec.py b/spec/TextFileParser_spec.py new file mode 100644 index 0000000..e803e1a --- /dev/null +++ b/spec/TextFileParser_spec.py @@ -0,0 +1,15 @@ +from unittest import TestCase +from parsing import TextFileParser + + +class TextFileParserTest(TestCase): + + def test_parse_csv(self): + + parser = TextFileParser([], 12345) + + info = parser.parse("test_files/text.csv") + + self.assertTrue(info["content"].startswith("rosbagTimestamp,header,seq,stamp,secs,nsecs,")) + self.assertEqual(len(info["content"]), 12345) + self.assertEqual(info["encoding"], "ascii") diff --git a/spec/test_files/cat1.wav b/spec/test_files/cat1.wav new file mode 100644 index 0000000..aecdea3 Binary files /dev/null and b/spec/test_files/cat1.wav differ diff --git a/spec/test_files/sample sources.txt b/spec/test_files/sample sources.txt new file mode 100644 index 0000000..593d87f --- /dev/null +++ b/spec/test_files/sample sources.txt @@ -0,0 +1,4 @@ +cat1.wav https://archive.org/details/BoulangerColette +vid1.mp4 https://archive.org/details/electricsheep-flock-244-32500-1/ +vid2-5 https://archive.org/details/Virginia_Helicopter_Crash +text.csv https://archive.org/details/drive-vector_csv2 \ No newline at end of file diff --git a/spec/test_files/text.csv b/spec/test_files/text.csv new file mode 100644 index 0000000..8aba93b --- /dev/null +++ b/spec/test_files/text.csv @@ -0,0 +1,242 @@ +rosbagTimestamp,header,seq,stamp,secs,nsecs,frame_id,status,status,service,latitude,longitude,altitude,position_covariance,position_covariance_type +1497155692699200530,,7,,1491157579,160773992,/imu,,0,1,39.5369442,-122.3383189,70.212,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155692944880129,,8,,1491157579,405828952,/imu,,0,1,39.5369442,-122.3383189,70.214,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155693205080145,,9,,1491157579,662808895,/imu,,0,1,39.5369442,-122.338319,70.217,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155693448665182,,10,,1491157579,910070896,/imu,,0,1,39.5369442,-122.338319,70.22,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155693701357896,,11,,1491157580,160749912,/imu,,0,1,39.5369442,-122.338319,70.224,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155693948406723,,12,,1491157580,410056114,/imu,,0,1,39.5369443,-122.3383191,70.222,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155694199249441,,13,,1491157580,660702943,/imu,,0,1,39.5369443,-122.3383191,70.224,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155694450031554,,14,,1491157580,910502910,/imu,,0,1,39.5369442,-122.3383192,70.228,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155694698414318,,15,,1491157581,159912109,/imu,,0,1,39.5369442,-122.3383192,70.232,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155694950937611,,16,,1491157581,410650968,/imu,,0,1,39.5369442,-122.3383192,70.234,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155695200456558,,17,,1491157581,661637067,/imu,,0,1,39.5369442,-122.3383192,70.236,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155695449647452,,18,,1491157581,910274028,/imu,,0,1,39.5369442,-122.3383193,70.241,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155695696654172,,19,,1491157582,156757116,/imu,,0,1,39.5369442,-122.3383193,70.246,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155695950408543,,20,,1491157582,411731958,/imu,,0,1,39.5369441,-122.3383193,70.248,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155696198959694,,21,,1491157582,660002946,/imu,,0,1,39.5369441,-122.3383193,70.253,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155696450044493,,22,,1491157582,910267114,/imu,,0,1,39.5369441,-122.3383193,70.26,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155696698862343,,23,,1491157583,159172058,/imu,,0,1,39.536944,-122.3383193,70.264,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155696949976702,,24,,1491157583,411098003,/imu,,0,1,39.536944,-122.3383193,70.265,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155697196047935,,25,,1491157583,657394886,/imu,,0,1,39.536944,-122.3383193,70.268,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155697449888530,,26,,1491157583,911263942,/imu,,0,1,39.536944,-122.3383193,70.273,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155697702363698,,27,,1491157584,160381078,/imu,,0,1,39.536944,-122.3383193,70.275,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155697951978681,,28,,1491157584,412154912,/imu,,0,1,39.536944,-122.3383193,70.277,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155698198757549,,29,,1491157584,660244941,/imu,,0,1,39.536944,-122.3383193,70.282,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155698449013208,,30,,1491157584,907248020,/imu,,0,1,39.536944,-122.3383193,70.283,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155698698816621,,31,,1491157585,160113096,/imu,,0,1,39.536944,-122.3383193,70.286,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155698951458599,,32,,1491157585,410294055,/imu,,0,1,39.536944,-122.3383193,70.29,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155699201636690,,33,,1491157585,660209894,/imu,,0,1,39.536944,-122.3383193,70.292,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155699450118119,,34,,1491157585,910845041,/imu,,0,1,39.536944,-122.3383193,70.29,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155699701400647,,35,,1491157586,162636995,/imu,,0,1,39.5369439,-122.3383193,70.293,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155699944604249,,36,,1491157586,405736923,/imu,,0,1,39.5369439,-122.3383193,70.297,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155700198733961,,37,,1491157586,660314083,/imu,,0,1,39.5369439,-122.3383193,70.3,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155700448780955,,38,,1491157586,910307884,/imu,,0,1,39.5369439,-122.3383193,70.299,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155700699622454,,39,,1491157587,160471916,/imu,,0,1,39.5369439,-122.3383193,70.302,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155700948941462,,40,,1491157587,410373926,/imu,,0,1,39.5369439,-122.3383192,70.303,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155701194175133,,41,,1491157587,655395030,/imu,,0,1,39.5369439,-122.338319,70.311,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155701450504697,,42,,1491157587,911648988,/imu,,0,1,39.5369439,-122.3383188,70.307,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155701698065310,,43,,1491157588,159014940,/imu,,0,1,39.5369439,-122.3383186,70.306,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155701949455364,,44,,1491157588,410485029,/imu,,0,1,39.5369439,-122.3383184,70.303,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155702199158214,,45,,1491157588,660476922,/imu,,0,1,39.5369438,-122.3383179,70.305,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155702448983975,,46,,1491157588,910530090,/imu,,0,1,39.5369438,-122.3383174,70.301,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155702695878475,,47,,1491157589,155520915,/imu,,0,1,39.5369439,-122.3383166,70.299,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155702949338529,,48,,1491157589,410665035,/imu,,0,1,39.536944,-122.3383156,70.302,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155703199315450,,49,,1491157589,659708023,/imu,,0,1,39.5369441,-122.338314,70.291,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155703449223652,,50,,1491157589,910044908,/imu,,0,1,39.5369443,-122.3383119,70.296,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155703699304461,,51,,1491157590,160664081,/imu,,0,1,39.5369446,-122.3383092,70.304,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155703947999966,,52,,1491157590,408267974,/imu,,0,1,39.536945,-122.3383059,70.307,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155704199853653,,53,,1491157590,659373998,/imu,,0,1,39.5369455,-122.338302,70.313,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155704449923828,,54,,1491157590,910463094,/imu,,0,1,39.5369461,-122.3382978,70.319,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155704699914812,,55,,1491157591,160336017,/imu,,0,1,39.5369469,-122.3382933,70.331,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155704949678326,,56,,1491157591,410551071,/imu,,0,1,39.5369476,-122.3382886,70.342,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155705198275100,,57,,1491157591,659427881,/imu,,0,1,39.5369484,-122.3382839,70.346,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155705444401125,,58,,1491157591,905611038,/imu,,0,1,39.5369493,-122.338279,70.36,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155705697950603,,59,,1491157592,159246921,/imu,,0,1,39.5369501,-122.3382739,70.364,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155705947898569,,60,,1491157592,409276008,/imu,,0,1,39.5369509,-122.3382685,70.373,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155706201433941,,61,,1491157592,662067890,/imu,,0,1,39.5369517,-122.338263,70.384,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155706448094672,,62,,1491157592,909292936,/imu,,0,1,39.5369524,-122.3382572,70.394,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155706697164634,,63,,1491157593,158289909,/imu,,0,1,39.5369529,-122.3382512,70.409,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155706949400478,,64,,1491157593,410562038,/imu,,0,1,39.5369532,-122.3382449,70.431,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155707197712675,,65,,1491157593,659317970,/imu,,0,1,39.5369534,-122.3382385,70.439,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155707449055767,,66,,1491157593,909921884,/imu,,0,1,39.5369533,-122.3382317,70.451,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155707699543833,,67,,1491157594,161025047,/imu,,0,1,39.5369529,-122.3382246,70.466,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155707961802428,,68,,1491157594,423089027,/imu,,0,1,39.5369518,-122.338217,70.474,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155708194211324,,69,,1491157594,654262065,/imu,,0,1,39.5369504,-122.3382094,70.483,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155708448727185,,70,,1491157594,910130023,/imu,,0,1,39.5369486,-122.3382016,70.496,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155708697043657,,71,,1491157595,158277034,/imu,,0,1,39.5369461,-122.3381937,70.499,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155708948969008,,72,,1491157595,409624099,/imu,,0,1,39.5369429,-122.3381858,70.507,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155709197035651,,73,,1491157595,658170938,/imu,,0,1,39.536939,-122.3381781,70.515,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155709447997402,,74,,1491157595,908169031,/imu,,0,1,39.5369342,-122.3381705,70.519,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155709697805161,,75,,1491157596,158976078,/imu,,0,1,39.5369286,-122.3381634,70.518,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155709946710876,,76,,1491157596,408154964,/imu,,0,1,39.5369223,-122.3381568,70.513,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155710198099025,,77,,1491157596,659354925,/imu,,0,1,39.5369152,-122.3381508,70.509,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155710461332047,,78,,1491157596,908322095,/imu,,0,1,39.5369073,-122.3381455,70.5,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155710696766355,,79,,1491157597,157232999,/imu,,0,1,39.5368988,-122.3381409,70.5,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155710945343303,,80,,1491157597,405055046,/imu,,0,1,39.5368897,-122.338137,70.488,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155711195932659,,81,,1491157597,657205104,/imu,,0,1,39.5368799,-122.3381338,70.478,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155711449236169,,82,,1491157597,910403966,/imu,,0,1,39.5368697,-122.3381311,70.457,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155711698383488,,83,,1491157598,159436941,/imu,,0,1,39.536859,-122.3381288,70.442,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155711949212672,,84,,1491157598,409419059,/imu,,0,1,39.5368479,-122.338127,70.425,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155712198051260,,85,,1491157598,658176898,/imu,,0,1,39.5368365,-122.3381256,70.399,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155712447853905,,86,,1491157598,909332036,/imu,,0,1,39.5368248,-122.3381244,70.371,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155712696731825,,87,,1491157599,157332897,/imu,,0,1,39.5368128,-122.3381235,70.343,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155712946995774,,88,,1491157599,408145904,/imu,,0,1,39.5368005,-122.3381226,70.311,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155713198037946,,89,,1491157599,659293889,/imu,,0,1,39.536788,-122.3381218,70.282,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155713449059897,,90,,1491157599,908636093,/imu,,0,1,39.5367753,-122.3381209,70.252,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155713696473516,,91,,1491157600,155035018,/imu,,0,1,39.5367625,-122.33812,70.214,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155713947725083,,92,,1491157600,409291982,/imu,,0,1,39.5367494,-122.3381191,70.186,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155714198662068,,93,,1491157600,659518003,/imu,,0,1,39.5367362,-122.338118,70.148,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155714449562923,,94,,1491157600,910015106,/imu,,0,1,39.536723,-122.3381169,70.11,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155714697863656,,95,,1491157601,157715082,/imu,,0,1,39.5367096,-122.3381157,70.072,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155714948745712,,96,,1491157601,408838033,/imu,,0,1,39.5366958,-122.3381144,70.027,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155715195767761,,97,,1491157601,657129049,/imu,,0,1,39.536682,-122.3381131,69.99,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155715447829133,,98,,1491157601,908929109,/imu,,0,1,39.5366681,-122.3381119,69.978,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155715695767183,,99,,1491157602,157166957,/imu,,0,1,39.5366541,-122.3381105,69.96,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155715946697363,,100,,1491157602,408101081,/imu,,0,1,39.5366399,-122.3381089,69.927,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155716202546429,,101,,1491157602,663192987,/imu,,0,1,39.5366256,-122.3381071,69.874,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155716443188249,,102,,1491157602,903445005,/imu,,0,1,39.5366112,-122.3381053,69.828,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155716700709390,,103,,1491157603,159765958,/imu,,0,1,39.5365969,-122.3381034,69.787,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155716947885611,,104,,1491157603,408421993,/imu,,0,1,39.5365826,-122.3381016,69.76,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155717198205716,,105,,1491157603,659338951,/imu,,0,1,39.5365682,-122.3380997,69.734,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155717449897379,,106,,1491157603,910563945,/imu,,0,1,39.5365539,-122.3380977,69.697,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155717699204075,,107,,1491157604,160567998,/imu,,0,1,39.5365395,-122.3380958,69.663,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155717948976167,,108,,1491157604,410216093,/imu,,0,1,39.5365252,-122.3380938,69.632,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155718199116389,,109,,1491157604,660048007,/imu,,0,1,39.5365109,-122.3380919,69.597,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155718448483108,,110,,1491157604,909468889,/imu,,0,1,39.5364967,-122.3380899,69.567,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155718696669528,,111,,1491157605,158133029,/imu,,0,1,39.5364825,-122.338088,69.529,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155718949947850,,112,,1491157605,409681081,/imu,,0,1,39.5364684,-122.338086,69.502,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155719194649958,,113,,1491157605,654079914,/imu,,0,1,39.5364544,-122.3380841,69.475,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155719447786542,,114,,1491157605,909197092,/imu,,0,1,39.5364404,-122.3380821,69.443,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155719698886630,,115,,1491157606,159821987,/imu,,0,1,39.5364264,-122.3380801,69.418,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155719949318966,,116,,1491157606,410510063,/imu,,0,1,39.5364126,-122.3380781,69.391,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155720199181745,,117,,1491157606,660552978,/imu,,0,1,39.5363988,-122.3380761,69.361,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155720450661321,,118,,1491157606,910518884,/imu,,0,1,39.5363849,-122.3380741,69.335,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155720697685441,,119,,1491157607,157399892,/imu,,0,1,39.5363712,-122.3380721,69.301,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155720949137584,,120,,1491157607,410551071,/imu,,0,1,39.5363575,-122.33807,69.259,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155721196739895,,121,,1491157607,658086061,/imu,,0,1,39.5363438,-122.3380679,69.223,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155721450502865,,122,,1491157607,911902904,/imu,,0,1,39.5363301,-122.3380659,69.182,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155721698386959,,123,,1491157608,159539937,/imu,,0,1,39.5363164,-122.3380638,69.148,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155721948297985,,124,,1491157608,406718969,/imu,,0,1,39.5363027,-122.3380617,69.113,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155722198180314,,125,,1491157608,659586906,/imu,,0,1,39.5362891,-122.3380596,69.072,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155722455147462,,126,,1491157608,909884929,/imu,,0,1,39.5362755,-122.3380574,69.035,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155722696254636,,127,,1491157609,157794952,/imu,,0,1,39.5362621,-122.3380553,69.001,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155722948033178,,128,,1491157609,409248113,/imu,,0,1,39.5362489,-122.3380532,68.973,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155723200398236,,129,,1491157609,660497903,/imu,,0,1,39.5362359,-122.3380512,68.944,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155723449069302,,130,,1491157609,910171985,/imu,,0,1,39.5362232,-122.3380492,68.918,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155723699161031,,131,,1491157610,160501003,/imu,,0,1,39.5362108,-122.3380472,68.891,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155723949209172,,132,,1491157610,410502910,/imu,,0,1,39.5361988,-122.3380453,68.867,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155724199154816,,133,,1491157610,660494089,/imu,,0,1,39.5361869,-122.3380434,68.841,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155724447510129,,134,,1491157610,908545970,/imu,,0,1,39.5361751,-122.3380415,68.821,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155724694232025,,135,,1491157611,155545949,/imu,,0,1,39.5361635,-122.3380396,68.796,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155724948094596,,136,,1491157611,407845973,/imu,,0,1,39.5361521,-122.3380378,68.766,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155725197259839,,137,,1491157611,658011913,/imu,,0,1,39.5361408,-122.3380359,68.743,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155725449143011,,138,,1491157611,910495042,/imu,,0,1,39.5361297,-122.3380341,68.716,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155725702664448,,139,,1491157612,160501003,/imu,,0,1,39.5361187,-122.3380324,68.693,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155725949242269,,140,,1491157612,410589933,/imu,,0,1,39.536108,-122.3380306,68.661,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155726201790455,,141,,1491157612,662151098,/imu,,0,1,39.5360974,-122.3380289,68.632,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155726449120790,,142,,1491157612,910515069,/imu,,0,1,39.536087,-122.3380272,68.604,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155726696834146,,143,,1491157613,157763004,/imu,,0,1,39.5360769,-122.3380256,68.571,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155726949004947,,144,,1491157613,410432100,/imu,,0,1,39.536067,-122.338024,68.546,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155727195714645,,145,,1491157613,656830072,/imu,,0,1,39.5360573,-122.3380225,68.516,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155727441578678,,146,,1491157613,903002977,/imu,,0,1,39.5360477,-122.338021,68.486,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155727696844359,,147,,1491157614,157660961,/imu,,0,1,39.5360383,-122.3380195,68.457,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155727951494080,,148,,1491157614,409310102,/imu,,0,1,39.5360291,-122.3380181,68.428,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155728201405196,,149,,1491157614,659255981,/imu,,0,1,39.5360201,-122.3380167,68.388,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155728447835451,,150,,1491157614,908274888,/imu,,0,1,39.5360113,-122.3380154,68.372,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155728702189170,,151,,1491157615,160244941,/imu,,0,1,39.5360029,-122.3380143,68.344,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155728946960581,,152,,1491157615,408008098,/imu,,0,1,39.5359949,-122.3380134,68.332,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155729196049151,,153,,1491157615,657421112,/imu,,0,1,39.5359874,-122.3380125,68.316,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155729449922543,,154,,1491157615,910732984,/imu,,0,1,39.5359803,-122.3380119,68.301,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155729698325415,,155,,1491157616,159256935,/imu,,0,1,39.5359737,-122.3380113,68.281,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155729948856084,,156,,1491157616,410342931,/imu,,0,1,39.5359676,-122.338011,68.269,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155730194486192,,157,,1491157616,655848026,/imu,,0,1,39.5359621,-122.3380107,68.26,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155730446842166,,158,,1491157616,907995939,/imu,,0,1,39.5359571,-122.3380106,68.247,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155730697257945,,159,,1491157617,157727956,/imu,,0,1,39.5359526,-122.3380106,68.237,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155730952850137,,160,,1491157617,411092042,/imu,,0,1,39.5359487,-122.3380106,68.225,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155731196498380,,161,,1491157617,657931089,/imu,,0,1,39.5359453,-122.3380106,68.225,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155731447867577,,162,,1491157617,908143997,/imu,,0,1,39.5359424,-122.3380106,68.216,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155731693388263,,163,,1491157618,154478073,/imu,,0,1,39.5359401,-122.3380106,68.208,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155731947994725,,164,,1491157618,409207105,/imu,,0,1,39.5359382,-122.3380107,68.2,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155732198637774,,165,,1491157618,657967090,/imu,,0,1,39.5359368,-122.3380108,68.19,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155732447386476,,166,,1491157618,908008098,/imu,,0,1,39.5359359,-122.3380108,68.177,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155732697234084,,167,,1491157619,157946109,/imu,,0,1,39.5359355,-122.3380108,68.172,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155732944366471,,168,,1491157619,402901887,/imu,,0,1,39.5359356,-122.3380108,68.166,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155733198443881,,169,,1491157619,659679889,/imu,,0,1,39.5359356,-122.3380108,68.163,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155733448418093,,170,,1491157619,909205913,/imu,,0,1,39.5359356,-122.3380107,68.159,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155733698090175,,171,,1491157620,158154964,/imu,,0,1,39.5359356,-122.3380107,68.157,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155733952346150,,172,,1491157620,410418987,/imu,,0,1,39.5359357,-122.3380107,68.155,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155734198171923,,173,,1491157620,659285068,/imu,,0,1,39.5359357,-122.3380107,68.153,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155734443804338,,174,,1491157620,904732942,/imu,,0,1,39.5359357,-122.3380107,68.153,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155734697406375,,175,,1491157621,157968997,/imu,,0,1,39.5359358,-122.3380107,68.152,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155734947537291,,176,,1491157621,408992052,/imu,,0,1,39.5359358,-122.3380107,68.154,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155735196415897,,177,,1491157621,657907009,/imu,,0,1,39.5359359,-122.3380107,68.156,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155735447672921,,178,,1491157621,909153938,/imu,,0,1,39.5359359,-122.3380107,68.156,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155735691811886,,179,,1491157622,152919054,/imu,,0,1,39.5359359,-122.3380107,68.158,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155735947751414,,180,,1491157622,409225940,/imu,,0,1,39.535936,-122.3380107,68.157,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155736199884738,,181,,1491157622,661108970,/imu,,0,1,39.5359361,-122.3380107,68.158,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155736447374439,,182,,1491157622,909032106,/imu,,0,1,39.5359361,-122.3380107,68.157,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155736701032643,,183,,1491157623,159367084,/imu,,0,1,39.5359362,-122.3380107,68.156,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155736952718626,,184,,1491157623,414052963,/imu,,0,1,39.5359362,-122.3380107,68.156,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155737194257429,,185,,1491157623,655292987,/imu,,0,1,39.5359362,-122.3380107,68.158,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155737447683346,,186,,1491157623,909085035,/imu,,0,1,39.5359363,-122.3380107,68.162,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155737696680498,,187,,1491157624,157902002,/imu,,0,1,39.5359363,-122.3380106,68.164,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155737948464321,,188,,1491157624,409212112,/imu,,0,1,39.5359363,-122.3380106,68.166,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155738199651371,,189,,1491157624,659838914,/imu,,0,1,39.5359363,-122.3380106,68.173,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155738444798391,,190,,1491157624,906227111,/imu,,0,1,39.5359363,-122.3380106,68.176,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155738696943204,,191,,1491157625,157941102,/imu,,0,1,39.5359364,-122.3380106,68.181,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155738948926610,,192,,1491157625,409712076,/imu,,0,1,39.5359364,-122.3380106,68.188,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155739195596695,,193,,1491157625,656975030,/imu,,0,1,39.5359364,-122.3380106,68.195,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155739447778936,,194,,1491157625,907885074,/imu,,0,1,39.5359364,-122.3380106,68.198,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155739701050572,,195,,1491157626,158618927,/imu,,0,1,39.5359365,-122.3380106,68.207,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155739941907268,,196,,1491157626,402844905,/imu,,0,1,39.5359365,-122.3380107,68.212,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155740204060764,,197,,1491157626,657048940,/imu,,0,1,39.5359366,-122.3380107,68.218,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155740445747036,,198,,1491157626,907058954,/imu,,0,1,39.5359366,-122.3380107,68.224,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155740695534180,,199,,1491157627,157113075,/imu,,0,1,39.5359366,-122.3380108,68.233,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155740950635644,,200,,1491157627,409611940,/imu,,0,1,39.5359366,-122.3380108,68.238,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155741195706305,,201,,1491157627,656493902,/imu,,0,1,39.5359367,-122.3380108,68.247,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155741448978653,,202,,1491157627,910146951,/imu,,0,1,39.5359367,-122.3380108,68.256,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155741697159340,,203,,1491157628,157885074,/imu,,0,1,39.5359367,-122.3380108,68.262,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155741945685140,,204,,1491157628,406941890,/imu,,0,1,39.5359367,-122.3380108,68.272,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155742198062351,,205,,1491157628,659518003,/imu,,0,1,39.5359367,-122.3380108,68.279,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155742447214777,,206,,1491157628,907263994,/imu,,0,1,39.5359367,-122.3380108,68.285,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155742692417228,,207,,1491157629,152875900,/imu,,0,1,39.5359367,-122.3380108,68.296,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155742945377934,,208,,1491157629,406910896,/imu,,0,1,39.5359367,-122.3380108,68.3,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155743196856056,,209,,1491157629,658334016,/imu,,0,1,39.5359367,-122.3380108,68.307,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155743447716525,,210,,1491157629,909028053,/imu,,0,1,39.5359367,-122.3380108,68.317,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155743695461308,,211,,1491157630,156981945,/imu,,0,1,39.5359367,-122.3380108,68.322,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155743945862817,,212,,1491157630,407001018,/imu,,0,1,39.5359366,-122.3380108,68.33,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155744200256486,,213,,1491157630,657071113,/imu,,0,1,39.5359366,-122.3380108,68.338,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155744446631301,,214,,1491157630,906867980,/imu,,0,1,39.5359366,-122.3380108,68.345,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155744697576850,,215,,1491157631,156963109,/imu,,0,1,39.5359365,-122.3380108,68.352,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155744949039484,,216,,1491157631,410414934,/imu,,0,1,39.5359365,-122.3380108,68.359,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155745197472728,,217,,1491157631,658984899,/imu,,0,1,39.5359364,-122.3380108,68.367,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155745445158027,,218,,1491157631,904109001,/imu,,0,1,39.5359364,-122.3380108,68.38,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155745695522866,,219,,1491157632,157011032,/imu,,0,1,39.5359364,-122.3380108,68.393,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155745952775530,,220,,1491157632,407785892,/imu,,0,1,39.5359363,-122.3380108,68.402,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155746199169863,,221,,1491157632,660240888,/imu,,0,1,39.5359363,-122.3380108,68.412,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155746445926295,,222,,1491157632,907088994,/imu,,0,1,39.5359362,-122.3380108,68.424,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155746696670470,,223,,1491157633,157870054,/imu,,0,1,39.5359361,-122.3380109,68.436,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155746946947692,,224,,1491157633,407990932,/imu,,0,1,39.5359361,-122.3380109,68.449,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155747195884782,,225,,1491157633,657109022,/imu,,0,1,39.535936,-122.3380109,68.459,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155747450513696,,226,,1491157633,909704923,/imu,,0,1,39.535936,-122.3380109,68.47,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155747696332549,,227,,1491157634,157325983,/imu,,0,1,39.5359359,-122.3380109,68.477,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155747945577446,,228,,1491157634,407183885,/imu,,0,1,39.5359358,-122.3380109,68.485,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155748193006721,,229,,1491157634,653882026,/imu,,0,1,39.5359357,-122.3380109,68.491,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155748448162210,,230,,1491157634,909323930,/imu,,0,1,39.5359357,-122.3380109,68.502,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155748696751922,,231,,1491157635,157892942,/imu,,0,1,39.5359357,-122.338011,68.511,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155748947535713,,232,,1491157635,408888101,/imu,,0,1,39.5359356,-122.3380109,68.517,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155749201393009,,233,,1491157635,662369012,/imu,,0,1,39.5359355,-122.338011,68.527,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155749445983993,,234,,1491157635,907316923,/imu,,0,1,39.5359355,-122.338011,68.536,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155749699176870,,235,,1491157636,159857988,/imu,,0,1,39.5359354,-122.338011,68.547,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155749946452996,,236,,1491157636,407423973,/imu,,0,1,39.5359354,-122.338011,68.561,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155750197486026,,237,,1491157636,657428979,/imu,,0,1,39.5359353,-122.338011,68.573,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155750446607040,,238,,1491157636,907505035,/imu,,0,1,39.5359353,-122.338011,68.585,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155750696678877,,239,,1491157637,158029079,/imu,,0,1,39.5359352,-122.338011,68.598,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155750943246128,,240,,1491157637,404588937,/imu,,0,1,39.5359351,-122.338011,68.614,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155751198753064,,241,,1491157637,660267114,/imu,,0,1,39.5359351,-122.338011,68.627,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155751448949737,,242,,1491157637,910247087,/imu,,0,1,39.535935,-122.338011,68.637,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155751710305542,,243,,1491157638,158471107,/imu,,0,1,39.535935,-122.338011,68.642,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155751949756491,,244,,1491157638,410789012,/imu,,0,1,39.5359349,-122.3380111,68.654,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155752202861277,,245,,1491157638,661005973,/imu,,0,1,39.5359348,-122.338011,68.664,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155752449210439,,246,,1491157638,910099983,/imu,,0,1,39.5359347,-122.3380111,68.672,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155752699561822,,247,,1491157639,161111116,/imu,,0,1,39.5359347,-122.338011,68.678,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 diff --git a/spec/test_files/vid1.mp4 b/spec/test_files/vid1.mp4 new file mode 100644 index 0000000..cd7a5b7 Binary files /dev/null and b/spec/test_files/vid1.mp4 differ diff --git a/spec/test_files/vid2.webm b/spec/test_files/vid2.webm new file mode 100644 index 0000000..1b2dc75 Binary files /dev/null and b/spec/test_files/vid2.webm differ diff --git a/spec/test_files/vid3.ogv b/spec/test_files/vid3.ogv new file mode 100644 index 0000000..2c428a9 Binary files /dev/null and b/spec/test_files/vid3.ogv differ diff --git a/storage.py b/storage.py index fcd2f87..e1de040 100644 --- a/storage.py +++ b/storage.py @@ -2,6 +2,7 @@ import sqlite3 import os import flask_bcrypt import time +import config class CheckSumCalculator: @@ -63,6 +64,13 @@ class Directory: return None + def set_default_options(self): + + self.options = [] + + for option in config.default_options: + self.options.append(Option(option, config.default_options[option])) + class Task: diff --git a/templates/directory_manage.html b/templates/directory_manage.html index e343b5e..af0b6df 100644 --- a/templates/directory_manage.html +++ b/templates/directory_manage.html @@ -114,7 +114,7 @@
{{ option.value }}