Moved import at begining of files.
FIXME: It should works using polar coordinated, but now works in 2D.
"""
+from __future__ import division
+
__all__ = [ 'Area', 'load_area_from_kml_polygon' ]
class Area:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
+from __future__ import division
+import sys
+import os
+import struct
+import logging
+from datetime import datetime, timedelta, date, time
+from fcntl import lockf, LOCK_EX, LOCK_UN, LOCK_SH
+import csv
+
+from ais.ntools import *
+from ais.db import *
+from ais.area import load_area_from_kml_polygon
+from ais.earth3d import dist3_latlong_ais
+
__all__ = [
'DB_STARTDATE', 'DBPATH',
'COUNTRIES_MID', 'STATUS_CODES', 'SHIP_TYPES',
'filter_speedcheck',
]
-
-import sys
-import os
-import struct
-import logging
-from datetime import datetime, timedelta, date, time
-from fcntl import lockf, LOCK_EX, LOCK_UN, LOCK_SH
-import csv
-
-from ais.ntools import *
-from ais.db import *
-from ais.area import load_area_from_kml_polygon
-from ais.earth3d import dist3_latlong_ais
-
DB_STARTDATE = datetime(2008, 6, 1)
# This is the location of the filesystem database
strdelta += ' day '
disprank = 0
delta_s = delta.seconds
- delta_m = delta_s / 60
+ delta_m = delta_s // 60
delta_s -= delta_m * 60
- delta_h = delta_m / 60
+ delta_h = delta_m // 60
delta_m -= delta_h * 60
if delta_h:
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
+from __future__ import division
import psycopg2, psycopg2.extensions
from ais.ntools import read_cfg
#!/usr/bin/python
+from __future__ import division
from django.core.management import execute_manager
try:
from ais.djais import settings
def myview(request):
return HttpResponse("Hello world!")
'''
+from __future__ import division
from django.http import HttpResponse
import base64
# -*- coding: utf-8 -*-
+from __future__ import division
import os, os.path
from datetime import datetime
from random import SystemRandom
# Django settings for ais project.
+from __future__ import division
from ais.ntools import read_cfg
from ais.db import DATABASE_CONFIG_FILE
# -*- encofing: utf8 -*-
+from __future__ import division
from django import template
from django.utils.html import escape
from ais.common import mmsi_to_strmmsi
+from __future__ import division
from django.conf.urls.defaults import *
import ais.djais
# -*- coding: utf-8 -*-
+from __future__ import division
+
#TODO
-#from __future__ import division
#Normalize 403 errors
import os
response['Refresh'] = 5
elif not job.archive_time:
# finished but not archived:
+ # TODO: use hostname
response['Refresh'] = '0;url=https://ais.nirgal.com/job/%s/download' % job.id
job.archive_time = datetime.utcnow()
job.save()
@http_authenticate(auth, 'ais')
def news(request, page):
- NEWS_PER_PAGE = 10
+ NEWS_PER_PAGE = 5
if page:
page = int(page)
else:
page = 1
- # TODO __future__
- npages = int((News.objects.count() + NEWS_PER_PAGE - 1) / NEWS_PER_PAGE)
+ npages = int((News.objects.count() + NEWS_PER_PAGE - 1) // NEWS_PER_PAGE)
news = News.objects.order_by('-created')[(page - 1) * NEWS_PER_PAGE : page * NEWS_PER_PAGE]
return render_to_response('news.html', {'news':news, 'page': page, 'npages': npages}, RequestContext(request))
Library for distances over Earth.
"""
+from __future__ import division
+import math
+
__all__ = [ 'EARTH_RADIUS_NM', 'AIS_ANGLE_TO_RADIAN',
'latlon_to_xyz_rad', 'latlon_to_xyz_deg', 'latlon_to_xyz_ais',
'dist3_xyz', 'dist3_latlong_ais' ]
-import math
-
# earth mean radius: 6371 km
# nautical mile mean size: 1.8523 km
EARTH_RADIUS_NM = 6371./1.8523
#!/usr/bin/env python
+from __future__ import division
from ais.html_parser import *
if __name__ == '__main__':
#!/usr/bin/env python
# -*- coding: utf-8 -*-
-DOWNLOAD_SLEEP_TIME = 10
-DISABLE_DOWNLOAD = False
-MARINETRAFFIC_DIR = '/var/lib/ais/marinetraffic/'
-
+from __future__ import division
import sys, os, urllib2, time
from pprint import pprint
from datetime import datetime, date
from ais.common import *
from ais.html_parser import *
+DOWNLOAD_SLEEP_TIME = 10
+DISABLE_DOWNLOAD = False
+MARINETRAFFIC_DIR = '/var/lib/ais/marinetraffic/'
+
def go_summary(reference_date, mmsi):
def get_raw_summary(html):
#!/usr/bin/env python
# -*- coding: utf-8 -*-
+from __future__ import division
import urllib2, StringIO, gzip, time, random
from urlgrabber.keepalive import HTTPHandler
#!/usr/bin/env python
# -*- coding: utf-8 -*-
+from __future__ import division
import sys
from optparse import OptionParser
from datetime import datetime
#!/usr/bin/env python
# -*- coding: utf-8 -*-
+from __future__ import division
import urllib2, StringIO, gzip, time, random, os
from urlgrabber.keepalive import HTTPHandler
from datetime import datetime
#!/usr/bin/env python
# -*- coding: utf-8 -*-
+from __future__ import division
import sys
from optparse import OptionParser
from pprint import pprint
#!/usr/bin/env python
+from __future__ import division
import sys
import logging
from time import time as get_timestamp
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
+from __future__ import division
import sys, htmlentities
from optparse import OptionParser
AIS input basic functions
'''
-__all__ = [
- 'NMEA_DIR',
- 'DEFAULT_MTU',
- 'SourceLogger',
- 'Source',
- 'get_source_by_id4', 'is_id4_active', 'refresh_all_stats',
- ]
-
+from __future__ import division
import os.path
import logging
from datetime import datetime, timedelta
from ais.inputs.config import peers_get_config
from ais.inputs.outpeer import outpeers_from_config
+__all__ = [
+ 'NMEA_DIR',
+ 'DEFAULT_MTU',
+ 'SourceLogger',
+ 'Source',
+ 'get_source_by_id4', 'is_id4_active', 'refresh_all_stats',
+ ]
+
NMEA_DIR = '/var/lib/ais/nmea'
DEFAULT_MTU = 1500
Peers definition
'''
-__all__ = [
- 'peers_get_config',
- 'source_get_infoin']
-
+from __future__ import division
import logging
import pprint
from ais.ntools import str_split_column_ipv6
+__all__ = [
+ 'peers_get_config',
+ 'source_get_infoin']
+
CONFIG_FILENAME = '/etc/ais/config'
SOURCES = {}
UDP out peers module
'''
-__all__ = [ 'OutPeers', 'outpeers_from_config' ]
-
-
+from __future__ import division
import logging
from time import time as get_timestamp
import socket
+__all__ = [ 'OutPeers', 'outpeers_from_config' ]
+
class OutPeer:
'''
UDP output feed.
This is the main runner for AIS inputs.
'''
+from __future__ import division
#import os
import sys
import logging, logging.handlers
Module for receiving AIVDM data from serial port.
'''
+from __future__ import division
import serial
import logging
stats = self.source.stats
stats.npackets += 1
stats.nbytes += len(data)
- stats.nbytes_ethernet += len(data) * self.rawbytesize / 8
+ stats.nbytes_ethernet += len(data) * self.rawbytesize // 8
logging.debug('IN %s %s', self.name, repr(data))
self.data += data
Source statistics module
'''
-__all__ = [
- 'STATS_RATE', 'STATS_DIR',
- 'InStats'
- ]
-
+from __future__ import division
import os
from time import time as get_timestamp
import logging
import rrdtool
+__all__ = [
+ 'STATS_RATE', 'STATS_DIR',
+ 'InStats'
+ ]
+
STATS_DIR = '/var/lib/ais/stats'
STATS_RATE = 60
Module for receiving AIVDM data from outbound TCP connection.
'''
+from __future__ import division
import logging
import socket
Module for receiving AIVDM data from UDP.
'''
+from __future__ import division
import logging
import socket
AIS virtual bases for Channels and Services.
'''
-__all__ = [
- 'Service',
- ]
#
# Un Service c'est udp ou serialin ou tcpout
# Une source a un id4, donc des stats un et logger, mais pas de buffer
# Un canal a un buffer, et est associé à une source
+from __future__ import division
import sys
+__all__ = [
+ 'Service',
+ ]
+
class Service:
'''
A service provides data for processing.
#!/usr/bin/env python
-__all__ = [ \
- 'wakeup_daemon',
- 'DAEMON_WAKEUP_ERROR',
- ]
-
+from __future__ import division
import sys
import os
import os.path
import socket
from ais.db import *
+__all__ = [ \
+ 'wakeup_daemon',
+ 'DAEMON_WAKEUP_ERROR',
+ ]
+
SOCK_FILENAME = '/var/run/ais/jobrunner.wakeup'
def wakeup_daemon():
#
# taken from http://www.itu.int/cgi-bin/htsh/glad/cga_mids.sh?lng=E
#
+
+from __future__ import division
+
s = '''
201 Albania (Republic of)
202 Andorra (Principality of)
# -*- coding: utf-8 -*-
#
+#from __future__ import division
+#
#MESSAGE_TYPES = {
# 1: 'Position Report Class A',
# 2: 'Position Report Class A (Assigned schedule)',
Time functions.
'''
+from __future__ import division
+from datetime import datetime, date
+import calendar
+import logging
+
__all__ = [
'datetime_to_timestamp_posix',
'datetime_to_tai',
'datetime_to_timestamp_gps',
'uptime' ]
-from datetime import datetime, date
-import calendar
-import logging
-
# official file of leap seconds can be downloaded at:
# ftp://hpiers.obspm.fr/iers/bul/bulc/TimeSteps.history
#
# -*- coding: utf-8 -*-
+from __future__ import division
+
+import os
+import calendar
__all__ = [
'IPV4_IN_IPV6_PREFIX',
'formataddr',
]
-import os
-import calendar
-
IPV4_IN_IPV6_PREFIX = '::ffff:'
def datetime_to_timestamp(dt):
#!/usr/bin/env python
# -*- coding: utf-8 -*-
+from __future__ import division
import sys
from datetime import datetime, timedelta
#!/usr/bin/env python
# -*- coding: utf-8 -*-
-__all__ = [ 'format_fleet', 'format_boat_intime', 'format_boat_track', 'STYLE', 'KML_DISPLAYOPT_NONAMES', 'KML_DISPLAYOPT_HISTORICAL', 'KML_DISPLAYOPT_SOURCES', 'kml_to_kmz' ]
-
-import sys, logging, zipfile
+from __future__ import division
+import sys
+import logging
+import zipfile
from StringIO import StringIO # TODO use python 2.6 io.BufferedWrite(sys.stdout, )
from datetime import datetime, timedelta, time
import copy
from ais.area import load_area_from_kml_polygon
from ais.ntools import datetime_to_timestamp, xml_escape
+__all__ = [ 'format_fleet', 'format_boat_intime', 'format_boat_track', 'STYLE', 'KML_DISPLAYOPT_NONAMES', 'KML_DISPLAYOPT_HISTORICAL', 'KML_DISPLAYOPT_SOURCES', 'kml_to_kmz' ]
+
KML_DISPLAYOPT_NONAMES = 1 # don't print ship name
KML_DISPLAYOPT_HISTORICAL = 2 # never show ship track as lost
if nmea.cog != AIS_COG_NOT_AVAILABLE:
course = int(nmea.cog/10.) # ais format correction
- course = (course+5)/10*10 % 360 # go to neareast 10°
+ course = (course+5)//10*10 % 360 # go to neareast 10°
stylename += '-%d' % course
elif nmea.heading != AIS_NO_HEADING:
- course = (nmea.heading+5)/10*10 % 360 # go to neareast 10°
+ course = (nmea.heading+5)//10*10 % 360 # go to neareast 10°
stylename += '-%d' % course
return stylename
if nmea.cog != AIS_COG_NOT_AVAILABLE:
course = int(nmea.cog/10.) # ais format correction
- course = (course+5)/10*10 % 360 # go to neareast 10°
+ course = (course+5)//10*10 % 360 # go to neareast 10°
stylename += '-%d' % course
elif nmea.heading != AIS_NO_HEADING:
- course = (nmea.heading+5)/10*10 % 360 # go to neareast 10°
+ course = (nmea.heading+5)//10*10 % 360 # go to neareast 10°
stylename += '-%d' % course
return stylename