* Added IPR patent info search

* Added IPR patent info search term error pages
 * Fixed empty holder search template error
 * Some refactoring to have one ipr->doc relation instead of both ->drafts and -> rfcs
 - Legacy-Id: 687
This commit is contained in:
Henrik Levkowetz 2007-06-27 11:29:43 +00:00
parent 3fdaea80a7
commit b030e37f77
7 changed files with 58 additions and 20 deletions

View file

@ -115,6 +115,8 @@ class IprDetail(models.Model):
def __str__(self):
return self.title
def docs(self):
return list(self.drafts.all()) + list(self.rfcs.all())
def get_absolute_url(self):
return "/ipr/ipr-%s" % self.ipr_id
class Meta:

View file

@ -1,7 +1,9 @@
import re
import os.path
import django.utils.html
from django.shortcuts import render_to_response as render
from django.template import RequestContext
from django.conf import settings
from ietf.idtracker.models import IETFWG, InternetDraft, Rfc
from ietf.ipr.models import IprRfc, IprDraft, IprDetail
from ietf.ipr.related import related_docs
@ -10,10 +12,10 @@ from ietf.utils import log
def mark_last_doc(iprs):
for item in iprs:
if item.drafts.count():
item.last_draft = item.drafts.all()[int(item.drafts.count())-1]
if item.rfcs.count():
item.last_rfc = item.rfcs.all()[int(item.rfcs.count())-1]
docs = item.docs()
count = len(docs)
if count > 1:
item.last_draft = docs[count-1]
def mark_related_doc(iprs):
for item in iprs:
@ -46,6 +48,19 @@ def iprs_from_docs(docs):
iprs = list(set(iprs))
return iprs, docs
def patent_file_search(url, q):
if url:
fname = url.split("/")[-1]
fpath = os.path.join(settings.IPR_DOCUMENT_PATH, fname)
#print "*** Checking file", fpath
if os.path.exists(fpath):
#print "*** Found file", fpath
file = open(fpath)
text = file.read()
file.close
return q in text
return False
def search(request, type="", q="", id=""):
wgs = IETFWG.objects.filter(group_type__group_type_id=1).exclude(group_acronym__acronym='2000').select_related().order_by('acronym.acronym')
args = request.REQUEST.items()
@ -101,7 +116,28 @@ def search(request, type="", q="", id=""):
# Search by content of email or pagent_info field
# IPR list with documents
elif type == "patent_info_search":
pass
if len(q) < 3:
return render("ipr/search_error.html", {"q": q, "error": "The search string must contain at least three characters" },
context_instance=RequestContext(request) )
digits = re.search("[0-9]", q)
if not digits:
return render("ipr/search_error.html", {"q": q, "error": "The search string must contain at least one digit" },
context_instance=RequestContext(request) )
iprs = []
for ipr in IprDetail.objects.filter(status__in=[1,3]):
if ((q in ipr.patents) |
patent_file_search(ipr.legacy_url_0, q) |
patent_file_search(ipr.legacy_url_1, q) |
patent_file_search(ipr.legacy_url_2, q) ):
iprs.append(ipr)
count = len(iprs)
iprs = [ ipr for ipr in iprs if not ipr.updated_by.all() ]
# Some extra information, to help us render 'and' between the
# last two documents in a sequence
iprs.sort(key=lambda x: x.ipr_id, reverse=True) # Reverse sort
mark_last_doc(iprs)
return render("ipr/search_patent_result.html", {"q": q, "iprs": iprs, "count": count },
context_instance=RequestContext(request) )
# Search by wg acronym
# Document list with IPRs

View file

