1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
|
SHELL := /bin/bash
# if a virtualenv is used put the full python path
# e.g.: PYTHON=$$HOME/.virtualenvs/ishtar/bin/python
PYTHON=python
# put name of your current project
project=example_project
# list used apps
apps="ishtar_common" "archaeological_operations" "archaeological_context_records" "archaeological_files" "archaeological_finds" "archaeological_warehouse"
default_data='fr'
url='ishtar.example.com'
project_name='Test'
clean:
-rm -rf *~*
-find . -name '*.pyc' -exec rm {} \;
-find . -name '.*.swp' -exec rm {} \;
update: clean syncdb compilemessages collectstatic
test: clean
cd $(project); $(PYTHON) manage.py test $(apps)
pep8:
pep8 --filename=*.py --ignore=W --exclude="manage.py,settings.py,migrations" --statistics --repeat .
pylint:
for DIR in $(apps); do \
pylint "$(CURDIR)/$$DIR" --ignore=.git,migrations --max-public-methods=50 --ignored-classes=Item.Meta --method-rgx='[a-z_][a-z0-9_]{2,40}$$'; \
done
fresh_syncdb:
cd $(project); $(PYTHON) ./manage.py syncdb --noinput 2> /dev/null > /dev/null
cd $(project); $(PYTHON) ./manage.py migrate ishtar_common 2> /dev/null > /dev/null
if [[ '$(apps)' == *archaeological_files* ]]; then cd $(project); $(PYTHON) ./manage.py migrate archaeological_files 0013 2> /dev/null > /dev/null; fi
if [[ '$(apps)' == *archaeological_operations* ]]; then cd $(project); $(PYTHON) ./manage.py migrate archaeological_operations 2> /dev/null > /dev/null; fi
if [[ '$(apps)' == *archaeological_files* ]]; then cd $(project); $(PYTHON) ./manage.py migrate archaeological_files 2> /dev/null > /dev/null; fi
cd $(project); $(PYTHON) ./manage.py migrate 2> /dev/null > /dev/null
echo "* load default data"
# data migrations have created some default data - return to a clean state
cd $(project); $(PYTHON) ./manage.py flush --noinput 2> /dev/null
cd $(project); $(PYTHON) ./manage.py loaddata \
'../fixtures/initial_data-auth-'$(default_data)'.json' 2> /dev/null
cd $(project); $(PYTHON) ./manage.py loaddata \
'../ishtar_common/fixtures/initial_data-'$(default_data)'.json' 2> /dev/null
cd $(project); $(PYTHON) ./manage.py loaddata \
'../ishtar_common/fixtures/initial_towns-'$(default_data)'.json' 2> /dev/null
if [[ '$(apps)' == *archaeological_operations* ]]; then cd $(project); $(PYTHON) ./manage.py loaddata \
'../archaeological_operations/fixtures/initial_data-'$(default_data)'.json' 2> /dev/null; fi
if [[ '$(apps)' == *archaeological_files* ]]; then cd $(project); $(PYTHON) ./manage.py loaddata \
'../archaeological_files/fixtures/initial_data-'$(default_data)'.json' 2> /dev/null; fi
if [[ '$(apps)' == *archaeological_context_records* ]]; then cd $(project); $(PYTHON) ./manage.py loaddata \
'../archaeological_context_records/fixtures/initial_data-'$(default_data)'.json' 2> /dev/null; fi
if [[ '$(apps)' == *archaeological_finds* ]]; then cd $(project); $(PYTHON) ./manage.py loaddata \
'../archaeological_finds/fixtures/initial_data-'$(default_data)'.json' 2> /dev/null; fi
if [[ '$(apps)' == *archaeological_warehouse* ]]; then cd $(project); $(PYTHON) ./manage.py loaddata \
'../archaeological_warehouse/fixtures/initial_data-'$(default_data)'.json' 2> /dev/null; fi
echo "* create superuser"
cd $(project); $(PYTHON) ./manage.py createsuperuser
# "de-flush" migrations
$(PYTHON) ./manage.py migrate --fake 2> /dev/null > /dev/null
# add a default site
echo '[{"pk":null, "model": "sites.site", "fields": {"domain": "'$(URL)'", "name": "'$(PROJECT_NAME)'"}}]' > \
/tmp/site.json
cd $(project); $(PYTHON) ./manage.py loaddata /tmp/site.json
rm /tmp/site.json
syncdb:
cd $(project); $(PYTHON) manage.py syncdb --noinput
cd $(project); $(PYTHON) manage.py migrate
shell:
cd $(project);$(PYTHON) manage.py shell
run:
cd $(project); $(PYTHON) manage.py runserver 0.0.0.0:8000
compilemessages:
for DIR in $(apps); do \
cd $(CURDIR)/$$DIR; \
$(PYTHON) ../$(project)/manage.py compilemessages; \
done
collectstatic:
cd $(project);$(PYTHON) manage.py collectstatic --noinput
schemamigrations:
cd $(project);\
for APP in $(apps); do \
echo "* schemamigration for "$$APP; \
$(PYTHON) manage.py schemamigration --auto $$APP; \
done
generate_doc:
cd $(project);\
$(PYTHON) manage.py graph_models --pydot -I "ImporterType,ImporterDefault,ImporterDefaultValues,ImporterColumn,Regexp,ImportTarget,FormaterType,Import" ishtar_common > /tmp/ishtar.dot
dot -Tpng /tmp/ishtar.dot -o docs/source/_static/db-imports.png
rm /tmp/ishtar.dot
fixtures: fixtures_common fixtures_operations fixtures_archaeological_context_records fixtures_archaeological_finds fixtures_archaeological_warehouse fixtures_archaeological_files
fixtures_common: fixtures_common_importers
cd $(project); $(PYTHON) ./manage.py dumpdata --indent 4 \
ishtar_common.authortype \
ishtar_common.persontype \
ishtar_common.organizationtype \
ishtar_common.sourcetype \
> '../ishtar_common/fixtures/initial_data-'$(default_data)'.json'
fixtures_common_importers:
cd $(project); $(PYTHON) ./manage.py dumpdata --indent 4 \
ishtar_common.importertype \
ishtar_common.importerdefault \
ishtar_common.importerdefaultvalues \
ishtar_common.importercolumn \
ishtar_common.importtarget \
ishtar_common.formatertype \
> '../ishtar_common/fixtures/initial_importtypes-'$(default_data)'.json'
fixtures_initial_data:
cd $(project); $(PYTHON) ./manage.py dumpdata --indent 4 \
ishtar_common.authortype \
ishtar_common.persontype \
ishtar_common.organizationtype \
ishtar_common.sourcetype \
> '../ishtar_common/fixtures/initial_data-'$(default_data)'.json'
fixtures_operations:
cd $(project); $(PYTHON) ./manage.py dumpdata --indent 4 \
archaeological_operations.acttype \
archaeological_operations.operationtype \
archaeological_operations.period \
archaeological_operations.remaintype \
> '../archaeological_operations/fixtures/initial_data-'$(default_data)'.json'
fixtures_context_records:
cd $(project); $(PYTHON) ./manage.py dumpdata --indent 4 \
archaeological_context_records.datingquality \
archaeological_context_records.activitytype \
archaeological_context_records.identificationtype \
archaeological_context_records.unit \
archaeological_context_records.datingtype \
> '../archaeological_context_records/fixtures/initial_data-'$(default_data)'.json'
fixtures_finds:
cd $(project); $(PYTHON) ./manage.py dumpdata --indent 4 \
archaeological_finds.materialtype \
archaeological_finds.treatmenttype \
> '../archaeological_finds/fixtures/initial_data-'$(default_data)'.json'
fixtures_warehouse:
cd $(project); $(PYTHON) ./manage.py dumpdata --indent 4 \
archaeological_warehouse.containertype \
archaeological_warehouse.warehousetype \
> '../archaeological_warehouse/fixtures/initial_data-'$(default_data)'.json'
fixtures_files:
cd $(project); $(PYTHON) ./manage.py dumpdata --indent 4 \
archaeological_files.saisinetype \
archaeological_files.filetype \
archaeological_files.permittype \
> '../archaeological_files/fixtures/initial_data-'$(default_data)'.json'
|