Skip to content

Commit aed0065

Browse files
authored
Merge pull request #149 from MicroPyramid/dev
enhancements
2 parents 143eac5 + 35a55b4 commit aed0065

File tree

4 files changed

+97
-122
lines changed

4 files changed

+97
-122
lines changed

search/forms.py

+91-114
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,19 @@
1-
from haystack.forms import SearchForm
1+
import datetime
2+
from datetime import date
3+
from dateutil.relativedelta import relativedelta
4+
25
from django import forms
3-
from haystack.query import SearchQuerySet
4-
from haystack.query import SQ
6+
from haystack.forms import SearchForm
7+
from haystack.query import SearchQuerySet, SQ
8+
59
from peeldb.models import City
610

7-
valid_time_formats = ["%Y-%m-%d 00:00:00"]
11+
VALID_TIME_FORMATS = ["%Y-%m-%d 00:00:00"]
812

913

10-
class job_searchForm(SearchForm):
14+
class JobSearchForm(SearchForm):
15+
"""Search form for filtering and query building on job listings."""
16+
1117
q = forms.CharField(max_length=200, required=False)
1218
location = forms.CharField(required=False)
1319
experience = forms.IntegerField(required=False)
@@ -21,150 +27,121 @@ class job_searchForm(SearchForm):
2127
refine_location = forms.CharField(required=False)
2228

2329
def search(self):
30+
"""
31+
Build and return the search query based on form input.
2432
25-
# sqs = SearchQuerySet().models(JobPost).filter(status='Live')
26-
sqs = SearchQuerySet()
27-
sqs = sqs.filter_and(status="Live")
33+
The search query filters live job posts and then applies
34+
additional filters based on the form's cleaned_data.
35+
"""
36+
sqs = SearchQuerySet().filter_and(status="Live")
2837
if not self.is_valid():
2938
return sqs
30-
if self.cleaned_data["q"] and self.cleaned_data["location"]:
31-
term = self.cleaned_data["q"]
32-
term = term.replace("[", "")
33-
term = term.replace("]", "")
34-
term = term.replace("'", "")
35-
# sqs = sqs.filter_and(SQ(title=term) | SQ(designation=term)| SQ(skills=term))
36-
terms = [t.strip() for t in term.split(",")]
39+
40+
query = self.cleaned_data.get("q")
41+
location_field = self.cleaned_data.get("location")
42+
if query and location_field:
43+
# Process basic query filters.
44+
term = query.replace("[", "").replace("]", "").replace("'", "")
45+
terms = [t.strip() for t in term.split(",") if t.strip()]
3746
sqs = sqs.filter_and(
3847
SQ(title__in=terms) | SQ(designation__in=terms) | SQ(skills__in=terms)
3948
)
40-
# sqs = sqs.filter_or(SQ(designation__in=terms))
41-
# sqs = sqs.filter_or(SQ(skills__in=terms))
42-
location = self.cleaned_data["location"]
43-
location = location.replace("[", "")
44-
location = location.replace("]", "")
45-
location = location.replace("'", "")
46-
locations = [t.strip() for t in location.split(",")]
49+
50+
loc = location_field.replace("[", "").replace("]", "").replace("'", "")
51+
locations = [t.strip() for t in loc.split(",") if t.strip()]
4752
other_cities = City.objects.filter(name__in=locations).values_list(
4853
"parent_city__name", flat=True
4954
)
5055
sqs = sqs.filter_and(
5156
SQ(location__in=locations)
52-
| SQ(location__startswith=self.cleaned_data["location"])
57+
| SQ(location__startswith=location_field)
5358
| SQ(location__in=other_cities)
5459
)
5560

56-
if self.cleaned_data["job_type"]:
61+
if self.cleaned_data.get("job_type"):
5762
sqs = sqs.filter_and(job_type=self.cleaned_data["job_type"])
5863

59-
if self.cleaned_data["industry"]:
60-
term = self.cleaned_data["industry"]
61-
# sqs = sqs.filter_and(SQ(title=term) | SQ(designation=term)| SQ(skills=term))
62-
terms = [t.strip() for t in term.split(",")]
63-
sqs = sqs.filter_or(industry__in=terms)
64+
if self.cleaned_data.get("industry"):
65+
industry_value = self.cleaned_data["industry"]
66+
industries = [t.strip() for t in industry_value.split(",") if t.strip()]
67+
sqs = sqs.filter_or(industry__in=industries)
6468

65-
if self.cleaned_data["functional_area"]:
66-
term = self.cleaned_data["functional_area"]
67-
# sqs = sqs.filter_and(SQ(title=term) | SQ(designation=term)| SQ(skills=term))
68-
terms = [t.strip() for t in term.split(",")]
69-
sqs = sqs.filter_or(functional_area__in=terms)
69+
if self.cleaned_data.get("functional_area"):
70+
fa_value = self.cleaned_data["functional_area"]
71+
functional_areas = [
72+
t.strip() for t in fa_value.split(",") if t.strip()
73+
]
74+
sqs = sqs.filter_or(functional_area__in=functional_areas)
7075

