snose

Check-in [ba8e456fb6]
Login

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:Add ability to determine filename from first few lines of a file

Wanted to do this for awhile, but was too lazy until now.

Most of my snose files have the filepath as the first or second line in the
file (in a comment). This makes it easier to sneeze files out.

Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk | master
Files: files | file ages | folders
SHA3-256: ba8e456fb643dcbc3bad43a63c2cc46480ff54e5692cf076424a095e647636f4
User & Date: simon 2018-10-11 10:25:22
Context
2018-10-13
10:40
More Python 3 and 2 compatibility - UTF-8 write files

I suspect I didn't get everything quite as good as I could in simplenote.py I
wish Python 2 would go away - it's so messy trying to do both. check-in: 1fe8adea90 user: simon tags: master, trunk

2018-10-11
10:25
Add ability to determine filename from first few lines of a file

Wanted to do this for awhile, but was too lazy until now.

Most of my snose files have the filepath as the first or second line in the
file (in a comment). This makes it easier to sneeze files out. check-in: ba8e456fb6 user: simon tags: master, trunk

07:54
Merge in Python3 stuff check-in: 5d0589b3be user: simon tags: master, trunk
Changes
Hide Diffs Unified Diffs Ignore Whitespace Patch

Changes to snose.py.

1
2
3
4
5
6
7
8
9

10
11
12
13
14
15
16
17
18
19

20
21
22
23
24
25
26
27
28
29
30
31
32
33



34
35



36
37
38
39
40
41
42
43
44
45
#!/usr/bin/python
#snose - Simplenote Object Synchronisation (Explicit)

import sys
import json
import simplenote #Need to install this
import os.path, time
from optparse import OptionParser
import netrc


def main():
	parser = OptionParser()
	parser.add_option("--snort", action="store", type="string", help="Import a new file SNORT to Simplenote")
	parser.add_option("--sniff", action="store", nargs=2, type="string", help="Link a file with an already existing note in  Simplenote", metavar="<key> <filename>")
	parser.add_option("--sneeze", action="store", nargs=2, type="string", help="Export an existing file from Simplenote", metavar="<key> <filename>")
	parser.add_option("--blow", action="store", type="string", help="Roll back note of key BLOW to previous version")
	parser.add_option("--sync", help="Sync files in index", default=False, action='store_true')
	parser.add_option("--hanky", help="Use with --sync to perform a dry run", default=False, action='store_true')
	parser.add_option("--snot", help="List notes available for export (tagged snose)", default=False, action='store_true')

	parser.add_option("--username", action="store", type="string", help="Your Simplenote email address")
	parser.add_option("--password", action="store", type="string", help="Your Simplenote password")
	(options, args) = parser.parse_args()

	if not options.username or not options.password:
		#Check to see if stored somewhere
		try:
			options.username = netrc.netrc().authenticators("simple-note.appspot.com")[0]
			options.password = netrc.netrc().authenticators("simple-note.appspot.com")[2]
		except IOError as e:
			print('Username and password must be supplied or exist .netrc file under domain of simple-note.appspot.com')
			exit()
	snclient = simplenote.Simplenote(options.username, options.password)
	if options.snort:



		snort(snclient, options.snort)
	elif options.sniff:



		sniff(snclient, options.sniff[0], options.sniff[1])
	elif options.sneeze:
		sneeze(snclient, options.sneeze[0], options.sneeze[1])
	elif options.blow:
		blow(snclient, options.blow)
	elif options.snot:
		snot(snclient)
	elif options.sync and options.hanky:
		sync(snclient, True)
	elif options.sync:









>




|
|




>














>
>
>
|

>
>
>
|

|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#!/usr/bin/python
#snose - Simplenote Object Synchronisation (Explicit)

import sys
import json
import simplenote #Need to install this
import os.path, time
from optparse import OptionParser
import netrc
import re

def main():
	parser = OptionParser()
	parser.add_option("--snort", action="store", type="string", help="Import a new file SNORT to Simplenote")
	parser.add_option("--sniff", action="store", nargs=1, type="string", help="Link a file with an already existing note in  Simplenote", metavar="<key> <filename>")
	parser.add_option("--sneeze", action="store", nargs=1, type="string", help="Export an existing file from Simplenote", metavar="<key> <filename>")
	parser.add_option("--blow", action="store", type="string", help="Roll back note of key BLOW to previous version")
	parser.add_option("--sync", help="Sync files in index", default=False, action='store_true')
	parser.add_option("--hanky", help="Use with --sync to perform a dry run", default=False, action='store_true')
	parser.add_option("--snot", help="List notes available for export (tagged snose)", default=False, action='store_true')
	parser.add_option("--file", help="Filename for snort, sniff, sneeze", default=None, action='store')
	parser.add_option("--username", action="store", type="string", help="Your Simplenote email address")
	parser.add_option("--password", action="store", type="string", help="Your Simplenote password")
	(options, args) = parser.parse_args()

	if not options.username or not options.password:
		#Check to see if stored somewhere
		try:
			options.username = netrc.netrc().authenticators("simple-note.appspot.com")[0]
			options.password = netrc.netrc().authenticators("simple-note.appspot.com")[2]
		except IOError as e:
			print('Username and password must be supplied or exist .netrc file under domain of simple-note.appspot.com')
			exit()
	snclient = simplenote.Simplenote(options.username, options.password)
	if options.snort:
		if options.file is None:
			print('--file required')
			exit
		snort(snclient, options.file)
	elif options.sniff:
		if options.filename is None:
			print('--file required')
			exit
		sniff(snclient, options.sniff, options.file)
	elif options.sneeze:
		sneeze(snclient, options.sneeze, options.file)
	elif options.blow:
		blow(snclient, options.blow)
	elif options.snot:
		snot(snclient)
	elif options.sync and options.hanky:
		sync(snclient, True)
	elif options.sync:
122
123
124
125
126
127
128














129
130
131
132
133
134
135
	try:
		remote = snclient.get_note(key)	
	except IOerror as e:
		print("Failed to find that note on Simplenote")
		print(e)
	else:
		#Write file














		try:
			with open(filename, 'w') as f:
				f.write(remote[0]['content'])
		except IOError as e:
			print("Failed to create local copy of that note")
			print(e)
		else:







>
>
>
>
>
>
>
>
>
>
>
>
>
>







130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
	try:
		remote = snclient.get_note(key)	
	except IOerror as e:
		print("Failed to find that note on Simplenote")
		print(e)
	else:
		#Write file
		#If no filename supplied try to figure out from first three lines of file itself
		if filename is None:
			firstlines = remote[0]['content'].splitlines()[:3]
			for line in firstlines:
				try:
					filename = re.search(r'file:(\S+)\s', line).group(1)
				except IndexError:
					pass
				except AttributeError:
					pass
			if filename is None:
				print("Failed to identify filename within note, please provide on command line")
				exit
		filename = os.path.expanduser(filename)
		try:
			with open(filename, 'w') as f:
				f.write(remote[0]['content'])
		except IOError as e:
			print("Failed to create local copy of that note")
			print(e)
		else: