Created Radiation, Photo classes and slimmed down main program.
- Radiation creates a list with timezone_aware datetime and radiation in µS/h. - Photo reads DateTimeOriginal from photo. - Photo.write_exif compiles new metadata object and writes exif tags to photo. - Documentd changes in CHANGELOG.md. - Changed Readme.me to match changes in code. - Removed obsolete line from .gitignore
This commit is contained in:
50
functions.py
50
functions.py
@@ -1,14 +1,16 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
"""Classes used by main program. Handles CSV and GPX processing."""
|
||||
''' Classes used by main program. '''
|
||||
|
||||
from datetime import datetime
|
||||
import pyexiv2
|
||||
|
||||
class Radiation:
|
||||
''' Handles CSV processing.'''
|
||||
def __init__(self, timestamp, radiation, local_timezone, si_factor):
|
||||
self.timestamp = self._time_conversion(timestamp, local_timezone)
|
||||
self.radiation = self._radiation(radiation, si_factor)
|
||||
self.radiation = self._radiation_conversion(radiation, si_factor)
|
||||
|
||||
def __repr__(self):
|
||||
return '%s %f µS/h' % (str(self.timestamp), self.radiation)
|
||||
@@ -19,7 +21,49 @@ class Radiation:
|
||||
csv_aware_time = csv_naive_time.astimezone(local_timezone)
|
||||
return csv_aware_time
|
||||
|
||||
def _radiation(self, radiation, si_factor):
|
||||
def _radiation_conversion(self, radiation, si_factor):
|
||||
# Convert CP/M to µS/h using si_factor
|
||||
radiation = round(float(radiation) * si_factor, 2)
|
||||
return radiation
|
||||
|
||||
class Photo:
|
||||
''' Reads and writes Exif metadata'''
|
||||
def __init__(self, photo, local_timezone):
|
||||
self.get_date = self._get_creation_date(photo, local_timezone)
|
||||
self.photo = photo
|
||||
|
||||
def __repr__(self):
|
||||
return 'Photo Creation Date: %s' % str(self.get_date)
|
||||
|
||||
def _get_creation_date(self, photo, local_timezone):
|
||||
# Load Exif data from photo
|
||||
metadata = pyexiv2.ImageMetadata(photo)
|
||||
metadata.read()
|
||||
date = metadata['Exif.Photo.DateTimeOriginal']
|
||||
# date.value creates datetime object in pic_naive_time
|
||||
pic_naive_time = date.value
|
||||
# Set timezone
|
||||
pic_aware_time = pic_naive_time.astimezone(local_timezone)
|
||||
return pic_aware_time
|
||||
|
||||
def write_exif(self, radiation, latitude, longitude, dry_run):
|
||||
|
||||
''' UNTESTED ! '''
|
||||
|
||||
metadata = pyexiv2.ImageMetadata(self.photo)
|
||||
|
||||
# Set new UserComment
|
||||
new_comment = 'Radiation ☢ ' + str(radiation) + ' µS/h'
|
||||
# Exif tags to write
|
||||
keys = ['Exif.Photo.UserComment', 'Exif.Photo.latitude', 'Exif.Photo.longitude']
|
||||
# Values to write
|
||||
values = [new_comment, latitude, longitude]
|
||||
|
||||
# Create metadata object with all data to write
|
||||
for key, value in zip(keys, values):
|
||||
metadata[key] = pyexiv2.ExifTag(key, value)
|
||||
|
||||
# Write Exif tags to file, if not in dry-run mode
|
||||
if dry_run == 'True':
|
||||
metadata.write()
|
||||
return new_comment
|
||||
|
Reference in New Issue
Block a user