123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- #!/data/data/com.termux/files/usr/bin/python3
- import datetime as dt
- import json
- import os
- import pytz
- import subprocess
- import sys
- import yaml
- def to_iso6801_basic(dt):
- return dt.isoformat().replace(':', '').replace('-', '') \
- .replace('+0000', 'Z')
- class Position:
- def __init__(self, timestamp, latitude, longitude, altitude):
- self.timestamp = timestamp
- self.latitude = latitude
- self.longitude = longitude
- self.altitude = altitude
- @classmethod
- def from_termux_location(cls, provider='network'):
- loc_json = subprocess.check_output(['termux-location', '-p', provider]) \
- .decode(sys.stdout.encoding)
- req_ts = dt.datetime.now(pytz.utc)
- loc_attr = yaml.load(loc_json)
- if not loc_attr:
- return None
- else:
- print(loc_attr)
- return cls(
- timestamp=req_ts -
- dt.timedelta(milliseconds=loc_attr['elapsedMs']),
- latitude=loc_attr['latitude'],
- longitude=loc_attr['longitude'],
- altitude=loc_attr['altitude'],
- )
- def symlink(src, dst, force=False):
- if force and os.path.lexists(dst):
- os.unlink(dst)
- os.symlink(src=src, dst=dst)
- def compute(target_dir_path):
- cur = Position.from_termux_location()
- target_name = '{}.yml'.format(to_iso6801_basic(cur.timestamp))
- with open(os.path.join(target_dir_path, target_name), 'w') as f:
- f.write(yaml.dump(
- {
- 'lat': cur.latitude,
- 'lon': cur.longitude,
- 'alt': cur.altitude,
- },
- default_flow_style=False,
- ))
- symlink(
- src=target_name,
- dst=os.path.join(target_dir_path, 'last.yml'),
- force=True,
- )
- def _init_argparser():
- import argparse
- argparser = argparse.ArgumentParser(description=None)
- argparser.add_argument(
- '--target-dir',
- metavar='PATH',
- dest='target_dir_path',
- default='.',
- )
- return argparser
- def main(argv):
- argparser = _init_argparser()
- try:
- import argcomplete
- argcomplete.autocomplete(argparser)
- except ImportError:
- pass
- args = argparser.parse_args(argv)
- compute(**vars(args))
- return 0
- if __name__ == "__main__":
- sys.exit(main(sys.argv[1:]))
|