ferrosoft.apps.ferromaps.services package

Submodules

ferrosoft.apps.ferromaps.services.addresses module

Services for geocoding and address routing.

class ferrosoft.apps.ferromaps.services.addresses.Address(first_name='', last_name='', salutation='', company='', additional_lines='', street='', house_no='', city='', postal_code='', country='')[source]

Bases: object

additional_lines: str = ''
property address_line: str
city: str = ''
company: str = ''
country: str = ''
first_name: str = ''
format_lines(join=None)[source]

Format structured address into flat lines or string blob. :type join: str :param join: If str, join address lines into string blob with join being the separator.

Returns: String if join is a string, otherwise string list.

Return type:

str | List[str]

geocode(service=None)[source]
Return type:

Location

house_no: str = ''
join_fields(join, fields)[source]
Return type:

str | list

last_name: str = ''
postal_code: str = ''
salutation: str = ''
street: str = ''
class ferrosoft.apps.ferromaps.services.addresses.AddressRouterFake(distances)[source]

Bases: AddressRouterService

distance(route)[source]
Return type:

Distance | None

geocode(address)[source]
Return type:

Location

class ferrosoft.apps.ferromaps.services.addresses.AddressRouterGeoapify(config)[source]

Bases: AddressRouterService

class Config(base_url, api_url, api_key)[source]

Bases: object

api_key: str
api_url: str
base_url: str
classmethod from_django_settings()[source]
classmethod default()[source]
distance(route)[source]
Return type:

Distance | None

geocode(address)[source]
Return type:

Location

classmethod get_instance()[source]

Return instance or create it using a sensible default suitable for production.

class ferrosoft.apps.ferromaps.services.addresses.AddressRouterService[source]

Bases: Geocoder, DistanceRouter, ABC

AddressRouter service bundles Geocoder and DistanceRouter providing a unified API.

class Config(enable_cache, router_class)[source]

Bases: object

enable_cache: bool
classmethod from_django_settings()[source]
router_class: str
classmethod default()[source]
classmethod get_instance()[source]

Return instance or create it using a sensible default suitable for production.

instance = None

The instance to return in get_instance. If None, a “sensible” default implementation is returned.

exception ferrosoft.apps.ferromaps.services.addresses.AddressServiceException[source]

Bases: RuntimeError

class ferrosoft.apps.ferromaps.services.addresses.CachingAddressRouter(upstream)[source]

Bases: AddressRouterService

CACHE_PREFIX = 'ferromaps'
UPSTREAM_NONE = '__NONE__'
distance(route)[source]
Return type:

Distance | None

geocode(address)[source]
Return type:

Location

class ferrosoft.apps.ferromaps.services.addresses.Coordinates(lat, lon)[source]

Bases: object

lat: Decimal
lon: Decimal
exception ferrosoft.apps.ferromaps.services.addresses.CoordinatesNotFound(address)[source]

Bases: GeocodeException

Exception raised if no coordinates could be determined for an address.

class ferrosoft.apps.ferromaps.services.addresses.Distance(value, unit)[source]

Bases: object

unit: str
value: Decimal
class ferrosoft.apps.ferromaps.services.addresses.DistanceRouter[source]

Bases: ABC

Distance router determines distance of a route.

abstractmethod distance(route)[source]
Return type:

Distance | None

class ferrosoft.apps.ferromaps.services.addresses.FuzzyGeocoder[source]

Bases: Geocoder

SQL_QUERY = "\n                SELECT address_label, postal_code, city, longitude, latitude, country, street, house_no, 1 AS weight\n                FROM ferromaps_geocodedaddress\n                WHERE \n                    (CASE \n                        WHEN %(house_no)s = '' THEN \n                            street LIKE %(street)s AND city LIKE %(city)s\n                        ELSE \n                            house_no = %(house_no)s AND street LIKE %(street)s AND city LIKE %(city)s\n                    END)\n\n                UNION\n\n                SELECT address_label, postal_code, city, longitude, latitude, country, street, house_no, 2 AS weight\n                FROM ferromaps_geocodedaddress\n                WHERE \n                    daitch_mokotoff(address_label) = daitch_mokotoff(%(address_line)s)\n\n                ORDER BY weight limit 1;\n                "
geocode(address)[source]
Return type:

Location

exception ferrosoft.apps.ferromaps.services.addresses.GeocodeException[source]

Bases: AddressServiceException

Exception raised in geocoding methods.

class ferrosoft.apps.ferromaps.services.addresses.Geocoder[source]

Bases: ABC

Geocoder determines Location from address query.

abstractmethod geocode(address)[source]
Return type:

Location

class ferrosoft.apps.ferromaps.services.addresses.GreatCircleDistanceRouter[source]

Bases: DistanceRouter

EARTH_RADIUS_KM = 6378.388
distance(route)[source]
Return type:

Distance | None

class ferrosoft.apps.ferromaps.services.addresses.Location(coords, name, address)[source]

Bases: object

address: Address
coords: Coordinates
name: str
class ferrosoft.apps.ferromaps.services.addresses.Route(legs)[source]

Bases: object

legs: List[RouteLeg]
class ferrosoft.apps.ferromaps.services.addresses.RouteLeg(start, destination)[source]

Bases: object

destination: Coordinates
start: Coordinates
exception ferrosoft.apps.ferromaps.services.addresses.RoutingException[source]

Bases: AddressServiceException

class ferrosoft.apps.ferromaps.services.addresses.SwitchingAddressRouter(geocoder, distance_router)[source]

Bases: AddressRouterService

distance(route)[source]
Return type:

Distance | None

geocode(address)[source]
Return type:

Location