Beispiel #1
0
    def test_scoreboard_api(self, client, admin_user):
        event_data = {
            "start_date": datetime.datetime.now() -
            datetime.timedelta(
                days=1,
                hours=3),
            "end_date": datetime.datetime.now() +
            datetime.timedelta(
                days=3,
                hours=3),
            "organizer": "some organizer",
            "creator": admin_user,
            "title": "Event in SI",
            "pub_date": datetime.datetime.now(),
            "country": "SI",
            "geoposition": Geoposition(
                46.05528,
                14.51444),
            "location": "Ljubljana",
            "audience": [1],
            "theme": [1],
            "tags": [
                "tag1",
                "tag2"],
        }

        event = create_or_update_event(**event_data)
        event.status = 'APPROVED'
        event.save()

        event_data = {
            "start_date": datetime.datetime.now() - datetime.timedelta(days=1, hours=3),
            "end_date": datetime.datetime.now() + datetime.timedelta(days=3, hours=3),
            "organizer": "other organizer",
            "creator": admin_user,
            "title": "Event in IS",
            "pub_date": datetime.datetime.now(),
            "country": "IS",
            "geoposition": Geoposition(64.13244, -21.85690),
            "location": "Reykjavík",
            "audience": [1],
            "theme": [1],
            "tags": ["tag1", "tag2"],
        }

        event = create_or_update_event(**event_data)
        event.status = 'APPROVED'
        event.save()

        response_json = client.get('/api/scoreboard/?format=json')
        response_data = json.loads(response_json.content)

        assert isinstance(response_data, list)
        assert len(response_data) > 1
        assert response_data[0]["country_name"] == "Iceland"
        assert response_data[1]["country_name"] == "Slovenia"
Beispiel #2
0
    def test_area_bottom_right(self):
        # create booking
        booking = Booking()
        booking.client = self.client
        booking.passengers = 1
        booking.luggage_number = 2
        booking.flight = "18070-12324"
        booking.departure = Geoposition(49.010247, 2.547678)
        booking.destination = Geoposition(48.792502, 2.386336)
        booking.distance = math.hypot(48.792502 - 49.010247,
                                      2.386336 - 2.547678)
        # booking.destination = "Place de la Libération, 94400 Vitry-sur-Seine"

        self.assertFalse(booking is None)

        self.assertEqual(get_area(booking), self.bottom_right)
Beispiel #3
0
    def setUp(self):
        self.VRM = VRM_Account.objects.create(vrm_user_id='*****@*****.**',vrm_password="******")

        self.location = Geoposition(52.5,24.3)

        self.organisation = Sesh_Organisation.objects.create(name='test_organisation')

        self.site = Sesh_Site.objects.create(site_name=u"Test site",
                                             comission_date=timezone.datetime(2015, 12, 11, 22, 0),
                                             location_city=u"kigali",
                                             location_country=u"rwanda",
                                             installed_kw=123.0,
                                             position=self.location,
                                             system_voltage=24,
                                             number_of_panels=12,
                                             battery_bank_capacity=12321,
                                             has_genset=True,
                                             has_grid=True,
                                             organisation=self.organisation)

        #create test user
        self.test_sesh_user = Sesh_User.objects.create_user(username='******',
                                                       email='*****@*****.**',
                                                       password='******',
                                                       phone_number='250786688713',
                                                       organisation=self.organisation)
Beispiel #4
0
    def test_event_list_all(self, client, admin_user):
        event_data = {
            "start_date":
            datetime.datetime.now() - datetime.timedelta(days=1, hours=3),
            "end_date":
            datetime.datetime.now() + datetime.timedelta(days=3, hours=3),
            "organizer":
            "some organizer",
            "creator":
            admin_user,
            "title":
            "Unique REST API Event",
            "pub_date":
            datetime.datetime.now(),
            "country":
            "SI",
            "geoposition":
            Geoposition(46.05528, 14.51444),
            "location":
            "Ljubljana",
            "audience": [1],
            "theme": [1],
            "tags": ["tag1", "tag2"],
        }

        event = create_or_update_event(**event_data)
        event.status = 'APPROVED'
        event.save()

        response_json = client.get('/api/event/list/?format=json')
        response_data = json.loads(response_json.content)

        assert isinstance(response_data, list)
        assert event_data['title'] in response_json.content