71-
if self.cleaned_data["experience"] or self.cleaned_data["experience"] == 0:
76+
if self.cleaned_data.get("experience") is not None:
77+
experience_val = self.cleaned_data["experience"]
7278
sqs = sqs.filter_or(
73-
SQ(max_experience__gte=self.cleaned_data["experience"])
74-
& SQ(min_experience__lte=self.cleaned_data["experience"])
79+
SQ(max_experience__gte=experience_val)
80+
& SQ(min_experience__lte=experience_val)
7581
)
7682

77-
if self.cleaned_data["salary"]:
83+
if self.cleaned_data.get("salary") is not None:
84+
salary_val = self.cleaned_data["salary"]
7885
sqs = sqs.filter_or(
79-
SQ(max_salary__gte=self.cleaned_data["salary"])
80-
& SQ(min_salary__lte=self.cleaned_data["salary"])
86+
SQ(max_salary__gte=salary_val)
87+
& SQ(min_salary__lte=salary_val)
8188
)
82-
if self.cleaned_data["walkin_type"]:
83-
import datetime
84-
85-
if self.cleaned_data["walkin_type"] == "this_week":
86-
date = datetime.date.today()
87-
start_week = (
88-
date
89-
- datetime.timedelta(date.weekday())
90-
- datetime.timedelta(1)
91-
)
89+
90+
walkin_type = self.cleaned_data.get("walkin_type")
91+
if walkin_type:
92+
if walkin_type == "this_week":
93+
today = date.today()
94+
start_week = today - datetime.timedelta(today.weekday()) - datetime.timedelta(1)
9295
end_week = start_week + datetime.timedelta(6)
93-
start_week = datetime.datetime.strptime(
94-
str(start_week), "%Y-%m-%d"
95-
).strftime("%Y-%m-%d")
96-
end_week = datetime.datetime.strptime(
97-
str(end_week), "%Y-%m-%d"
98-
).strftime("%Y-%m-%d")
96+
start_str = start_week.strftime("%Y-%m-%d")
97+
end_str = end_week.strftime("%Y-%m-%d")
9998
sqs = sqs.filter_and(
100-
SQ(walkin_from_date__range=[start_week, end_week])
101-
| SQ(walkin_to_date__range=[start_week, end_week])
102-
)
103-
if self.cleaned_data["walkin_type"] == "next_week":
104-
date = datetime.date.today()
105-
start_week = (
106-
date
107-
- datetime.timedelta(date.isoweekday())
108-
+ datetime.timedelta(7)
99+
SQ(walkin_from_date__range=[start_str, end_str])
100+
| SQ(walkin_to_date__range=[start_str, end_str])
109101
)
102+
elif walkin_type == "next_week":
103+
today = date.today()
104+
start_week = today - datetime.timedelta(today.isoweekday()) + datetime.timedelta(7)
110105
end_week = start_week + datetime.timedelta(6)
111-
start_week = datetime.datetime.strptime(
112-
str(start_week), "%Y-%m-%d"
113-
).strftime("%Y-%m-%d")
114-
end_week = datetime.datetime.strptime(
115-
str(end_week), "%Y-%m-%d"
116-
).strftime("%Y-%m-%d")
106+
start_str = start_week.strftime("%Y-%m-%d")
107+
end_str = end_week.strftime("%Y-%m-%d")
117108
sqs = sqs.filter_and(
118-
SQ(walkin_from_date__range=[start_week, end_week])
119-
| SQ(walkin_to_date__range=[start_week, end_week])
109+
SQ(walkin_from_date__range=[start_str, end_str])
110+
| SQ(walkin_to_date__range=[start_str, end_str])
120111
)
121-
122-
# sqs = sqs.filter_and(SQ(walkin_from_date__range=[start_week, end_week]) | SQ(walkin_to_date__range=[start_week, end_week]))
123-
if self.cleaned_data["walkin_type"] == "this_month":
124-
current_date = datetime.date.today()
125-
from dateutil.relativedelta import relativedelta
126-
from datetime import date
127-
128-
start_week = date(current_date.year, current_date.month, 1)
129-
end_week = start_week + relativedelta(day=31)
130-
start_week = datetime.datetime.strptime(
131-
str(start_week), "%Y-%m-%d"
132-
).strftime("%Y-%m-%d")
133-
end_week = datetime.datetime.strptime(
134-
str(end_week), "%Y-%m-%d"
135-
).strftime("%Y-%m-%d")
112+
elif walkin_type == "this_month":
113+
current_date = date.today()
114+
start_month = date(current_date.year, current_date.month, 1)
115+
end_month = start_month + relativedelta(day=31)
116+
start_str = start_month.strftime("%Y-%m-%d")
117+
end_str = end_month.strftime("%Y-%m-%d")
136118
sqs = sqs.filter_and(
137-
SQ(walkin_from_date__range=[start_week, end_week])
138-
| SQ(walkin_to_date__range=[start_week, end_week])
119+
SQ(walkin_from_date__range=[start_str, end_str])
120+
| SQ(walkin_to_date__range=[start_str, end_str])
139121
)
140-
# if self.cleaned_data['walkin_type'] == 'next_month':
141-
# pass
142-
if self.cleaned_data["walkin_type"] == "custom_range":
143-
if self.cleaned_data["walkin_from_date"]:
144-
walkin_from_date = datetime.datetime.strptime(
145-
str(self.cleaned_data["walkin_from_date"]), "%Y-%m-%d"
146-
).strftime("%Y-%m-%d")
122+
elif walkin_type == "custom_range":
123+
if self.cleaned_data.get("walkin_from_date"):
124+
walkin_from = self.cleaned_data["walkin_from_date"].strftime(
125+
"%Y-%m-%d"
126+
)
147127
sqs = sqs.filter_and(
148-
SQ(walkin_from_date__gte=walkin_from_date)
149-
| SQ(walkin_to_date__gte=walkin_from_date)
128+
SQ(walkin_from_date__gte=walkin_from)
129+
| SQ(walkin_to_date__gte=walkin_from)
130+
)
131+
if self.cleaned_data.get("walkin_to_date"):
132+
walkin_to = self.cleaned_data["walkin_to_date"].strftime(
133+
"%Y-%m-%d"
150134
)
151-
if self.cleaned_data["walkin_to_date"]:
152-
walkin_to_date = datetime.datetime.strptime(
153-
str(self.cleaned_data["walkin_to_date"]), "%Y-%m-%d"
154-
).strftime("%Y-%m-%d")
155135
sqs = sqs.filter_and(
156-
SQ(walkin_from_date__gte=walkin_to_date)
157-
| SQ(walkin_to_date__lte=walkin_to_date)
136+
SQ(walkin_from_date__gte=walkin_to)
137+
| SQ(walkin_to_date__lte=walkin_to)
158138
)
159139
return sqs
160-
else:
161-
return []
140+
return []
162141

