Skip to content

Commit

Permalink
Merge pull request #69 from deathbybandaid/Linting
Browse files Browse the repository at this point in the history
Lint Python files in repository.
  • Loading branch information
tgorgdotcom authored Sep 16, 2020
2 parents 1d0b709 + b0a2b8b commit 8d080f7
Show file tree
Hide file tree
Showing 12 changed files with 210 additions and 155 deletions.
146 changes: 75 additions & 71 deletions LocastService.py

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion SSDPServer.py
Original file line number Diff line number Diff line change
Expand Up @@ -223,4 +223,4 @@ def do_byebye(self, usn):
except (AttributeError, socket.error) as msg:
logger.error("failure sending out byebye notification: %r" % msg)
except KeyError as msg:
logger.error("error building byebye notification: %r" % msg)
logger.error("error building byebye notification: %r" % msg)
27 changes: 16 additions & 11 deletions fcc_facility/get_facilities.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
import urllib, zipfile, os, sys, datetime, json
import urllib
import zipfile
import os
import sys
import datetime
import json

os.chdir(os.path.dirname(sys.argv[0]))

Expand Down Expand Up @@ -32,17 +37,17 @@

if fac_line_split[12] != '':
fac_status_date_split = fac_line_split[12].split('/')

if fac_line_split[15] != '':
fac_lic_expiration_date_split = fac_line_split[15].split('/')
fac_lic_expiration_date_datetime = datetime.datetime(int(fac_lic_expiration_date_split[2]),
int(fac_lic_expiration_date_split[0]),
int(fac_lic_expiration_date_split[1]),
fac_lic_expiration_date_datetime = datetime.datetime(int(fac_lic_expiration_date_split[2]),
int(fac_lic_expiration_date_split[0]),
int(fac_lic_expiration_date_split[1]),
23, 59, 59, 999999)

if fac_line_split[21] != '':
fac_callsign_eff_date_split = fac_line_split[21].split('/')

if fac_line_split[29] != '':
fac_last_change_date_split = fac_line_split[29].split('/')

Expand Down Expand Up @@ -79,9 +84,9 @@
"last_change_date": fac_line_split[29]
}

