migrations, work on import script, new model Segment

This commit is contained in:
Tyrel Souza 2015-08-31 23:56:40 -04:00
parent 6043ee127a
commit aa9c14da6e
7 changed files with 79 additions and 10 deletions

View File

@ -1,3 +1,6 @@
from django.test import TestCase from django.test import TestCase
# Create your tests here. # Create your tests here.
class HomeTest(TestCase):
def test_home(self):
self.client.get("/")

View File

@ -1,3 +1,4 @@
Django==1.8.4 Django==1.8.4
django-extensions django-extensions
coverage coverage
gpxpy

View File

@ -1,13 +1,17 @@
from django.contrib import admin from django.contrib import admin
from tracking.models import Track, Point from tracking.models import Track, Point, Segment
class TrackAdmin(admin.ModelAdmin): class TrackAdmin(admin.ModelAdmin):
pass pass
class SegmentAdmin(admin.ModelAdmin):
pass
class PointAdmin(admin.ModelAdmin): class PointAdmin(admin.ModelAdmin):
pass pass
# Register your models here. # Register your models here.
admin.site.register(Track, TrackAdmin) admin.site.register(Track, TrackAdmin)
admin.site.register(Segment, SegmentAdmin)
admin.site.register(Point, PointAdmin) admin.site.register(Point, PointAdmin)

View File

@ -1,8 +1,8 @@
__author__ = 'tyrel' __author__ = 'tyrel'
from django.core.management.base import BaseCommand, CommandError from django.core.management.base import BaseCommand, CommandError
from django.contrib.auth.models import User from django.contrib.auth.models import User
from tracking.models import Track, Point from tracking.models import Track, Segment, Point
from xml.etree import ElementTree import gpxpy
import os import os
@ -24,9 +24,33 @@ class Command(BaseCommand):
self.stdout.write("Importing for user %s" % user.username) self.stdout.write("Importing for user %s" % user.username)
if os.path.isdir(filepath): if os.path.isdir(filepath):
self.stdout("OK, path") self.import_directory(user, filepath)
elif os.path.isfile(filepath): elif os.path.isfile(filepath):
self.stdout("OK, file") self.import_file(user, filepath)
else: else:
raise CommandError("{0} is neither an existing file, nor a path.".format(filepath)) raise CommandError("{0} is neither an existing file, nor a path.".format(filepath))
def import_file(self, user, filename):
with open(filename, 'r') as f:
gpx = gpxpy.parse(f)
for g_track in gpx.tracks:
for g_segment in g_track.segments:
for g_point in g_segment.points:
print 'Point at ({0},{1}) -> {2} -> {3}'.format(g_point.latitude, g_point.longitude, g_point.elevation)
def import_directory(self, user, directory):
pass
def etree_to_dict(t):
d = {t.tag : map(etree_to_dict, t.getchildren())}
d.update(('@' + k, v) for k, v in t.attrib.iteritems())
d['text'] = t.text
return d

View File

@ -20,6 +20,12 @@ class Migration(migrations.Migration):
('elevation', models.DecimalField(max_digits=20, decimal_places=2)), ('elevation', models.DecimalField(max_digits=20, decimal_places=2)),
], ],
), ),
migrations.CreateModel(
name='Segment',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
],
),
migrations.CreateModel( migrations.CreateModel(
name='Track', name='Track',
fields=[ fields=[
@ -30,8 +36,13 @@ class Migration(migrations.Migration):
], ],
), ),
migrations.AddField( migrations.AddField(
model_name='point', model_name='segment',
name='track', name='track',
field=models.ForeignKey(to='tracking.Track'), field=models.ForeignKey(to='tracking.Track'),
), ),
migrations.AddField(
model_name='point',
name='segment',
field=models.ForeignKey(to='tracking.Segment'),
),
] ]

View File

@ -0,0 +1,24 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
class Migration(migrations.Migration):
dependencies = [
('tracking', '0001_initial'),
]
operations = [
migrations.AlterField(
model_name='point',
name='latitude',
field=models.DecimalField(max_digits=13, decimal_places=10),
),
migrations.AlterField(
model_name='point',
name='longitude',
field=models.DecimalField(max_digits=12, decimal_places=10),
),
]

View File

@ -12,12 +12,14 @@ class Track(models.Model):
def finish(self): def finish(self):
return self.point_set.order_by("-time")[0].time return self.point_set.order_by("-time")[0].time
class Segment(models.Model):
track = models.ForeignKey(Track)
class Point(models.Model): class Point(models.Model):
time = models.DateTimeField() time = models.DateTimeField()
latitude = models.FloatField() latitude = models.DecimalField(max_digits=13, decimal_places=10)
longitude = models.FloatField() longitude = models.DecimalField(max_digits=12, decimal_places=10)
elevation = models.DecimalField(max_digits=20, decimal_places=2) elevation = models.DecimalField(max_digits=20, decimal_places=2)
track = models.ForeignKey(Track) segment = models.ForeignKey(Segment)