Beispiel #5
0
class VenueFactory(factory.DjangoModelFactory):
    class Meta:
        model = Venue

    quadra = factory.LazyAttribute(lambda o: faker.company())
    address = factory.LazyAttribute(lambda o: faker.address())
    location = Geoposition(52.522906, 13.41156)
    def test_create_event_from_dict_with_all_fields(self):
        with open(local(__file__).dirname +
                  '/../../static/img/team/alja.jpg') as fp:
            io = StringIO.StringIO()
            io.write(fp.read())
            uploaded_picture = InMemoryUploadedFile(io, None, "alja.jpg",
                                                    "jpeg", io.len, None)
            uploaded_picture.seek(0)

        event_data = {
            "end_date": datetime.datetime.now(),
            "start_date": datetime.datetime.now(),
            "organizer": "some organizer",
            "creator": User.objects.filter(pk=1)[0],
            "title": "event title",
            "pub_date": datetime.datetime.now(),
            "country": "SI",
            "geoposition": Geoposition(46.05528, 14.51444),
            "location": "Ljubljana",
            "audience": [1],
            "theme": [1],
            "tags": ["tag1", "tag2"],
            "picture": uploaded_picture
        }

        test_event = create_or_update_event(**event_data)
        self.assertEqual(2, test_event.pk)
        self.assertEqual("Ljubljana", test_event.location)
        self.assertEqual("46.05528", str(test_event.geoposition.latitude))
        self.assertIn("tag1", test_event.tags.names())
        self.assertIn("tag2", test_event.tags.names())

        assert 'event_picture/alja' in test_event.picture.path
Beispiel #7
0
    def setUp(self):  # flake8: noqa
        super(NetworkGroupPluginTest, self).setUp()

        self.britain = NetworkGroup.objects.create(
            name='Open Knowledge Foundation Britain',
            group_type=0,  # local group
            description='Bisquits, tea, and open data',
            country='GB',
            mailinglist_url='http://lists.okfn.org/okfn-britain',
            homepage_url='http://gb.okfn.org/',
            twitter='OKFNgb')

        self.buckingham = NetworkGroup.objects.create(
            name='Open Knowledge Buckingham',
            group_type=0,  # local group
            description='We run the Open Palace project',
            country='GB',
            region=u'Buckingham',
            position=Geoposition(51.501364, -0.141890),
            homepage_url='http://queen.okfn.org/',
            twitter='buckingham',
            facebook_url='http://facebook.com/queenthepersonnottheband',
            youtube='Queenovision')

        self.germany = NetworkGroup.objects.create(
            name='Open Knowledge Foundation Germany',
            group_type=1,  # chapter
            description='Haben Sie ein Kugelschreiber bitte?',
            country='DE',
            mailinglist_url='http://lists.okfn.org/okfn-de',
            homepage_url='http://de.okfn.org/',
            twitter='OKFNde')

        self.localgroups = NetworkGroupList(group_type=0)
        self.chapters = NetworkGroupList(group_type=1)
Beispiel #8
0
    def post(self, request, *args, **kwargs):
        """
        POST USER LOCATION AS CHECK-IN
        :param request: POST
        :param args: Member, Geolocation, Time, Radius
        """
        member = request.user
        time = timezone.now()
        lat = request.POST['lat']
        lng = request.POST['lng']
        radius_meters = request.POST['radius']
        pos = Geoposition(lat, lng)

        location = Location(position=pos, created_time=time)
        location.save()
        zone = Zone(location=location, radius_meters=radius_meters)
        zone.save()

        check_in = CheckIn(member=member,
                           time=time,
                           zone=zone,
                           location=location)
        check_in.save()

        serializer = CheckInSerializer(check_in, many=False)
        return Response(serializer.data, status=status.HTTP_201_CREATED)
Beispiel #9
0
    def setUp(self):
        """
        Initializing the db
        """
        self.user = Sesh_User.objects.create_superuser(username='******',
                                                       email="*****@*****.**",
                                                       password='******')
        self.client = Client()

        self.site = Sesh_Site.objects.create(
            site_name='test',
            comission_date=timezone.now(),
            location_city='Kigali',
            location_country='Rwanda',
            position=Geoposition(12, 1),
            installed_kw=25,
            system_voltage=45,
            number_of_panels=45,
            battery_bank_capacity=450,
        )

        self.rmc_account = Sesh_RMC_Account.objects.create(
            site=self.site,
            api_key='testing',
            api_key_numeric='123456789987654321',
        )

        self.sensor_node = Sensor_Node.objects.create(site=self.site,
                                                      node_id=5)
