Merge branch 'master' of gitorious.org:mediagoblin/mediagoblin

This commit is contained in:
Christopher Allan Webber 2012-03-14 16:00:53 -05:00
commit d87ed21ac4
5 changed files with 62 additions and 12 deletions

View File

@ -153,3 +153,21 @@ def convert_video_media_data(database):
assert len(document['media_data']) == 1 assert len(document['media_data']) == 1
document['media_data'] = document['media_data']['video'] document['media_data'] = document['media_data']['video']
collection.save(document) collection.save(document)
@RegisterMigration(11)
def convert_gps_media_data(database):
"""
Move media_data["gps"]["*"] to media_data["gps_*"].
In preparation for media_data.gps_*
"""
collection = database['media_entries']
target = collection.find(
{'media_data.gps': {'$exists': True}})
for document in target:
print document['_id'], "old:", document['media_data']
for key, value in document['media_data']['gps'].iteritems():
document['media_data']['gps_' + key] = value
del document['media_data']['gps']
print document['_id'], "new:", document['media_data']
collection.save(document)

View File

@ -14,12 +14,14 @@
# You should have received a copy of the GNU Affero General Public License # You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
from copy import copy
from mediagoblin.init import setup_global_and_app_config, setup_database from mediagoblin.init import setup_global_and_app_config, setup_database
from mediagoblin.db.mongo.util import ObjectId from mediagoblin.db.mongo.util import ObjectId
from mediagoblin.db.sql.models import (Base, User, MediaEntry, MediaComment, from mediagoblin.db.sql.models import (Base, User, MediaEntry, MediaComment,
Tag, MediaTag, MediaFile, MediaAttachmentFile) Tag, MediaTag, MediaFile, MediaAttachmentFile)
from mediagoblin.media_types.image.models import ImageData
from mediagoblin.media_types.video.models import VideoData from mediagoblin.media_types.video.models import VideoData
from mediagoblin.db.sql.open import setup_connection_and_db_from_config as \ from mediagoblin.db.sql.open import setup_connection_and_db_from_config as \
sql_connect sql_connect
@ -106,6 +108,25 @@ def convert_media_entries(mk_db):
session.close() session.close()
def convert_image(mk_db):
session = Session()
for media in mk_db.MediaEntry.find(
{'media_type': 'mediagoblin.media_types.image'}).sort('created'):
media_data = copy(media.media_data)
# TODO: Fix after exif is migrated
media_data.pop('exif', None)
if len(media_data):
media_data_row = ImageData(**media_data)
media_data_row.media_entry = obj_id_table[media._id]
session.add(media_data_row)
session.commit()
session.close()
def convert_video(mk_db): def convert_video(mk_db):
session = Session() session = Session()
@ -180,6 +201,8 @@ def run_conversion(config_name):
Session.remove() Session.remove()
convert_media_entries(mk_db) convert_media_entries(mk_db)
Session.remove() Session.remove()
convert_image(mk_db)
Session.remove()
convert_video(mk_db) convert_video(mk_db)
Session.remove() Session.remove()
convert_media_tags(mk_db) convert_media_tags(mk_db)

View File

@ -14,6 +14,8 @@ class ImageData(Base):
height = Column(Integer) height = Column(Integer)
gps_longitude = Column(Float) gps_longitude = Column(Float)
gps_latitude = Column(Float) gps_latitude = Column(Float)
gps_altitude = Column(Float)
gps_direction = Column(Float)
DATA_MODEL = ImageData DATA_MODEL = ImageData

View File

@ -119,7 +119,11 @@ def process_image(entry):
'clean': clean_exif(exif_tags)} 'clean': clean_exif(exif_tags)}
media_data['exif']['useful'] = get_useful( media_data['exif']['useful'] = get_useful(
media_data['exif']['clean']) media_data['exif']['clean'])
media_data['gps'] = gps_data
if len(gps_data):
for key in list(gps_data.keys()):
gps_data['gps_' + key] = gps_data.pop(key)
entry.media_data_init(**gps_data)
# clean up workbench # clean up workbench
workbench.destroy_self() workbench.destroy_self()

View File

@ -17,24 +17,27 @@
#} #}
{% block geolocation_map %} {% block geolocation_map %}
{% if media.media_data.has_key('gps') {% if app_config['geolocation_map_visible']
and app_config['geolocation_map_visible'] and media.media_data.gps_latitude is defined
and media.media_data.gps %} and media.media_data.gps_latitude
<h3 class="sidedata">Location</h3> and media.media_data.gps_longitude is defined
and media.media_data.gps_longitude %}
<h3 class="sidedata">{% trans %}Location{% endtrans %}</h3>
<div> <div>
{% set gps = media.media_data.gps %} {%- set lon = media.media_data.gps_longitude %}
{%- set lat = media.media_data.gps_latitude %}
{%- set osm_url = "http://openstreetmap.org/?mlat={lat}&mlon={lon}".format(lat=lat, lon=lon) %}
<div id="tile-map" style="width: 100%; height: 196px;"> <div id="tile-map" style="width: 100%; height: 196px;">
<input type="hidden" id="gps-longitude" <input type="hidden" id="gps-longitude"
value="{{ gps.longitude }}" /> value="{{ lon }}" />
<input type="hidden" id="gps-latitude" <input type="hidden" id="gps-latitude"
value="{{ gps.latitude }}" /> value="{{ lat }}" />
</div> </div>
<p> <p>
<small> <small>
View on {% trans -%}
<a href="http://openstreetmap.org/?mlat={{ gps.latitude }}&mlon={{ gps.longitude }}"> View on <a href="{{ osm_url }}">OpenStreetMap</a>
OpenStreetMap {%- endtrans %}
</a>
</small> </small>
</p> </p>
</div> </div>