163142
def query(self):
164-
if self.cleaned_data["q"]:
165-
return self.cleaned_data["q"]
166-
return None
167-
168-
169-
# 13-11-2014
170-
# 20-11-2014 29-11-2014
143+
"""
144+
Return the query string if provided; otherwise, return None.
145+
"""
146+
q_value = self.cleaned_data.get("q")
147+
return q_value if q_value else None

search/templatetags/searchtags.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from django import template
2-
from search.forms import job_searchForm
2+
from search.forms import JobSearchForm
33
from peeldb.models import JOB_TYPE
44
from peeldb.models import WALKIN_TYPE
55

@@ -8,7 +8,7 @@
88

99
@register.inclusion_tag("search/search_filter.html", takes_context=True)
1010
def show_search_filter(context):
11-
search_form = job_searchForm()
11+
search_form = JobSearchForm()
1212
return {
1313
"request": context["request"],
1414
"search_form": search_form,
@@ -25,7 +25,7 @@ def show_search_filter(context):
2525

2626
@register.inclusion_tag("search/adv_search_filter.html", takes_context=True)
2727
def show_adv_search_filter(context):
28-
search_form = job_searchForm()
28+
search_form = JobSearchForm()
2929

3030
return {
3131
"request": context["request"],
@@ -37,7 +37,7 @@ def show_adv_search_filter(context):
3737

3838
@register.inclusion_tag("mobile/search/search_filter.html", takes_context=True)
3939
def show_mobile_search_filter(context):
40-
search_form = job_searchForm()
40+
search_form = JobSearchForm()
4141
return {
4242
"request": context["request"],
4343
"search_form": search_form,

search/views.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
)
3131
from pjob.refine_search import refined_search
3232
from pjob.views import get_page_number
33-
from search.forms import job_searchForm
33+
from search.forms import JobSearchForm
3434
from dashboard.tasks import save_search_results
3535

3636

@@ -98,7 +98,7 @@
9898

9999

100100
def custom_search(data, request):
101-
form = job_searchForm(data)
101+
form = JobSearchForm(data)
102102
searched_locations = searched_skills = searched_edu = searched_industry = (
103103
searched_states
104104
) = ""

social/tasks.py

-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
from jobsp.celery import app
22
from mpcomp.facebook import GraphAPI
3-
import celery
43
import requests
54
from django.conf import settings
65
from peeldb.models import (
@@ -11,7 +10,6 @@
1110
TwitterFollower,
1211
TwitterFriend,
1312
)
14-
from mpcomp import gauth, contacts
1513

1614

1715
@app.task()

0 commit comments

Comments
 (0)