Beispiel #10
0
def query_zip_code(zip_code):
    if not zip_code.isdigit():
        return
    r = requests.get('http://api.zippopotam.us/de/%s' % zip_code)
    if r.status_code == 200:
        result = r.json()['places'][0]
        return Geoposition(result['latitude'], result['longitude'])
    def test_edit_event_with_all_fields(self):
        # First create a new event
        with open(local(__file__).dirname +
                  '/../../static/img/team/alja.jpg') as fp:
            io = StringIO.StringIO()
            io.write(fp.read())
            uploaded_picture = InMemoryUploadedFile(io, None, "alja.jpg",
                                                    "jpeg", io.len, None)
            uploaded_picture.seek(0)

        event_data = {
            "end_date": datetime.datetime.now(),
            "start_date": datetime.datetime.now(),
            "organizer": "some organizer",
            "creator": User.objects.filter(pk=1)[0],
            "title": "event title",
            "pub_date": datetime.datetime.now(),
            "country": "SI",
            "geoposition": Geoposition(46.05528, 14.51444),
            "location": "Ljubljana",
            "audience": [1],
            "theme": [1],
            "tags": ["tag1", "tag2"],
            "picture": uploaded_picture
        }

        test_event = create_or_update_event(**event_data)

        # Then edit it
        with open(
                local(__file__).dirname +
                '/../../static/img/team/ercchy.jpg') as fp:
            io = StringIO.StringIO()
            io.write(fp.read())
            uploaded_picture = InMemoryUploadedFile(io, None, "ercchy.jpg",
                                                    "jpeg", io.len, None)
            uploaded_picture.seek(0)

        event_data = {
            "end_date": datetime.datetime.now(),
            "start_date": datetime.datetime.now(),
            "organizer": "another organiser",
            "creator": User.objects.filter(pk=1)[0],
            "title": "event title - edited",
            "pub_date": datetime.datetime.now(),
            "country": "SI",
            # "geoposition": Geoposition(46.05528,14.51444),
            "location": "Ljubljana",
            "audience": [1],
            "theme": [1],
            "tags": ["tag3", "tag4"],
            "picture": uploaded_picture
        }
        test_event = create_or_update_event(event_id=test_event.id,
                                            **event_data)
        assert "tag1" not in test_event.tags.names()

        assert 'event_picture/alja' not in test_event.picture
        assert 'event_picture/ercchy' in test_event.picture.path
Beispiel #12
0
class LocationFactory(factory.DjangoModelFactory):
    class Meta(object):
        model = Location

    name = factory.Sequence(lambda n: 'Location_{0}'.format(n))
    position = Geoposition(52.5, 13.4)
    country = factory.SubFactory(CountryFactory)
    group = factory.SubFactory(LocationGroupFactory)
Beispiel #13
0
    def test_area_high_right(self):
        # create booking
        booking = Booking()
        booking.client = self.client
        booking.passengers = 1
        booking.luggage_number = 2
        booking.flight = "18070-12324"
        # booking.departure = "Aéroport Charles de Gaulle (T3-Roissypole), Tremblay-en-France"
        # booking.destination = "23 Rue Madeleine Vionnet, 93300 Aubervilliers"
        booking.departure = Geoposition(49.010247, 2.547678)
        booking.destination = Geoposition(48.903194, 2.374365)
        booking.distance = math.hypot(48.903194 - 49.010247,
                                      2.374365 - 2.547678)

        self.assertFalse(booking is None)

        self.assertEqual(get_area(booking), self.high_right)
Beispiel #14
0
    def test_area_high_left(self):
        # create booking
        booking = Booking()
        booking.client = self.client
        booking.passengers = 1
        booking.luggage_number = 2
        booking.flight = "18070-12324"
        # booking.departure = "Aéroport Charles de Gaulle (T3-Roissypole), Tremblay-en-France"
        # booking.destination = "Place Charles de Gaulle, 75008 Paris"
        booking.departure = Geoposition(49.010247, 2.547678)
        booking.destination = Geoposition(48.873959, 2.295825)
        booking.distance = math.hypot(48.873959 - 49.010247,
                                      2.295825 - 2.547678)

        self.assertFalse(booking is None)

        self.assertEqual(get_area(booking), self.high_left)
