def __init__(self, name, server=None): try: self.group = Group.objects.get(name=name) additional_regex = [filter.re for filter in PostFilter.objects.all()] self.filter_regex = Composite([NZB_REGEX]+additional_regex) except Group.DoesNotExist: group = Group() group.name = name group.save() self.group = group self.server = server if server else get_server()
def parse(self, all=False): """ parses group starting with the first post """ server = get_server() iterator = server.get_group(self.name) parser = Parser(self.name, server) if all: last = parser._parse(iterator) else: last = parser._parse(iterator) # create history of what was just parsed, then consolidate it with # existing parse histories self.consolidate_histories()
def parse_new(self): """ parses group starting with the newest post """ server = get_server() iterator = server.get_group(self.name) parser = Parser(self.name, server) last = self.get_last() if last == None: print '%s Parsing all posts' % (self.name) last = parser._parse(iterator) else: start = last+1 print '%s Parsing starting with: %s ' % (self.name, start) last = parser._parse(iterator[start-iterator.first:]) # create history of what was just parsed, then consolidate it with # existing parse histories self.consolidate_histories()
def get_nzb(self): """ Fetches the nzb post from usenet, decoding it. This will cache the post if needed """ if not self.nzb_id: # no nzb id, use find related to build an nzb for the file this # post is for. Only works if find_related() returns posts related = self.find_related() if related: return NZB(related).to_xml() return None if self._nzb: return self._nzb server = get_server() self._nzb = server.get_file(self.nzb_id) return self._nzb
def reverse_parse(self, all=False): """ Parses group starting from the newest post. This is used for building the index with the most recent content first. Useful for when you are concerned with something recent, and don't want to spend the time indexing from the beginning (for instance giganews retains 600 days) """ server = get_server() iterator = server.get_group(self.name) parser = Parser(self.name, server) end = iterator.last first = iterator.first count = iterator.count INTERVAL = 100000 print 'reverse parse: first=%s end=%s count=%s' % (first, end, count) while end > first: parser._parse(iterator[end-INTERVAL-first:end-first]) end -= INTERVAL
def get_nfo(self): """ Fetches the nfo post from usenet, decoding it. This will cache the post if needed """ if not self.nfo_id: # no nfo id, try and get it from the nzb if we have it if self.nzb_id: nzb = self.nzb match = NZB_NFO_REGEX.search(self.nzb) if match: # resolve the nfo_id and save it self.nfo_id = '<%s>' % match.groups()[1] self.save() return self.get_nfo() return None if self._nfo: return self._nfo server = get_server() self._nfo = server.get_file(self.nfo_id) return self._nfo