Read and write meta data, such as tags/keywords, on Mac OS X files
Project description
osxmetadata Homepage
What is osxmetadata?
osxmetadata provides a simple interface to access various metadata about Mac OS X files. Currently supported metadata includes tags/keywords, Finder comments, and download data (downloaded where from and downloaded data). This module was inspired by osx-tags by "Ben S / scooby" and extended for my needs. It is published under the same MIT license.
Supported operating systems
Only works on Mac OS X.
Installation instructions
osxmetadata uses setuptools, thus simply run:
python setup.py install
Command Line Usage
Installs command line tool called osxmetadata. This is not full replacement for mdls and xattr commands but provides a simple interface to view/edit metadata supported by osxmetadata
Currently, only supports reading/writing tags and export to text or JSON. I will add additional metadata as well as import from JSON in the future.
usage: osxmetadata [-h] [-v] [-j] [-q] [--noprogress] [--force] [-o OUTFILE]
[--addtag ADDTAG] [--cleartags] [--rmtag RMTAG]
[files [files ...]]
Import and export metadata from files
positional arguments:
files
optional arguments:
-h, --help Show this help message
-v, --verbose Print verbose output during processing
-j, --json Output to JSON, optionally provide output file name:
--file=file.json
-q, --quiet Be extra quiet when running.
--noprogress Disable the progress bar while running
--force Force new metadata to be written even if unchanged
-o OUTFILE, --outfile OUTFILE
Name of output file. If not specified, output goes to
STDOUT
--addtag ADDTAG add tags/keywords for file
--cleartags remove all tags from file
--rmtag RMTAG remove tag from file
Example uses of the module
from osxmetadata import *
fname = 'foo.txt'
meta = OSXMetaData(fname)
print(meta.name)
print(meta.finder_comment)
print(meta.tags)
print(meta.where_from)
print(str(meta.download_date))
Tags
Accessed via OSXMetaData.tags
Behaves mostly like a set with following methods:
- update (sets multiple tags)
- add (add a single tag)
- += (add a single tag)
- remove (raises error if tag not present)
- discard (does not raise error if tag not present)
- clear (removes all tags)
To replace all tags with a new set of tags, use clear() then update()
Duplicate tags will be ignored.
The standard OS X Finder color labels are handled via tags. For example, setting a tag name of Gray, Green, Purple, Blue, Yellow, Red, or Orange will also set the equivalent Finder color label. This is consistent with how the Finder works. If a file has a color label, it will be returned as a tag of the corresponding color name when reading from OSXMetaData.tags
>>> from osxmetadata import OSXMetaData
>>> md = OSXMetaData('foo.txt')
>>> md.tags.update('Foo','Gray','Red','Test')
>>> print(md.tags)
Foo, Gray, Red, Test
#Standard Mac Finder color labels are normalized
>>> md.tags.add('PURPLE')
>>> print(md.tags)
Foo, Purple, Red, Test, Gray
>>> md.tags.add('FOOBAR')
>>> print(md.tags)
Foo, Purple, Red, Test, Gray, FOOBAR
>>> md.tags += 'MyCustomTag'
>>> print(md.tags)
Foo, Purple, Red, Test, Gray, MyCustomTag, FOOBAR
>>> md.tags.remove('Purple')
>>> print(md.tags)
Foo, Red, Test, Gray, MyCustomTag, FOOBAR
>>> md.tags.remove('Purple')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "osxmetadata/osxmetadata.py", line 148, in remove
tags.remove(self.__tag_normalize(tag))
KeyError: 'Purple\n3'
>>> md.tags.discard('Purple')
>>> md.tags.discard('Red')
>>> print(md.tags)
Foo, Test, Gray, MyCustomTag, FOOBAR
>>> len(md.tags)
5
>>> md.tags.clear()
>>> print(md.tags)
>>> len(md.tags)
0
>>>
Finder Comments
Accessed via OXMetaData.finder_comment
Behaves mostly like a string. You can assign a string or use +=. To clear, assign None or ''
>>> md.finder_comment = 'My Comment'
>>> print(md.finder_comment)
My Comment
>>> md.finder_comment += ', and FooBar!'
>>> print(md.finder_comment)
My Comment, and FooBar!
>>> md.finder_comment = None
>>> print(md.finder_comment)
>>>
Download Data
Accessed via OSXMetaData.download_date (datetime.datetime object) and OSXMetaData.where_from (list of URLs as strings)
>>> import datetime
>>> md.download_date = datetime.datetime.now()
>>> print(str(md.download_date))
2018-12-15 15:45:10.869535
>>> md.where_from = ['http://wwww.mywebsite.com','https://downloads.mywebsite.com/downloads/foo']
>>> print(md.where_from)
['http://wwww.mywebsite.com', 'https://downloads.mywebsite.com/downloads/foo']
>>> md.where_from=[]
>>> print(md.where_from)
[]
>>>
Usage Notes
Changes are immediately written to the file. For example, OSXMetaData.tags.add('Foo') immediately writes the tag 'Foo' to the file.
Metadata is refreshed from disk every time a class property is accessed.
This will only work on file systems that support Mac OS X extended attributes.
Dependencies
Acknowledgements
This module was inspired by osx-tags by "Ben S / scooby". I leveraged osx-tags to bootstrap the design of this module. I wanted a more general OS X metadata library so I rolled my own.
To set the Finder comments, I use py-applescript by "Raymond Yee / rdhyee". Rather than import this module, I included the entire module (which is published as public domain code) in a private module to prevent ambiguity with other applescript modules on PyPi. py-applescript uses a native bridge via PyObjC and is very fast compared to the other osascript based modules.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file osxmetadata-0.95.9.tar.gz.
File metadata
- Download URL: osxmetadata-0.95.9.tar.gz
- Upload date:
- Size: 30.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.12.1 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.7.3 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
94d1596ccde3f8bcfa3a7967b5467a853e8a5d61c01a95e8d2ac28253b13cfec
|
|
| MD5 |
64ea06afaea9b328abd2e2dd2d323449
|
|
| BLAKE2b-256 |
96a7c58915ad0c89173636ac5ec83fe3d3167011ce6463ffe05500e082e28861
|
File details
Details for the file osxmetadata-0.95.9-py3-none-any.whl.
File metadata
- Download URL: osxmetadata-0.95.9-py3-none-any.whl
- Upload date:
- Size: 46.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.12.1 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.7.3 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bbaec1fcf092ec8d606154f6964f6f2dc02e397aec3b80cae8ba6a3f15d7e5c8
|
|
| MD5 |
21ddcd1dfe738bb8ae1c65a498dd5187
|
|
| BLAKE2b-256 |
65949c31ae568775947c4c6c6762b4fed472b027560c25d3ea1119e1c298a60d
|