Beispiel #15
0
    def test_area_bottom_left(self):
        # create booking
        booking = Booking()
        booking.client = self.client
        booking.passengers = 1
        booking.luggage_number = 2
        booking.flight = "18070-12324"
        # booking.departure = "Aéroport Charles de Gaulle (T3-Roissypole), Tremblay-en-France"
        # booking.destination = "Champ de Mars, 5 Avenue Anatole France, 75007 Paris""
        booking.departure = Geoposition(49.010247, 2.547678)
        booking.destination = Geoposition(48.858956, 2.294512)
        booking.distance = math.hypot(48.858956 - 49.010247,
                                      2.294512 - 2.547678)

        self.assertFalse(booking is None)

        self.assertEqual(get_area(booking), self.bottom_left)
 def test_db_value_to_python_object(self):
     obj = PointOfInterest.objects.create(name='Foo',
                                          address='some where',
                                          city='city',
                                          zipcode='12345',
                                          position=Geoposition(52.5, 13.4))
     poi = PointOfInterest.objects.get(id=obj.id)
     self.assertIsInstance(poi.position, Geoposition)
    def setUp(self):
        """
        Initializing
        """
        self.location = Geoposition(1.7, 1.8)

        self.organisation = Sesh_Organisation.objects.create(name='test_org',
                                                             slack_token='testing_token')

        self.test_user = Sesh_User.objects.create_user(username='******',
                                                       email='*****@*****.**',
                                                       password='******',
                                                       organisation=self.organisation,
                                                       is_org_admin=True,
                                                       department='test',
                                                       send_mail=True)

        self.site = Sesh_Site.objects.create(site_name='test_site',
                                             organisation=self.organisation,
                                             comission_date=timezone.now(),
                                             location_city='kigali',
                                             location_country='Rwanda',
                                             installed_kw=123.0,
                                             position = self.location,
                                             system_voltage = 12,
                                             number_of_panels = 12,
                                             battery_bank_capacity = 1000)

        self.attributes_data = [
                                   {"table":"Daily_Data_Point",
                                    "column":"daily_no_of_alerts",
                                    "operation":"average",
                                    "user_friendly_name":"Daily no of alerts average"},
                                   {"table":"Daily_Data_Point",
                                    "column":"daily_power_consumption_total",
                                    "operation":"sum",
                                    "user_friendly_name":"Daily power consumption total sum"
                                   },
                               ]

        self.daily_data_point_one = Daily_Data_Point.objects.create(
                                            site = self.site,
                                            date = timezone.now(),
                                            daily_pv_yield = 10,
                                            daily_power_consumption_total = 10,
                                    )

        self.daily_data_point_two = Daily_Data_Point.objects.create(
                                            site = self.site,
                                            date = timezone.now(),
                                            daily_pv_yield = 10,
                                            daily_power_consumption_total = 10,
                                    )

        self.report = Report_Job.objects.create(site=self.site,
                                            duration="daily",
                                            day_to_report=datetime.now().today().weekday(),
                                            attributes=self.attributes_data)
 def compress(self, data_list):
     if data_list:
         # set maximum geohash precision by default
         precision = data_list[2]
         if precision is None:
             precision = GEOHASH_PRECISION
         position = Geoposition(data_list[0], data_list[1])
         return position.geohash[0:precision]
     return None
Beispiel #19
0
def create_place(user):
    i = user.id
    place = Place(name="Place Test",
                  position=Geoposition(float(i * 78.2357), float(i * 15.4913)),
                  desc="I'm just a place in location " + str(i),
                  userId=user)
    place.save()

    return place
Beispiel #20
0
def add_place(puserId, plat, plong, pdesc, pname, ppic):
    p = Place.objects.get_or_create(name=pname,
                                    userId=UserProfile.objects.get(pk=puserId),
                                    position=Geoposition(
                                        float(plat), float(plong)),
                                    desc=pdesc,
                                    picLink=ppic,
                                    slug=slugify(pname))[0]
    return p
Beispiel #21
0
def mapdisplay(request):
    context = {}
    try:
        context['center'] = Area.objects.get(name='UQ').address.position
    except Area.DoesNotExist:
        context['center'] = Geoposition(-27.4702785, 153.0055264)

    context['carparks'] = Carpark.objects.filter(verified=True)
    return render(request, 'map.html', context)
