Example #1
0
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):]]
Example #2
0
    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
Example #3
0
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()
Example #4
0
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()
Example #5
0
    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
Example #6
0
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