Moved strmmsi_to_mmsi and mmsi_to_strmmsi from common module to ntools
authorJean-Michel Nirgal Vourgère <jmv@nirgal.com>
Mon, 16 May 2011 02:16:39 +0000 (02:16 +0000)
committerJean-Michel Nirgal Vourgère <jmv@nirgal.com>
Mon, 16 May 2011 02:16:39 +0000 (02:16 +0000)
Hide hiden ships in scripts ais.common and ais.show_target_ships unless new
 option --show-hidden-ships is used.

bin/common.py
bin/djais/models.py
bin/djais/templatetags/ais_extras.py
bin/djais/views.py
bin/gpsdec.py
bin/inputs/config.py
bin/inputs/outpeer.py
bin/ntools.py
bin/show_targets_ships.py

index 66bfc6e76ff90e7a259f7cd1bcca79f2f28ad5da..10ee80b425e43000ff9c175dea70b61cc50bb1d3 100755 (executable)
@@ -15,6 +15,8 @@ from ais.db import *
 from ais.area import load_area_from_kml_polygon
 from ais.earth3d import dist3_latlong_ais, dist3_xyz, latlon_to_xyz_deg, latlon_to_xyz_ais
 
+import ais.inputs.config
+
 __all__ = [
     'DB_STARTDATE', 'DBPATH',
     'COUNTRIES_MID', 'STATUS_CODES', 'SHIP_TYPES',
@@ -30,8 +32,6 @@ __all__ = [
     'add_nmea1',
     'add_nmea5_full',
     'add_nmea5_partial',
-    'strmmsi_to_mmsi',
-    'mmsi_to_strmmsi',
     'Nmea1',
     'Nmea5',
     'Nmea',
@@ -44,6 +44,7 @@ __all__ = [
     'all_mmsi_generator',
     'load_fleet_to_uset',
     'fleetname_to_fleetid',
+    'mmsiiterator_nohiddenship',
     'filter_area',
     'filter_close_to',
     'filter_far_from',
@@ -786,32 +787,6 @@ def add_nmea5_partial(strmmsi, timestamp, imo, name, callsign, type, \
 
 
 
-def strmmsi_to_mmsi(strmmsi):
-    """
-    Convert from str mmsi to sql-int mmsi
-    Special treatment manal input
-    """
-    if strmmsi.isdigit():
-        return int(strmmsi)
-    else:
-        assert strmmsi[3:5] == 'MI'
-        strmmsi = strmmsi[:3]+'00'+strmmsi[5:]
-        return int('-'+strmmsi)
-
-
-def mmsi_to_strmmsi(mmsi):
-    """
-    Convert from sql-into mmsi to str mmsi
-    Special treatment manal input
-    """
-    if mmsi >= 0:
-        return "%08d" % mmsi
-    strmmsi = "%08d" % -mmsi
-    assert strmmsi[3:5] == '00'
-    strmmsi = strmmsi[:3]+'MI'+strmmsi[5:]
-    return strmmsi
-
-
 __misources__ = {} # cache of manual source names
 def _get_mi_sourcename(id):
     """
@@ -1778,6 +1753,16 @@ def fleetname_to_fleetid(fleetname):
     return row[0]
 
 
+
+def mmsiiterator_nohiddenship(mmsiiterator):
+    '''
+    filters strmmsi from an strmmsi iterator
+    '''
+    for strmmsi in mmsiiterator:
+        mmsi = strmmsi_to_mmsi(strmmsi)
+        if mmsi not in ais.inputs.config.get_hidden_mmsi():
+            yield strmmsi
+
 def filter_area(nmea, area):
     """
     Returns false if position is out of area.
@@ -1906,6 +1891,10 @@ def main():
         help='Dump a maximum of NUMBER positions every granularity seconds.'
              'Using that option enables multiple output of the same boat.')
 
+    parser.add_option('--show-hidden-ships',
+        action='store_true', dest='show_hidden_ships', default=False,
+        help='Include hidden ships in results')
+
     parser.add_option('--filter-knownposition',
         action='store_true', dest='filter_knownposition', default=False,
         help="Eliminate unknown positions from results.")
@@ -2017,6 +2006,9 @@ def main():
             logging.warning('Selecting all ships, ignoring other arguments')
         target_mmsi_iterator = all_mmsi_generator()
 
+    if not options.show_hidden_ships:
+        target_mmsi_iterator = mmsiiterator_nohiddenship(target_mmsi_iterator)
+
     #
     # Dates selections
     #
index c9537bdc356324c2edcc0991ef2c900c370b6a26..7c0c262b16fcb6a615c4a6e710b0683c72cea12d 100644 (file)
@@ -7,7 +7,8 @@ from django.db import models
 from django.contrib.auth.models import get_hexdigest
 from django.utils import html
 
-from ais.common import Nmea, mmsi_to_strmmsi, nice_timedelta_str
+from ais.ntools import mmsi_to_strmmsi
+from ais.common import Nmea, nice_timedelta_str
 from ais import proc
 from ais.jobrunner import make_unique_job_id
 
index 684a600a3befd1d5c25303e49221f263a61e3e9c..a0c8b9330273aebd5ca929c89e450d69a245fea4 100644 (file)
@@ -2,7 +2,7 @@
 from __future__ import division
 from django import template
 from django.utils.html import escape
-from ais.common import mmsi_to_strmmsi
+from ais.ntools import mmsi_to_strmmsi
 
 register = template.Library()
 
index ff436001fa8dd2bd9d6840c64bc44a738e0793d3..43e532c760a1c4b8b2447d724100d553036e26fd 100644 (file)
@@ -28,9 +28,9 @@ from decoratedstr import remove_decoration
 from ais.area import list_areas
 from ais.djais.basicauth import http_authenticate
 from ais.djais.models import *
-from ais.show_targets_ships import format_fleet, kml_to_kmz
-from ais.common import COUNTRIES_MID, Nmea, NmeaFeeder, strmmsi_to_mmsi, SHIP_TYPES, STATUS_CODES, AIS_STATUS_NOT_AVAILABLE, AIS_ROT_NOT_AVAILABLE, AIS_LATLON_SCALE, AIS_LON_NOT_AVAILABLE, AIS_LAT_NOT_AVAILABLE, AIS_COG_SCALE, AIS_COG_NOT_AVAILABLE, AIS_NO_HEADING, AIS_SOG_SCALE, AIS_SOG_NOT_AVAILABLE, AIS_SOG_MAX_SPEED, add_nmea1, add_nmea5_partial, load_fleet_to_uset
-from ais.ntools import datetime_to_timestamp, clean_ais_charset, clean_latitude, clean_longitude, LatLonFormatError
+from ais.show_targets_ships import format_fleet_lastpos, kml_to_kmz, KML_DISPLAYOPT_SHOWHIDDEN
+from ais.common import COUNTRIES_MID, Nmea, NmeaFeeder, SHIP_TYPES, STATUS_CODES, AIS_STATUS_NOT_AVAILABLE, AIS_ROT_NOT_AVAILABLE, AIS_LATLON_SCALE, AIS_LON_NOT_AVAILABLE, AIS_LAT_NOT_AVAILABLE, AIS_COG_SCALE, AIS_COG_NOT_AVAILABLE, AIS_NO_HEADING, AIS_SOG_SCALE, AIS_SOG_NOT_AVAILABLE, AIS_SOG_MAX_SPEED, add_nmea1, add_nmea5_partial, load_fleet_to_uset
+from ais.ntools import datetime_to_timestamp, strmmsi_to_mmsi, clean_ais_charset, clean_latitude, clean_longitude, LatLonFormatError
 from ais.inputs.common import is_id4_active
 from ais.inputs.stats import STATS_DIR
 from ais.inputs.config import peers_get_config, get_hidden_mmsi
@@ -610,7 +610,10 @@ def vessel_manual_input(request, strmmsi):
 
 @http_authenticate(auth, 'ais')
 def vessel_lastpos(request, strmmsi):
-    value = kml_to_kmz(format_fleet([ strmmsi ], document_name=strmmsi).encode('utf-8'))
+    display_options = 0
+    if request.user.flag_allowhidden:
+        display_options = KML_DISPLAYOPT_SHOWHIDDEN
+    value = kml_to_kmz(format_fleet_lastpos([ strmmsi ], document_name=strmmsi, display_options=display_options).encode('utf-8'))
     response = HttpResponse(value, mimetype="application/vnd.google-earth.kmz")
     response['Content-Disposition'] = 'attachment; filename=%s.kmz' % strmmsi
     return response
@@ -835,8 +838,11 @@ def fleet_lastpos(request, fleetname):
     fleet = get_object_or_404(Fleet, name=fleetname)
     if not FleetUser.objects.filter(fleet=fleet.id, user=request.user.id).all():
         return HttpResponseForbidden('<h1>Forbidden</h1>')
+    display_options = 0
+    if request.user.flag_allowhidden:
+        display_options = KML_DISPLAYOPT_SHOWHIDDEN
     fleet_uset = load_fleet_to_uset(fleet.id)
-    value = kml_to_kmz(format_fleet(fleet_uset, document_name=fleetname+' fleet').encode('utf-8'))
+    value = kml_to_kmz(format_fleet_lastpos(fleet_uset, document_name=fleetname+' fleet', display_options=display_options).encode('utf-8'))
     response = HttpResponse(value, mimetype="application/vnd.google-earth.kmz")
     response['Content-Disposition'] = 'attachment; filename=%s.kmz' % fleetname
     return response
index 211c52c101cfbdf9d841880400bd63454cd89c11..fecce1897aacb7e68c6ba433f90f367c76fef081 100755 (executable)
@@ -6,7 +6,8 @@ import logging
 from time import time as get_timestamp
 from ctypes import cdll, Structure, Union, c_buffer, c_int, c_uint, c_char, \
                    byref
-from ais.common import mmsi_to_strmmsi, add_nmea1, add_nmea5_full
+from ais.ntools import mmsi_to_strmmsi
+from ais.common import add_nmea1, add_nmea5_full
 
 # difference between the unix time and the real time,
 # because of leap seconds:
index 8c23e4343d33729605f2bfc1d11d2ceb8c1f748e..6a3fa33eaae969e12615837c66d556c845ba9963 100644 (file)
@@ -6,8 +6,7 @@ Peers definition
 from __future__ import division
 import logging
 import pprint
-from ais.ntools import str_split_column_ipv6
-from ais.common import strmmsi_to_mmsi
+from ais.ntools import str_split_column_ipv6, strmmsi_to_mmsi
 
 __all__ = [
     'peers_get_config',
index 139fa76152d92300a98ceff76749a200f7f5a8e3..97cc48886bcb6bf465f58b753fd923e269629ee7 100644 (file)
@@ -9,8 +9,7 @@ from time import time as get_timestamp, sleep
 import socket
 from threading import Thread, Lock
 
-from ais.ntools import formataddr
-from ais.common import strmmsi_to_mmsi, mmsi_to_strmmsi
+from ais.ntools import formataddr, strmmsi_to_mmsi, mmsi_to_strmmsi
 from ais.inputs.config import get_hidden_mmsi
 
 __all__ = [ 'OutPeers', 'outpeers_from_config', 'TcpInOutPeer', 'TcpInServiceOut', 'tcpin_outpeers' ]
index e5a30739635347dbb7345e40284401e79dd544df..61085dbb831c0e18b9bec8f4088fea4272b4bd24 100644 (file)
@@ -9,6 +9,8 @@ __all__ = [
     'IPV4_IN_IPV6_PREFIX',
     'datetime_to_timestamp',
     'read_cfg',
+    'strmmsi_to_mmsi',
+    'mmsi_to_strmmsi',
     'clean_ais_charset',
     'clean_alnum',
     'clean_alnum_unicode',
@@ -49,6 +51,32 @@ def read_cfg(filename):
     return cfg
 
 
+def strmmsi_to_mmsi(strmmsi):
+    """
+    Convert from str mmsi to sql-int mmsi
+    Special treatment manal input
+    """
+    if strmmsi.isdigit():
+        return int(strmmsi)
+    else:
+        assert strmmsi[3:5] == 'MI'
+        strmmsi = strmmsi[:3]+'00'+strmmsi[5:]
+        return int('-'+strmmsi)
+
+
+def mmsi_to_strmmsi(mmsi):
+    """
+    Convert from sql-into mmsi to str mmsi
+    Special treatment manal input
+    """
+    if mmsi >= 0:
+        return "%08d" % mmsi
+    strmmsi = "%08d" % -mmsi
+    assert strmmsi[3:5] == '00'
+    strmmsi = strmmsi[:3]+'MI'+strmmsi[5:]
+    return strmmsi
+
+
 def clean_ais_charset(txt):
     assert isinstance(txt, str)
     result = ''
index 395117457f8b1ca9584448e0145b6259f4b67f69..15c790f6b769b17645a2c57663d34da7ebc63722 100755 (executable)
@@ -13,14 +13,16 @@ from ais.common import *
 from ais.area import load_area_from_kml_polygon
 from ais.ntools import datetime_to_timestamp, xml_escape, LatLonFormatError, clean_latitude, clean_longitude
 
+from ais.inputs.config import get_hidden_mmsi
 from ais.djais.settings import AIS_BASE_URL
 
-__all__ = [ 'format_fleet', 'format_boat_intime', 'format_boat_track', 'STYLE', 'KML_DISPLAYOPT_NONAMES', 'KML_DISPLAYOPT_HISTORICAL', 'KML_DISPLAYOPT_SOURCES', 'kml_to_kmz' ]
+__all__ = [ 'format_fleet_lastpos', 'format_boat_intime', 'STYLE', 'KML_DISPLAYOPT_NONAMES', 'KML_DISPLAYOPT_HISTORICAL', 'KML_DISPLAYOPT_SOURCES', 'KML_DISPLAYOPT_SHOWHIDDEN', 'kml_to_kmz' ]
 
 
 KML_DISPLAYOPT_NONAMES = 1 # don't print ship name
 KML_DISPLAYOPT_HISTORICAL = 2 # never show ship track as lost
 KML_DISPLAYOPT_SOURCES = 4 # display sources
+KML_DISPLAYOPT_SHOWHIDDEN = 8 # show hidden ships
 
 
 LOST_PERIOD = timedelta(1)
@@ -344,7 +346,7 @@ def format_boat_data(nmea, timeinfo=None, display_options=0):
 
 
 
-def format_fleet(mmsi_iterator, document_name=None):
+def format_fleet_lastpos(mmsi_iterator, document_name=None, display_options=0):
     result = u''
     result += KML_HEADER
 
@@ -358,9 +360,15 @@ def format_fleet(mmsi_iterator, document_name=None):
 
     for mmsi in mmsi_iterator:
         nmea = Nmea.new_from_lastinfo(mmsi)
+        if not (display_options & KML_DISPLAYOPT_SHOWHIDDEN) and strmmsi_to_mmsi(mmsi) in get_hidden_mmsi():
+            result += u'<Placemark>\n'
+            result += u'<name>' + xml_escape(nmea.get_title()) + u'</name>\n'
+            result += u'<description>Sorry, access to the position of that ship is restricted. It is not available for you.</description>\n'
+            result += u'</Placemark>\n'
+            continue
         if nmea.get_last_timestamp() < long_ago:
             continue
-        result += format_boat_data(nmea, display_options=KML_DISPLAYOPT_SOURCES)
+        result += format_boat_data(nmea, display_options = display_options | KML_DISPLAYOPT_SOURCES)
     result += KML_FOOTER
     return result
 
@@ -422,16 +430,6 @@ def format_boat_track_section(nmea_iterator, name=u''):
     return result
 
 
-def format_boat_track(nmea_iterator):
-    result = u''
-    result += KML_HEADER
-    #result += STYLE.make_header()
-    result += format_boat_track_section(nmea_iterator)
-    result += KML_FOOTER
-    return result
-
-
-
 def kml_to_kmz(inputstr):
     if isinstance(inputstr, unicode):
         inputstr = inputstr.encode('utf-8')
@@ -486,6 +484,10 @@ def main():
         help='Dump a maximum of NUMBER positions every granularity seconds.'
              'Using that option enables multiple output of the same boat.')
 
+    parser.add_option('--show-hidden-ships',
+        action='store_true', dest='show_hidden_ships', default=False,
+        help='Include hidden ships in results')
+
     parser.add_option('--filter-knownposition',
         action='store_true', dest='filter_knownposition', default=False,
         help="eliminate unknown positions from results.")
@@ -599,6 +601,9 @@ def main():
             logging.warning('Selecting all ships, ignoring other arguments')
         target_mmsi_iterator = all_mmsi_generator()
 
+    if not options.show_hidden_ships:
+        target_mmsi_iterator = mmsiiterator_nohiddenship(target_mmsi_iterator)
+
     #
     # Dates selections
     #