Beispiel #22
0
 def __init__(self, *args, **kwargs):
     self.widget = GeopositionWidget()
     fields = (
         forms.DecimalField(label=_('latitude')),
         forms.DecimalField(label=_('longitude')),
     )
     if 'initial' in kwargs:
         kwargs['initial'] = Geoposition(*kwargs['initial'].split(','))
     super(GeopositionField, self).__init__(fields, **kwargs)
Beispiel #23
0
def modify(request):
    if request.method == 'GET':
        if 'lat' and 'lng' and 'uid' not in request.GET:
            return HttpResponse("fail no position in get")
        lat = request.GET['lat']
        lng = request.GET['lng']
        uid = request.GET['uid']
        try:
            p = Geoposition(lat, lng)
            obj = crime.objects.get(position=p, personne=User.objects.get(id=uid))
            obj_id = obj.id
            gouv = obj.gouvernorat
            desc = obj.description
            sx = obj.sexe
            temp = str(obj.time)[:-6]
            cat = obj.crimetype
            lat = str(obj.position.latitude)
            lon = str(obj.position.longitude)
            dictionnaire = {'id': obj_id,
                            'gouv': gouv,
                            'temp': temp,
                            'desc': desc,
                            'lat': lat,
                            'lon': lon,
                            'sx': sx,
                            'cat': cat}

            return HttpResponse(json.dumps(dictionnaire),
                                content_type='application/json')
        except crime.DoesNotExist:
            return HttpResponse("fail no crime in get")
    elif request.method == 'POST':
        if 'id' not in request.POST:
            return HttpResponse("fail no id")
        the_id = request.POST['id']
        try:
            obj = crime.objects.get(id=the_id)
        except crime.DoesNotExist:
            return HttpResponse("fail no crime")
        if request.user == obj.personne:
            if "gouvernorat" in request.POST:
                obj.gouvernorat = request.POST["gouvernorat"]
            if "description" in request.POST:
                obj.description = request.POST["description"]
            if "sexe" in request.POST:
                obj.sexe = request.POST["sexe"]
            if "crimetype" in request.POST:
                obj.crimetype = request.POST["crimetype"]
            if "position" in request.POST:
                position = request.POST["position"]
            if "time" in request.POST:
                obj.time = request.POST["time"]
            obj.save()
        return HttpResponseRedirect('/crime/mod/')
    else:
        return HttpResponse("fail all")
    def setUp(self):

        # Need this to create a Site
        self.VRM = VRM_Account.objects.create(vrm_user_id='*****@*****.**',
                                              vrm_password="******")

        # Setup Influx
        self._influx_db_name = 'test_db'
        self.i = Influx(database=self._influx_db_name)

        try:
            self.i.create_database(self._influx_db_name)
            #Generate random data  points for 24h
        except:
            self.i.delete_database(self._influx_db_name)
            sleep(1)
            self.i.create_database(self._influx_db_name)
            pass

        # Setup Kapacitor
        self.kap = Kapacitor()
        self.template_id = 'test_template'
        self.task_id = 'test_task'
        self.dj_template_name = 'alert_template'

        self.dbrps = [{'db': self._influx_db_name, 'rp': 'autogen'}]

        self.location = Geoposition(52.5, 24.3)
        dt = timezone.make_aware(timezone.datetime(2015, 12, 11, 22, 0))

        self.site = Sesh_Site.objects.create(site_name=u"Test_aggregate",
                                             comission_date=dt,
                                             location_city=u"kigali",
                                             location_country=u"rwanda",
                                             vrm_account=self.VRM,
                                             installed_kw=123.0,
                                             position=self.location,
                                             system_voltage=12,
                                             number_of_panels=12,
                                             vrm_site_id=213,
                                             battery_bank_capacity=12321,
                                             has_genset=True,
                                             has_grid=True)

        #self.no_points = create_test_data(self.site,
        #                                 start = self.site.comission_date,
        #                                 end = dt + timedelta( hours = 48),
        #                                 interval = 30,
        #                                 random = False)

        #create test user
        self.test_user = Sesh_User.objects.create_user("john doe",
                                                       "*****@*****.**",
                                                       "asdasd12345")
        #assign a user to the sites
        assign_perm("view_Sesh_Site", self.test_user, self.site)
