Merge pull request #59 from ekimekim/mike/fixes

Some misc fixes from cutter and backfiller, see commits
pull/61/head
Mike Lang 6 years ago committed by GitHub
commit 90eb2a4f13
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -331,6 +331,11 @@ class BackfillerWorker(object):
self.logger.warning('File {} invaid: {}'.format(path, e)) self.logger.warning('File {} invaid: {}'.format(path, e))
continue continue
# Ignore temp segments as they may go away by the time we fetch them.
if segment.type == "temp":
self.logger.debug('Skipping {} as it is a temp segment'.format(path))
continue
# to avoid getting in the downloader's way ignore segments # to avoid getting in the downloader's way ignore segments
# less than recent_cutoff old # less than recent_cutoff old
if datetime.datetime.utcnow() - segment.start < datetime.timedelta(seconds=recent_cutoff): if datetime.datetime.utcnow() - segment.start < datetime.timedelta(seconds=recent_cutoff):

@ -28,7 +28,7 @@ def unpadded_b64_decode(s):
class SegmentInfo( class SegmentInfo(
namedtuple('SegmentInfoBase', [ namedtuple('SegmentInfoBase', [
'path', 'stream', 'variant', 'start', 'duration', 'is_partial', 'hash' 'path', 'stream', 'variant', 'start', 'duration', 'type', 'hash'
]) ])
): ):
"""Info parsed from a segment path, including original path. """Info parsed from a segment path, including original path.
@ -36,6 +36,9 @@ class SegmentInfo(
@property @property
def end(self): def end(self):
return self.start + self.duration return self.start + self.duration
@property
def is_partial(self):
return self.type != "full"
def parse_segment_path(path): def parse_segment_path(path):
@ -64,7 +67,7 @@ def parse_segment_path(path):
variant = variant, variant = variant,
start = datetime.datetime.strptime("{}:{}".format(hour, time), "%Y-%m-%dT%H:%M:%S.%f"), start = datetime.datetime.strptime("{}:{}".format(hour, time), "%Y-%m-%dT%H:%M:%S.%f"),
duration = datetime.timedelta(seconds=float(duration)), duration = datetime.timedelta(seconds=float(duration)),
is_partial = type != "full", type = type,
hash = hash, hash = hash,
) )
except ValueError as e: except ValueError as e:
@ -219,7 +222,9 @@ def best_segments_by_start(hour):
# but is easy enough to do, so we might as well. # but is easy enough to do, so we might as well.
parsed = (parse_segment_path(os.path.join(hour, name)) for name in segment_paths) parsed = (parse_segment_path(os.path.join(hour, name)) for name in segment_paths)
for start_time, segments in itertools.groupby(parsed, key=lambda segment: segment.start): for start_time, segments in itertools.groupby(parsed, key=lambda segment: segment.start):
segments = list(segments) # ignore temp segments as they might go away by the time we want to use them
segments = [segment for segment in segments if segment.type != "temp"]
full_segments = [segment for segment in segments if not segment.is_partial] full_segments = [segment for segment in segments if not segment.is_partial]
if full_segments: if full_segments:
if len(full_segments) != 1: if len(full_segments) != 1:

@ -26,7 +26,6 @@ class Youtube(object):
} }
resp = self.client.request('POST', resp = self.client.request('POST',
'https://www.googleapis.com/upload/youtube/v3/videos', 'https://www.googleapis.com/upload/youtube/v3/videos',
headers=self.auth_headers(),
params={ params={
'part': 'snippet,status' if hidden else 'snippet', 'part': 'snippet,status' if hidden else 'snippet',
'uploadType': 'resumable', 'uploadType': 'resumable',
@ -35,7 +34,7 @@ class Youtube(object):
) )
resp.raise_for_status() resp.raise_for_status()
upload_url = resp.headers['Location'] upload_url = resp.headers['Location']
resp = self.client.request('POST', upload_url, headers=self.auth_headers(), data=data) resp = self.client.request('POST', upload_url, data=data)
resp.raise_for_status() resp.raise_for_status()
return resp.json()['id'] return resp.json()['id']
@ -51,7 +50,6 @@ class Youtube(object):
group = ids[i:i+10] group = ids[i:i+10]
resp = self.client.request('GET', resp = self.client.request('GET',
'https://www.googleapis.com/youtube/v3/videos', 'https://www.googleapis.com/youtube/v3/videos',
headers=self.auth_headers(),
params={ params={
'part': 'id,status', 'part': 'id,status',
'id': ','.join(group), 'id': ','.join(group),

Loading…
Cancel
Save