@ -21,6 +21,12 @@
200,sort,ignore:quote /ipr/search/?wg_search=acct&option=wg_search https://datatracker.ietf.org/public/ipr_search.cgi?option=wg_search&wg_search=acct # Empty result
200,sort,ignore:quote /ipr/search/?option=title_search&title_search=AAA https://datatracker.ietf.org/public/ipr_search.cgi?option=title_search&title_search=AAA
200,sort,ignore:quote /ipr/search/?option=title_search&title_search=AAAxz https://datatracker.ietf.org/public/ipr_search.cgi?option=title_search&title_search=AAAxz # Empty result
200,sort /ipr/search/?patent_info_search=123&option=patent_info_search https://datatracker.ietf.org/public/ipr_search.cgi?option=patent_info_search&patent_info_search=123
200,sort /ipr/search/?patent_info_search=31415&option=patent_info_search https://datatracker.ietf.org/public/ipr_search.cgi?option=patent_info_search&patent_info_search=31415 # Empty result
200 /ipr/search/?patent_info_search=12&option=patent_info_search https://datatracker.ietf.org/public/ipr_search.cgi?option=patent_info_search&patent_info_search=12 # Error: at least 3 characters
200 /ipr/search/?patent_info_search=abc&option=patent_info_search https://datatracker.ietf.org/public/ipr_search.cgi?option=patent_info_search&patent_info_search=abc # Error: at least 1 digit
200 /ipr/about/ https://datatracker.ietf.org/public/ipr_disclosure.cgi
200 /ipr/2006/
200 /ipr/2006/feb/

View file

@ -153,6 +153,8 @@ SERVER_MODE = 'development'
# The name of the method to use to invoke the test suite
TEST_RUNNER = 'ietf.tests.run_tests'
IPR_DOCUMENT_PATH = '/home/master-site/ftp/data/ietf/IPR'
# Put SECRET_KEY in here, or any other sensitive or site-specific
# changes. DO NOT commit settings_local.py to svn.
from settings_local import *

View file

@ -1,4 +1,4 @@
{% extends "ipr/search_result.html" %}
{% load ietf_filters %}
{% block search_header %}{% if not count %}Search result on {{ q }}{% else %}Patent Owner/Applicant Search Result{% endif %}{% endblock %}</b></td></tr>
{% block item_intro %}IPR that was submitted by <b><i>{{ q }}</i></b>,{% endblock %}
{% block intro_prefix %}IPR that was submitted by <b><i>{{ q }}</i></b>, and{% endblock %}

View file

@ -1,9 +1,5 @@
{% extends "ipr/search_result.html" %}
{% load ietf_filters %}
{% block search_header %}Patent Information Search Result{% endblock %}
{% block into_prefix %}
IPR that contains the string {{ q }} in the "Disclosure of Patent Information"
section of the form, or in the body of the text (for disclosures submitted by
e-mail), and
{% endblock %}
{% block search_header %}{% if not count %}Search result on {{ q }}{% else %}Patent Information Search Result{% endif %}{% endblock %}
{% block search_failed %}No IPR disclosures with the word(s) "<i>{{ q }}</i>" in the Patent Information have been submitted{% endblock %}
{% block intro_prefix %}IPR that contains the string <b><i>{{ q }}</i></b> in the "Disclosure of Patent Information" section of the form, or in the body of the text (for disclosures submitted by e-mail), and{% endblock %}

View file

@ -14,7 +14,7 @@
{% if not iprs %}
<tr>
<td></td>
<td colspan="2"><b>No IPR disclosures have been submitted by the <i>{{ q }}</i></b></td>
<td colspan="2"><b>{% block search_failed %}No IPR disclosures have been submitted by the <i>{{ q }}</i>{% endblock %}</b></td>
</tr>
{% else %}
<tr><td colspan="3">Total number of IPR disclosures found: {{ count }} </td></tr>
@ -29,12 +29,8 @@
is not related to a specific IETF contribution.
{% else %}
is related to
{% for item in ipr.drafts.all %}
{% ifnotequal ipr.drafts.count 1 %}{% ifequal item ipr.last_draft %}<b> and </b>{% endifequal %}{% endifnotequal %}
<b><i>{{ item.document }}, "{{ item.document.title }},"</i></b>{% if item.document.related %}, {{ item.document.relation }} {{ item.document.related }}, "{{ item.document.related.title }}"{% endif %}
{% endfor %}
{% for item in ipr.rfcs.all %}
{% ifnotequal ipr.rfcs.count 1 %}{% ifequal item ipr.last_rfc %} and {% endifequal %}{% endifnotequal %}
{% for item in ipr.docs %}
{% ifequal item ipr.last_draft %}<b> and </b>{% endifequal %}
<b><i>{{ item.document }}, "{{ item.document.title }},"</i></b>{% if item.document.related %}, {{ item.document.relation }} {{ item.document.related }}, "{{ item.document.related.title }}"{% endif %}
{% endfor %}
{% endif %}