Beispiel #25
0
def add_geoposition(countries):
    geo = Geoposition()
    for country in countries:
        if not country.get('cities') is None:
            for city in country['cities']:
                if city_dict.get(city['city']) is None:
                    city_location = geo.get_geoposition(
                        city['city'], country['country'])
                    city_dict[city['city']] = city_location
                else:
                    city_location = city_dict[city['city']]
                city['location'] = city_location
        if country_dict.get(country['country']) is None:
            country_location = geo.get_geoposition(country=country['country'])
            country_dict[country['country']] = country_location
        else:
            country_location = country_dict[country['country']]
        country['location'] = country_location
    return countries
def run():
    a = Location.objects.all()

    for item in a:
        if item.gps_latitude and item.gps_longitude:
            item.geo_location = Geoposition(latitude=item.gps_latitude,
                                            longitude=item.gps_longitude)
            item.save()
        else:
            pass
Beispiel #27
0
def seguimiento_gps(request):
    data = []
    p = Position(user=User.objects.get(id=int(request.POST.get('user', ''))),
                 position=Geoposition(request.POST.get('latitude', ''),
                                      request.POST.get('longitude', '')),
                 fecha=request.POST.get('fecha', None))
    p.save()
    data.append({'mensaje': "posicion registrada con exito"})
    data = json.dumps(data)
    return HttpResponse(data, content_type="application/json")
Beispiel #28
0
def event_create(request):
    if request.method == 'POST':  #If form was sent via POST method:
        context = {}
        form1 = EventForm(request.POST, prefix="form1")
        form2 = LocationForm(request.POST, prefix="form2")
        pos = form2['position'].value()  #get list of coordinates
        lat = pos[0]  #get latitude from the list
        lng = pos[1]  #get longitude from the list
        geo = Geoposition(
            lat, lng
        )  #Create a Geoposition object from the coordinates that are passed as arguments to constructor
        location = Location.objects.create(name="test", position=geo)
        name = form1['name'].value()
        cat = form1['category'].value(
        )  #category is given as an integer i.e: 1,2,3....
        category = Category.objects.get(
            pk=cat)  #get Category by pk and not by name
        d_start = form1['date_start'].value(
        )  #get Date string in format 2016-12-24
        date_start = datetime.strptime(
            d_start, '%Y/%m/%d %H:%M')  #create a datetime object
        d_end = form1['date_end'].value()
        date_end = datetime.strptime(
            d_end, '%Y/%m/%d %H:%M')  #create a datetime object
        description = form1['description'].value()
        person_limit = form1['person_limit'].value()
        fee = form1['fee'].value()
        public = form1['public'].value()
        participant = request.user.profile  #reference to Logged Profile object
        #Create an Event object
        newly_created_event = Event.objects.create(name=name,
                                                   category=category,
                                                   date_start=date_start,
                                                   date_end=date_end,
                                                   description=description,
                                                   person_limit=person_limit,
                                                   fee=fee,
                                                   public=public,
                                                   host=participant,
                                                   where=location)
        newly_created_event.add_participant(
            participant
        )  #Adds profile to profiles list in Event model and saves changes to database.
        return redirect(
            reverse('Event:event_detail',
                    kwargs={'event_pk': newly_created_event.pk
                            }))  #redirect to event detail page
    else:  #If entered to this URL by GET request:
        #Create a context  dictionary and pass both forms with different prefixes
        context = {
            'event_form': EventForm(prefix='form1'),
            'location_form': LocationForm(prefix='form2'),
        }
        template = 'Event/event_create.html'  #Destination template browswer will redirect to.
    return render(request, template, context)
Beispiel #29
0
class PlaceFactory(factory.DjangoModelFactory):
    class Meta(object):
        model = Place
        exclude = ['content_object']

    position = Geoposition(52.5, 13.4)
    country = factory.SubFactory(CountryFactory)

    object_id = factory.SelfAttribute('content_object.id')
    content_type = factory.LazyAttribute(
        lambda o: ContentType.objects.get_for_model(o.content_object))
Beispiel #30
0
    def to_python(self, value):
        if not value or value == 'None':
            return None
        if isinstance(value, Geoposition):
            return value
        if isinstance(value, list):
            return Geoposition(value[0], value[1])

        # default case is string
        value_parts = value.rsplit(',')
        try:
            latitude = value_parts[0]
        except IndexError:
            latitude = '0.0'
        try:
            longitude = value_parts[1]
        except IndexError:
            longitude = '0.0'

        return Geoposition(latitude, longitude)