if ((fac_obj['fac_status'] == 'LICEN')
and (fac_lic_expiration_date_datetime != None)
and (fac_lic_expiration_date_datetime > current_date)
if ((fac_obj['fac_status'] == 'LICEN')
and (fac_lic_expiration_date_datetime is not None)
and (fac_lic_expiration_date_datetime > current_date)
and (fac_obj['fac_service'] in ('DT', 'TX', 'TV', 'TB', 'LD', 'DC'))):
sys.stdout.write(fac_obj['fac_callsign'] + '.')
sys.stdout.flush()
Expand All @@ -105,4 +110,4 @@
tv_dma_file.write("%s\n" % dma_list_item)

print('Complete!')
print('Found ' + str(fac_found_count) + ' items.')
print('Found ' + str(fac_found_count) + ' items.')
12 changes: 6 additions & 6 deletions m3u8/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,9 @@

try:
from urllib.request import urlopen, Request
from urllib.error import HTTPError
from urllib.parse import urlparse, urljoin
except ImportError: # Python 2.x
from urllib2 import urlopen, Request, HTTPError
from urllib2 import urlopen, Request
from urlparse import urlparse, urljoin

from m3u8.model import (M3U8, Segment, SegmentList, PartialSegment,
Expand All @@ -26,10 +25,11 @@
PYTHON_MAJOR_VERSION = sys.version_info

__all__ = ('M3U8', 'Segment', 'SegmentList', 'PartialSegment',
'PartialSegmentList', 'Key', 'Playlist', 'IFramePlaylist',
'Media', 'MediaList', 'PlaylistList', 'Start', 'RenditionReport',
'RenditionReportList', 'ServerControl', 'Skip', 'PartInformation',
'loads', 'load', 'parse', 'ParseError')
'PartialSegmentList', 'Key', 'Playlist', 'IFramePlaylist',
'Media', 'MediaList', 'PlaylistList', 'Start', 'RenditionReport',
'RenditionReportList', 'ServerControl', 'Skip', 'PartInformation',
'loads', 'load', 'parse', 'ParseError')


def loads(content, uri=None, custom_tags_parser=None):
'''
Expand Down
1 change: 1 addition & 0 deletions m3u8/iso8601/__init__.py
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
# pylama:ignore=W0401,W0611
from .iso8601 import *
14 changes: 9 additions & 5 deletions m3u8/iso8601/iso8601.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,8 @@
__all__ = ["parse_date", "ParseError", "UTC",
"FixedOffset"]

if sys.version_info >= (3, 0, 0):
_basestring = str
else:
_basestring = basestring
if sys.version_info.major >= 3:
basestring = str


# Adapted from http://delete.me.uk/2005/03/iso8601.html
Expand Down Expand Up @@ -67,11 +65,14 @@
re.VERBOSE
)


class ParseError(Exception):
"""Raised when there is a problem parsing a date string"""


if sys.version_info >= (3, 2, 0):
UTC = datetime.timezone.utc

def FixedOffset(offset_hours, offset_minutes, name):
return datetime.timezone(
datetime.timedelta(
Expand All @@ -80,6 +81,7 @@ def FixedOffset(offset_hours, offset_minutes, name):
else:
# Yoinked from python docs
ZERO = datetime.timedelta(0)

class Utc(datetime.tzinfo):
"""UTC Timezone
Expand Down Expand Up @@ -150,6 +152,7 @@ def to_int(d, key, default_to_zero=False, default=None, required=True):
else:
return int(value)


def parse_timezone(matches, default_timezone=UTC):
"""Parses ISO 8601 time zone specs into tzinfo offsets
Expand All @@ -171,6 +174,7 @@ def parse_timezone(matches, default_timezone=UTC):
minutes = -minutes
return FixedOffset(hours, minutes, description)


def parse_date(datestring, default_timezone=UTC):
"""Parses ISO 8601 dates into datetime objects
Expand All @@ -188,7 +192,7 @@ def parse_date(datestring, default_timezone=UTC):
constructing the datetime instance.
"""
if not isinstance(datestring, _basestring):
if not isinstance(datestring, basestring):
raise ParseError("Expecting a string %r" % datestring)
m = ISO8601_REGEX.match(datestring)
if not m:
Expand Down
6 changes: 6 additions & 0 deletions m3u8/iso8601/test_iso8601.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,19 +9,23 @@

from iso8601 import iso8601


def test_iso8601_regex():
assert iso8601.ISO8601_REGEX.match("2006-10-11T00:14:33Z")


def test_fixedoffset_eq():
# See https://bitbucket.org/micktwomey/pyiso8601/issues/19
datetime.tzinfo() == iso8601.FixedOffset(2, 0, '+2:00')


def test_parse_no_timezone_different_default():
tz = iso8601.FixedOffset(2, 0, "test offset")
d = iso8601.parse_date("2007-01-01T08:00:00", default_timezone=tz)
assert d == datetime.datetime(2007, 1, 1, 8, 0, 0, 0, tz)
assert d.tzinfo == tz


def test_parse_utc_different_default():
"""Z should mean 'UTC', not 'default'.
Expand All @@ -30,6 +34,7 @@ def test_parse_utc_different_default():
d = iso8601.parse_date("2007-01-01T08:00:00Z", default_timezone=tz)
assert d == datetime.datetime(2007, 1, 1, 8, 0, 0, 0, iso8601.UTC)


@pytest.mark.parametrize("invalid_date, error_string", [
("2013-10-", "Unable to parse date string"),
("2013-", "Unable to parse date string"),
Expand All @@ -52,6 +57,7 @@ def test_parse_invalid_date(invalid_date, error_string):
assert exc.errisinstance(iso8601.ParseError)
assert str(exc.value).startswith(error_string)


@pytest.mark.parametrize("valid_date,expected_datetime,isoformat", [
("2007-06-23 06:40:34.00Z", datetime.datetime(2007, 6, 23, 6, 40, 34, 0, iso8601.UTC), "2007-06-23T06:40:34+00:00"), # Handle a separator other than T
("1997-07-16T19:20+01:00", datetime.datetime(1997, 7, 16, 19, 20, 0, 0, iso8601.FixedOffset(1, 0, "+01:00")), "1997-07-16T19:20:00+01:00"), # Parse with no seconds
Expand Down
1 change: 0 additions & 1 deletion m3u8/mixins.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@

import os
from m3u8.parser import is_url

Expand Down
54 changes: 34 additions & 20 deletions m3u8/model.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
# coding: utf-8
# pylama:ignore=E303
# Copyright 2014 Globo.com Player authors. All rights reserved.
# Use of this source code is governed by a MIT License
# license that can be found in the LICENSE file.
Expand Down Expand Up @@ -157,11 +158,11 @@ def __init__(self, content=None, base_path=None, base_uri=None, strict=False, cu


def _initialize_attributes(self):
self.keys = [ Key(base_uri=self.base_uri, **params) if params else None
for params in self.data.get('keys', []) ]
self.segments = SegmentList([ Segment(base_uri=self.base_uri, keyobject=find_key(segment.get('key', {}), self.keys), **segment)
for segment in self.data.get('segments', []) ])
#self.keys = get_uniques([ segment.key for segment in self.segments ])
self.keys = [Key(base_uri=self.base_uri, **params) if params else None
for params in self.data.get('keys', [])]
self.segments = SegmentList([Segment(base_uri=self.base_uri, keyobject=find_key(segment.get('key', {}), self.keys), **segment)
for segment in self.data.get('segments', [])])
# self.keys = get_uniques([ segment.key for segment in self.segments ])
for attr, param in self.simple_attributes:
setattr(self, attr, self.data.get(param))

Expand All @@ -172,18 +173,18 @@ def _initialize_attributes(self):
self.files.append(key.uri)
self.files.extend(self.segments.uri)

self.media = MediaList([ Media(base_uri=self.base_uri, **media)
for media in self.data.get('media', []) ])
self.media = MediaList([Media(base_uri=self.base_uri, **media)
for media in self.data.get('media', [])])

self.playlists = PlaylistList([ Playlist(base_uri=self.base_uri, media=self.media, **playlist)
for playlist in self.data.get('playlists', []) ])
self.playlists = PlaylistList([Playlist(base_uri=self.base_uri, media=self.media, **playlist)
for playlist in self.data.get('playlists', [])])

self.iframe_playlists = PlaylistList()
for ifr_pl in self.data.get('iframe_playlists', []):
self.iframe_playlists.append(IFramePlaylist(base_uri=self.base_uri,
uri=ifr_pl['uri'],
iframe_stream_info=ifr_pl['iframe_stream_info'])
)
)
self.segment_map = self.data.get('segment_map')

start = self.data.get('start', None)
Expand All @@ -198,15 +199,15 @@ def _initialize_attributes(self):
skip = self.data.get('skip', None)
self.skip = skip and Skip(**skip)

self.rendition_reports = RenditionReportList([ RenditionReport(base_uri=self.base_uri, **rendition_report)
for rendition_report in self.data.get('rendition_reports', []) ])
self.rendition_reports = RenditionReportList([RenditionReport(base_uri=self.base_uri, **rendition_report)
for rendition_report in self.data.get('rendition_reports', [])])

self.session_data = SessionDataList([ SessionData(**session_data)
for session_data in self.data.get('session_data', [])
if 'data_id' in session_data ])
self.session_data = SessionDataList([SessionData(**session_data)
for session_data in self.data.get('session_data', [])
if 'data_id' in session_data])

self.session_keys = [ SessionKey(base_uri=self.base_uri, **params) if params else None
for params in self.data.get('session_keys', []) ]
self.session_keys = [SessionKey(base_uri=self.base_uri, **params) if params else None
for params in self.data.get('session_keys', [])]

def __unicode__(self):
return self.dumps()
Expand Down Expand Up @@ -422,7 +423,7 @@ def __init__(self, uri=None, base_uri=None, program_date_time=None, current_prog
self.scte35 = scte35
self.scte35_duration = scte35_duration
self.key = keyobject
self.parts = PartialSegmentList( [ PartialSegment(base_uri=self.base_uri, **partial) for partial in parts ] if parts else [] )
self.parts = PartialSegmentList([PartialSegment(base_uri=self.base_uri, **partial) for partial in parts] if parts else [])
if init_section is not None:
self.init_section = InitializationSection(self.base_uri, **init_section)
else:
Expand Down Expand Up @@ -509,7 +510,7 @@ def uri(self):


def by_key(self, key):
return [ segment for segment in self if segment.key == key ]
return [segment for segment in self if segment.key == key]



Expand Down Expand Up @@ -574,12 +575,14 @@ def dumps(self, last_segment):
def __str__(self):
return self.dumps(None)


class PartialSegmentList(list, GroupedBasePathMixin):

def __str__(self):
output = [str(part) for part in self]
return '\n'.join(output)


class Key(BasePathMixin):
'''
Key used to encrypt the segments in a m3u8 playlist (EXT-X-KEY)
Expand Down Expand Up @@ -636,6 +639,7 @@ def __eq__(self, other):
def __ne__(self, other):
return not self.__eq__(other)


class InitializationSection(BasePathMixin):
'''
Used to obtain Media Initialization Section required to
Expand Down Expand Up @@ -676,9 +680,11 @@ def __eq__(self, other):
def __ne__(self, other):
return not self.__eq__(other)


class SessionKey(Key):
tag = ext_x_session_key


class Playlist(BasePathMixin):
'''
Playlist object representing a link to a variant M3U8 with a specific bitrate.
Expand All @@ -699,7 +705,7 @@ def __init__(self, uri, stream_info, media, base_uri):
self.base_uri = base_uri

resolution = stream_info.get('resolution')
if resolution != None:
if resolution is not None:
resolution = resolution.strip('"')
values = resolution.split('x')
resolution_pair = (int(values[0]), int(values[1]))
Expand Down Expand Up @@ -958,6 +964,7 @@ def __str__(self):

return ext_x_start + ':' + ','.join(output)


class RenditionReport(BasePathMixin):
def __init__(self, base_uri, uri, last_msn, last_part=None):
self.base_uri = base_uri
Expand All @@ -978,12 +985,14 @@ def dumps(self):
def __str__(self):
return self.dumps()


class RenditionReportList(list, GroupedBasePathMixin):

def __str__(self):
output = [str(report) for report in self]
return '\n'.join(output)


class ServerControl(object):
def __init__(self, can_skip_until=None, can_block_reload=None,
hold_back=None, part_hold_back=None):
Expand Down Expand Up @@ -1011,6 +1020,7 @@ def dumps(self):
def __str__(self):
return self.dumps()


class Skip(object):
def __init__(self, skipped_segments=None):
self.skipped_segments = skipped_segments
Expand All @@ -1022,6 +1032,7 @@ def dumps(self):
def __str__(self):
return self.dumps()


class PartInformation(object):
def __init__(self, part_target=None):
self.part_target = part_target
Expand All @@ -1033,6 +1044,7 @@ def dumps(self):
def __str__(self):
return self.dumps()


class SessionData(object):
def __init__(self, data_id, value=None, uri=None, language=None):
self.data_id = data_id
Expand All @@ -1055,6 +1067,7 @@ def dumps(self):
def __str__(self):
return self.dumps()


def find_key(keydata, keylist):
if not keydata:
return None
Expand All @@ -1071,6 +1084,7 @@ def find_key(keydata, keylist):
def denormalize_attribute(attribute):
return attribute.replace('_', '-').upper()


def quoted(string):
return '"%s"' % string

Expand Down
Loading

0 comments on commit 8d080f7

Please sign in to comment.