class Logic: '''I keep track of mentions of restaurants and manage voting of which one to go to''' url_re = re.compile( '(http|https)://([\w_-]+(?:(?:\.[\w_-]+)+))([\w.,@?^=%&:/~+#-]*[\w@?^=%&/~+#-])?' ) command_key = '!' def __init__(self, name, guildId): self.database = database.VotingDB(guildId) self.commands = {'help': HelpCMD(self), \ 'vote': VoteCMD(self), \ 'endvote': VoteEndCMD(self), \ 'size': SizeCMD(self), \ 'forget': ForgetCMD(self)} self.__changelog = ChangeLog() self.name = name def should_listen(self, channel): ''' Returns true or false, if bot should listen on this channel ''' return channel == 'dinner-organization' def announce_self(self): return "Greetings! New {} is up! From commit {}.\nLatest changes:\n{}\nAs usual, for new feature requests, add issues to {}".format( \ self.name, str(self.__changelog.get_commit())[:7], self.__changelog.get_latest_changes(), \ self.__changelog.get_remote()) def is_restaurant(self, message): ''' Returns true or false if message contains a restaurant reference ''' urls = self.url_re.finditer(message) for urlgroups in urls: url = urlgroups.group() if 'maps' in url and 'goo' in url: return True return False def add(self, message): ''' Add a restaurant reference ''' urls = self.url_re.finditer(message) for urlgroups in urls: url = urlgroups.group() if 'maps' in url and 'goo' in url: isAddedNew = self.database.add(url) if isAddedNew: return "New restaurant added." else: return "This restaurant is already in the database" def is_command(self, message): ''' Returns true or false of message is a formal bot command ''' return message.startswith( self.command_key) and message[len(self.command_key ):] in self.commands def command_from_message(self, message): ''' Returns callable function for a given command ''' return self.commands[message[len(self.command_key):]]
def __init__(self, name, guildId): self.database = database.VotingDB(guildId) self.commands = {'help': HelpCMD(self), \ 'vote': VoteCMD(self), \ 'endvote': VoteEndCMD(self), \ 'size': SizeCMD(self), \ 'forget': ForgetCMD(self)} self.__changelog = ChangeLog() self.name = name
def main(): tag = subprocess.Popen(["git", "describe"], stdout=subprocess.PIPE).communicate() changelog = "CHANGELOG.md" user = "******" name = os.path.basename(os.getcwd()) cl = ChangeLog(changelog) if cl.is_dirty() or len(cl.get_entry(tag)) == 0: print("Please fix your " + changelog) cleanup() sys.exit(1) with open("tmp.changelog", "w") as f: entry = cl.get_entry(tag) f.write(entry[0][3:] + "\n") f.write(entry[1]) files.append("tmp.changelog") tarball_name = name + "-" + normalize_tag(tag) + ".tar.gz" call([ "git", "archive", "--format", "tar.gz", "--prefix", name + "-" + normalize_tag(tag) + "/", "-o", "export.tar.gz", tag ]) files.append("export.tar.gz") tarball_url = "https://codeload.github.com/" + user + "/" + name + "/tar.gz/" + tag print(tarball_url) urllib.request.urlretrieve(tarball_url, tarball_name) copyfile(tarball_name, "original.tar.gz") files.append(tarball_name) files.append("original.tar.gz") call(["gunzip", "original.tar.gz"]) call(["gunzip", "export.tar.gz"]) files.append("original.tar") files.append("export.tar") if call(["diffoscope", "original.tar", "export.tar"]) != 0: print("Retrieved tarball differs from local export") cleanup() sys.exit(1) files.append(tarball_name + ".asc") if call(["gpg2", "--armor", "--detach-sign", tarball_name]) != 0: print("Error signing tarball") cleanup() sys.exit(1) if call([ "hub", "release", "create", "-f", "tmp.changelog", "-a", tarball_name + ".asc", tag ]) != 0: print("Error creating GitHub release") cleanup()
def main(): tag = subprocess.Popen(["git", "describe"],stdout = subprocess.PIPE).communicate() changelog = "CHANGELOG.md" user = "******" name = os.path.basename(os.getcwd()) cl = ChangeLog(changelog) if cl.is_dirty() or len(cl.get_entry(tag)) == 0: print ("Please fix your " + changelog) cleanup() sys.exit(1) with open("tmp.changelog", "w") as f: entry = cl.get_entry(tag) f.write(entry[0][3:] + "\n") f.write(entry[1]) files.append("tmp.changelog") tarball_name = name+"-"+normalize_tag(tag)+".tar.gz" call(["git", "archive", "--format", "tar.gz", "--prefix", name+"-"+normalize_tag(tag)+"/", "-o", "export.tar.gz", tag]) files.append("export.tar.gz") tarball_url = "https://codeload.github.com/"+user+"/"+name+"/tar.gz/"+tag print(tarball_url) urllib.request.urlretrieve(tarball_url, tarball_name) copyfile(tarball_name, "original.tar.gz") files.append(tarball_name) files.append("original.tar.gz") call(["gunzip", "original.tar.gz"]) call(["gunzip", "export.tar.gz"]) files.append("original.tar") files.append("export.tar") if call(["diffoscope", "original.tar", "export.tar"]) != 0: print("Retrieved tarball differs from local export") cleanup() sys.exit(1) files.append(tarball_name+".asc") if call(["gpg2", "--armor", "--detach-sign", tarball_name]) != 0: print("Error signing tarball") cleanup() sys.exit(1) if call(["hub", "release", "create", "-f", "tmp.changelog", "-a", tarball_name+".asc", tag]) != 0: print("Error creating GitHub release") cleanup()
def __init__(self, config, graph): #self.changelog = ChangeLog(config) self.path = Path(config) changelog_dir = self.path.get_working_etc() self.changelog = ChangeLog(changelog_dir) self.changelog.initialize(config) self.parser = Parser(config) self.graph = graph
class Loader(object): """Load blog entries into Neo4j.""" def __init__(self, config, graph): #self.changelog = ChangeLog(config) self.path = Path(config) changelog_dir = self.path.get_working_etc() self.changelog = ChangeLog(changelog_dir) self.changelog.initialize(config) self.parser = Parser(config) self.graph = graph def changelog_exists(self): return self.changelog.exists() def update_entries(self): if self.changelog_exists(): print "UPDATING CHANGED" self.update_changed_entries() else: print "UPDATING ALL" self.update_all_entries() def update_all_entries(self): for source_abspath in self.parser.get_all_files(): self.update_entry(source_abspath) def update_changed_entries(self): update_count = 0 data = self.changelog.data if data is None: return update_count last_updated = self.get_last_updated() # Data is an OrderedDict, most recent changes last for source_path in reversed(data): status, timestamp = data[source_path] if self.old_timestamp(timestamp, last_updated): break source_abspath = self.path.get_source_abspath(source_path) update_count += self.update_entry(source_abspath) return update_count def old_timestamp(self, timestamp, last_updated): # Timestamps with a time before the last_updated time # were updated during the previous push return (timestamp <= last_updated) def update_entry(self, source_abspath): data = self.parser.get_data(source_abspath) fragment_abspath = self.path.get_fragment_abspath(source_abspath) if os.path.exists(fragment_abspath) is False: print "WARNING: Fragment Not Found", fragment_abspath return False # TODO: remove entry if fragment doesn't exist entry = self.graph.entries.save(data) return True def set_last_updated(self, last_updated): # Metadata methods are Neo4j-only right now self.graph.set_metadata("entries:last_updated", last_updated) def get_last_updated(self): # Metadata methods are Neo4j-only right now result = self.graph.get_metadata("entries:last_updated") last_updated = result.raw return last_updated