diff --git a/core/models/caves.py b/core/models/caves.py index e94ff74..11f7607 100644 --- a/core/models/caves.py +++ b/core/models/caves.py @@ -37,6 +37,28 @@ todo='''- Move utility function into utils.py - Restore constraint: unique_together = (("area", "kataster_number"), ("area", "unofficial_number")) ''' +def writetrogglefile(filepath, filecontent): + '''Set permissions to rw-rw-r-- and commit the new saved file to git''' + filepath = Path(filepath) + cwd = filepath.parent + filename = filepath.name + git = settings.GIT + + try: + with open(filepath, "w") as f: + os.chmod(filepath, 0o664) # set file permissions to rw-rw-r-- + f.write(filecontent) + print(f'WRITING{cwd}---{filename} ') + call([git, "add", filename], cwd=cwd) + call([git, "commit", "-m", 'Online cave or entrance edit'], cwd=cwd) + except PermissionError: + message = f'CANNOT save this file.\nPERMISSIONS incorrectly set on server for this file {filename}. Ask a nerd to fix this.' + return render(request,'errors/generic.html', {'message': message}) + except: + message = f'CANNOT git on server for this file {filename}. Edits not saved.\nAsk a nerd to fix this.' + return render(request,'errors/generic.html', {'message': message}) + + class Area(TroggleModel): short_name = models.CharField(max_length=100) name = models.CharField(max_length=200, blank=True, null=True) @@ -202,19 +224,15 @@ class Cave(TroggleModel): return res def writeDataFile(self): - try: - f = open(os.path.join(settings.CAVEDESCRIPTIONS, self.filename), "w") - except: - subprocess.call(settings.FIX_PERMISSIONS) - f = open(os.path.join(settings.CAVEDESCRIPTIONS, self.filename), "w") + filepath = os.path.join(settings.CAVEDESCRIPTIONS, self.filename) + t = loader.get_template('dataformat/cave.xml') #c = Context({'cave': self}) c = dict({'cave': self}) - u = t.render(c) - # u8 = u.encode("utf-8") - # f.write(u8) - f.write(u) - f.close() + u = t.render(c) + writetrogglefile(filepath, u) + return + def getArea(self): areas = self.area.all() @@ -382,18 +400,14 @@ class Entrance(TroggleModel): return Path(settings.ENTRANCEDESCRIPTIONS, self.filename) def writeDataFile(self): - try: - f = open(os.path.join(settings.ENTRANCEDESCRIPTIONS, self.filename), "w") - except: - subprocess.call(settings.FIX_PERMISSIONS) - f = open(os.path.join(settings.ENTRANCEDESCRIPTIONS, self.filename), "w") + filepath = os.path.join(settings.ENTRANCEDESCRIPTIONS, self.filename) + t = loader.get_template('dataformat/entrance.xml') c = dict({'entrance': self}) u = t.render(c) - # u8 = u.encode("utf-8") - # f.write(u8) - f.write(u) - f.close() + writetrogglefile(filepath, u) + return + class LogbookEntry(TroggleModel): """Single parsed entry from Logbook diff --git a/core/views/expo.py b/core/views/expo.py index 83dafa1..1acee15 100644 --- a/core/views/expo.py +++ b/core/views/expo.py @@ -312,8 +312,9 @@ def editexpopage(request, path): git = settings.GIT try: with open(filepath, "w") as f: + os.chmod(filepath, 0o664) # set file permissions to rw-rw-r-- f.write(result) - #print(f'WROTE {cwd}---{filename} ') + print(f'WRITING{cwd}---{filename} ') subprocess.call([git, "add", filename], cwd=cwd) subprocess.call([git, "commit", "-m", 'Edit this page'], cwd=cwd) except PermissionError: