| 
									
										
										
										
											2020-06-29 15:07:22 +00:00
										 |  |  | __filename__ = "petnames.py" | 
					
						
							|  |  |  | __author__ = "Bob Mottram" | 
					
						
							|  |  |  | __license__ = "AGPL3+" | 
					
						
							|  |  |  | __version__ = "1.1.0" | 
					
						
							|  |  |  | __maintainer__ = "Bob Mottram" | 
					
						
							|  |  |  | __email__ = "bob@freedombone.net" | 
					
						
							|  |  |  | __status__ = "Production" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import os | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def setPetName(baseDir: str, nickname: str, domain: str, | 
					
						
							|  |  |  |                handle: str, petname: str) -> bool: | 
					
						
							|  |  |  |     """Adds a new petname
 | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     if '@' not in handle: | 
					
						
							|  |  |  |         return False | 
					
						
							| 
									
										
										
										
											2020-06-29 15:23:52 +00:00
										 |  |  |     if ' ' in petname: | 
					
						
							|  |  |  |         petname = petname.replace(' ', '_') | 
					
						
							| 
									
										
										
										
											2020-06-29 15:07:22 +00:00
										 |  |  |     if handle.startswith('@'): | 
					
						
							|  |  |  |         handle = handle[1:] | 
					
						
							|  |  |  |     if petname.startswith('@'): | 
					
						
							|  |  |  |         petname = petname[1:] | 
					
						
							|  |  |  |     petnamesFilename = baseDir + '/accounts/' + \ | 
					
						
							|  |  |  |         nickname + '@' + domain + '/petnames.txt' | 
					
						
							|  |  |  |     entry = petname + ' ' + handle + '\n' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # does this entry already exist? | 
					
						
							|  |  |  |     if os.path.isfile(petnamesFilename): | 
					
						
							|  |  |  |         with open(petnamesFilename, 'r') as petnamesFile: | 
					
						
							|  |  |  |             petnamesStr = petnamesFile.read() | 
					
						
							| 
									
										
										
										
											2020-11-23 15:07:55 +00:00
										 |  |  |             if entry in petnamesStr: | 
					
						
							| 
									
										
										
										
											2020-06-29 15:07:22 +00:00
										 |  |  |                 return True | 
					
						
							|  |  |  |             if ' ' + handle + '\n' in petnamesStr: | 
					
						
							|  |  |  |                 petnamesList = petnamesStr.split('\n') | 
					
						
							|  |  |  |                 newPetnamesStr = '' | 
					
						
							|  |  |  |                 for pet in petnamesList: | 
					
						
							|  |  |  |                     if not pet.endswith(' ' + handle): | 
					
						
							|  |  |  |                         newPetnamesStr += pet + '\n' | 
					
						
							|  |  |  |                     else: | 
					
						
							|  |  |  |                         newPetnamesStr += entry | 
					
						
							|  |  |  |                 # save the updated petnames file | 
					
						
							| 
									
										
										
										
											2020-07-12 20:04:58 +00:00
										 |  |  |                 with open(petnamesFilename, 'w+') as petnamesFile: | 
					
						
							| 
									
										
										
										
											2020-06-29 15:07:22 +00:00
										 |  |  |                     petnamesFile.write(newPetnamesStr) | 
					
						
							|  |  |  |                 return True | 
					
						
							|  |  |  |             # entry does not exist in the petnames file | 
					
						
							|  |  |  |             with open(petnamesFilename, 'a+') as petnamesFile: | 
					
						
							|  |  |  |                 petnamesFile.write(entry) | 
					
						
							|  |  |  |             return True | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # first entry | 
					
						
							| 
									
										
										
										
											2020-07-12 20:04:58 +00:00
										 |  |  |     with open(petnamesFilename, 'w+') as petnamesFile: | 
					
						
							| 
									
										
										
										
											2020-06-29 15:07:22 +00:00
										 |  |  |         petnamesFile.write(entry) | 
					
						
							|  |  |  |     return True | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def getPetName(baseDir: str, nickname: str, domain: str, | 
					
						
							|  |  |  |                handle: str) -> str: | 
					
						
							|  |  |  |     """Given a handle returns the petname
 | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     if '@' not in handle: | 
					
						
							| 
									
										
										
										
											2020-06-29 16:25:28 +00:00
										 |  |  |         return '' | 
					
						
							| 
									
										
										
										
											2020-06-29 15:07:22 +00:00
										 |  |  |     if handle.startswith('@'): | 
					
						
							|  |  |  |         handle = handle[1:] | 
					
						
							|  |  |  |     petnamesFilename = baseDir + '/accounts/' + \ | 
					
						
							|  |  |  |         nickname + '@' + domain + '/petnames.txt' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if not os.path.isfile(petnamesFilename): | 
					
						
							| 
									
										
										
										
											2020-06-29 16:25:28 +00:00
										 |  |  |         return '' | 
					
						
							| 
									
										
										
										
											2020-06-29 15:07:22 +00:00
										 |  |  |     with open(petnamesFilename, 'r') as petnamesFile: | 
					
						
							|  |  |  |         petnamesStr = petnamesFile.read() | 
					
						
							|  |  |  |         if ' ' + handle + '\n' in petnamesStr: | 
					
						
							|  |  |  |             petnamesList = petnamesStr.split('\n') | 
					
						
							|  |  |  |             for pet in petnamesList: | 
					
						
							|  |  |  |                 if pet.endswith(' ' + handle): | 
					
						
							|  |  |  |                     return pet.replace(' ' + handle, '').strip() | 
					
						
							| 
									
										
										
										
											2020-06-29 16:25:28 +00:00
										 |  |  |     return '' | 
					
						
							| 
									
										
										
										
											2020-06-29 19:15:51 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def getPetNameHandle(baseDir: str, nickname: str, domain: str, | 
					
						
							|  |  |  |                      petname: str) -> str: | 
					
						
							|  |  |  |     """Given a petname returns the handle
 | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     if petname.startswith('@'): | 
					
						
							|  |  |  |         petname = petname[1:] | 
					
						
							|  |  |  |     petnamesFilename = baseDir + '/accounts/' + \ | 
					
						
							|  |  |  |         nickname + '@' + domain + '/petnames.txt' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if not os.path.isfile(petnamesFilename): | 
					
						
							|  |  |  |         return '' | 
					
						
							|  |  |  |     with open(petnamesFilename, 'r') as petnamesFile: | 
					
						
							|  |  |  |         petnamesStr = petnamesFile.read() | 
					
						
							|  |  |  |         if petname + ' ' in petnamesStr: | 
					
						
							|  |  |  |             petnamesList = petnamesStr.split('\n') | 
					
						
							|  |  |  |             for pet in petnamesList: | 
					
						
							|  |  |  |                 if pet.startswith(petname + ' '): | 
					
						
							| 
									
										
										
										
											2020-06-29 19:35:14 +00:00
										 |  |  |                     handle = pet.replace(petname + ' ', '').strip() | 
					
						
							|  |  |  |                     return handle | 
					
						
							| 
									
										
										
										
											2020-06-29 19:15:51 +00:00
										 |  |  |     return '' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def resolvePetnames(baseDir: str, nickname: str, domain: str, | 
					
						
							|  |  |  |                     content: str) -> str: | 
					
						
							|  |  |  |     """Replaces petnames with their full handles
 | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     if not content: | 
					
						
							|  |  |  |         return content | 
					
						
							|  |  |  |     if ' ' not in content: | 
					
						
							|  |  |  |         return content | 
					
						
							|  |  |  |     words = content.strip().split(' ') | 
					
						
							|  |  |  |     for wrd in words: | 
					
						
							|  |  |  |         # check initial words beginning with @ | 
					
						
							|  |  |  |         if not wrd.startswith('@'): | 
					
						
							|  |  |  |             break | 
					
						
							|  |  |  |         # does a petname handle exist for this? | 
					
						
							|  |  |  |         handle = getPetNameHandle(baseDir, nickname, domain, wrd) | 
					
						
							|  |  |  |         if not handle: | 
					
						
							|  |  |  |             continue | 
					
						
							|  |  |  |         # replace the petname with the handle | 
					
						
							| 
									
										
										
										
											2020-06-29 19:39:15 +00:00
										 |  |  |         content = content.replace(wrd + ' ', '@' + handle + ' ') | 
					
						
							| 
									
										
										
										
											2020-06-29 19:15:51 +00:00
										 |  |  |     return content |