Skip to content

Commit 349e572

Browse files
committed
work mongo
1 parent 0db1cdf commit 349e572

38 files changed

+263
-66
lines changed

.DS_Store

6 KB
Binary file not shown.

Dockerfile.mongo

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,4 @@ COPY . /app
1717
ENV PATH=$PATH:/install/bin
1818

1919
RUN mkdir -p /install && \
20-
pip install -e ./stac_fastapi/types[dev] && \
21-
pip install -e ./stac_fastapi/api[dev] && \
22-
pip install -e ./stac_fastapi/extensions[dev] && \
2320
pip install -e ./stac_fastapi/mongo[dev,server]

Makefile

Lines changed: 0 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,6 @@
22
APP_HOST ?= 0.0.0.0
33
APP_PORT ?= 8080
44
EXTERNAL_APP_PORT ?= ${APP_PORT}
5-
run_docker = docker-compose run --rm \
6-
-p ${EXTERNAL_APP_PORT}:${APP_PORT} \
7-
-e APP_HOST=${APP_HOST} \
8-
-e APP_PORT=${APP_PORT} \
9-
app-sqlalchemy
10-
11-
run_pgstac = docker-compose run --rm \
12-
-p ${EXTERNAL_APP_PORT}:${APP_PORT} \
13-
-e APP_HOST=${APP_HOST} \
14-
-e APP_PORT=${APP_PORT} \
15-
app-pgstac
16-
175
run_mongo = docker-compose -f docker-compose.mongo.yml \
186
run \
197
-p ${EXTERNAL_APP_PORT}:${APP_PORT} \
@@ -22,66 +10,26 @@ run_mongo = docker-compose -f docker-compose.mongo.yml \
2210
-e APP_PORT=${APP_PORT} \
2311
app-mongo
2412

25-
.PHONY: image
26-
image:
27-
docker-compose build
28-
2913
.PHONY: mongo-image
3014
mongo-image:
3115
docker-compose -f docker-compose.mongo.yml build
3216

33-
.PHONY: docker-run
34-
docker-run: image
35-
$(run_docker)
36-
37-
.PHONY: docker-run-pgstac
38-
docker-run-pgstac: image
39-
$(run_pgstac)
40-
4117
.PHONY: docker-run-mongo
4218
docker-run-mongo: mongo-image
4319
$(run_mongo)
4420

45-
.PHONY: docker-shell
46-
docker-shell:
47-
$(run_docker) /bin/bash
48-
49-
.PHONY: docker-shell-pgstac
50-
docker-shell-pgstac:
51-
$(run_pgstac) /bin/bash
52-
5321
.PHONY: docker-shell-mongo
5422
docker-shell-mongo:
5523
$(run_mongo) /bin/bash
5624

57-
.PHONY: test-sqlalchemy
58-
test-sqlalchemy: run-joplin-sqlalchemy
59-
$(run_docker) /bin/bash -c 'export && ./scripts/wait-for-it.sh database:5432 && cd /app/stac_fastapi/sqlalchemy/tests/ && pytest'
60-
61-
.PHONY: test-pgstac
62-
test-pgstac:
63-
$(run_pgstac) /bin/bash -c 'export && ./scripts/wait-for-it.sh database:5432 && cd /app/stac_fastapi/pgstac/tests/ && pytest'
64-
6525
.PHONY: test-mongo
6626
test-mongo:
6727
$(run_mongo) /bin/bash -c 'export && cd /app/stac_fastapi/mongo/tests/ && pytest'
6828

69-
.PHONY: run-database
70-
run-database:
71-
docker-compose run --rm database
72-
7329
.PHONY: run-mongo-database
7430
run-mongo-database:
7531
docker-compose -f docker-compose.mongo.yml run --rm mongo_db
7632

77-
.PHONY: run-joplin-sqlalchemy
78-
run-joplin-sqlalchemy:
79-
docker-compose run --rm loadjoplin-sqlalchemy
80-
81-
.PHONY: run-joplin-pgstac
82-
run-joplin-pgstac:
83-
docker-compose run --rm loadjoplin-pgstac
84-
8533
.PHONY: test
8634
test: test-sqlalchemy test-pgstac test-mongo
8735

@@ -92,14 +40,6 @@ pybase-install:
9240
pip install -e ./stac_fastapi/types[dev] && \
9341
pip install -e ./stac_fastapi/extensions[dev]
9442

95-
.PHONY: pgstac-install
96-
pgstac-install: pybase-install
97-
pip install -e ./stac_fastapi/pgstac[dev,server]
98-
99-
.PHONY: sqlalchemy-install
100-
sqlalchemy-install: pybase-install
101-
pip install -e ./stac_fastapi/sqlalchemy[dev,server]
102-
10343
.PHONY: mongo-install
10444
mongo-install: pybase-install
10545
pip install -e ./stac_fastapi/mongo[dev,server]

scripts/publish

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
#!/bin/bash
2+
3+
set -e
4+
5+
if [[ -n "${CI}" ]]; then
6+
set -x
7+
fi
8+
9+
# Import shared variables
10+
SUBPACKAGE_DIRS=(
11+
"stac_fastapi/types"
12+
"stac_fastapi/extensions"
13+
"stac_fastapi/api"
14+
"stac_fastapi/sqlalchemy"
15+
"stac_fastapi/pgstac"
16+
"stac_fastapi/mongo"
17+
)
18+
19+
function usage() {
20+
echo -n \
21+
"Usage: $(basename "$0")
22+
Publish all stac-fastapi packages.
23+
24+
Options:
25+
--test Publish to test pypi. Requires a 'testpypi' repository
26+
be defined in your .pypirc;
27+
See https://packaging.python.org/guides/using-testpypi/#using-testpypi-with-pip
28+
"
29+
}
30+
31+
POSITIONAL=()
32+
while [[ $# -gt 0 ]]
33+
do
34+
key="$1"
35+
case $key in
36+
37+
--help)
38+
usage
39+
exit 0
40+
shift
41+
;;
42+
43+
--test)
44+
TEST_PYPI="--repository testpypi"
45+
shift
46+
;;
47+
48+
*) # unknown option
49+
POSITIONAL+=("$1") # save it in an array for later
50+
shift # past argument
51+
;;
52+
esac
53+
done
54+
set -- "${POSITIONAL[@]}" # restore positional parameters
55+
56+
# Fail if this isn't CI and we aren't publishing to test pypi
57+
if [ -z "${TEST_PYPI}" ] && [ -z "${CI}" ]; then
58+
echo "Only CI can publish to pypi"
59+
exit 1
60+
fi
61+
62+
if [ "${BASH_SOURCE[0]}" = "${0}" ]; then
63+
for PACKAGE_DIR in "${SUBPACKAGE_DIRS[@]}"
64+
do
65+
echo ${PACKAGE_DIR}
66+
pushd ./${PACKAGE_DIR}
67+
rm -rf dist
68+
python setup.py sdist bdist_wheel
69+
twine upload ${TEST_PYPI} dist/*
70+
popd
71+
72+
done
73+
fi

scripts/wait-for-it.sh

Lines changed: 186 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,186 @@
1+
#!/usr/bin/env bash
2+
# Use this script to test if a given TCP host/port are available
3+
4+
######################################################
5+
# Copied from https://github.com/vishnubob/wait-for-it
6+
######################################################
7+
8+
WAITFORIT_cmdname=${0##*/}
9+
10+
echoerr() { if [[ $WAITFORIT_QUIET -ne 1 ]]; then echo "$@" 1>&2; fi }
11+
12+
usage()
13+
{
14+
cat << USAGE >&2
15+
Usage:
16+
$WAITFORIT_cmdname host:port [-s] [-t timeout] [-- command args]
17+
-h HOST | --host=HOST Host or IP under test
18+
-p PORT | --port=PORT TCP port under test
19+
Alternatively, you specify the host and port as host:port
20+
-s | --strict Only execute subcommand if the test succeeds
21+
-q | --quiet Don't output any status messages
22+
-t TIMEOUT | --timeout=TIMEOUT
23+
Timeout in seconds, zero for no timeout
24+
-- COMMAND ARGS Execute command with args after the test finishes
25+
USAGE
26+
exit 1
27+
}
28+
29+
wait_for()
30+
{
31+
if [[ $WAITFORIT_TIMEOUT -gt 0 ]]; then
32+
echoerr "$WAITFORIT_cmdname: waiting $WAITFORIT_TIMEOUT seconds for $WAITFORIT_HOST:$WAITFORIT_PORT"
33+
else
34+
echoerr "$WAITFORIT_cmdname: waiting for $WAITFORIT_HOST:$WAITFORIT_PORT without a timeout"
35+
fi
36+
WAITFORIT_start_ts=$(date +%s)
37+
while :
38+
do
39+
if [[ $WAITFORIT_ISBUSY -eq 1 ]]; then
40+
nc -z $WAITFORIT_HOST $WAITFORIT_PORT
41+
WAITFORIT_result=$?
42+
else
43+
(echo -n > /dev/tcp/$WAITFORIT_HOST/$WAITFORIT_PORT) >/dev/null 2>&1
44+
WAITFORIT_result=$?
45+
fi
46+
if [[ $WAITFORIT_result -eq 0 ]]; then
47+
WAITFORIT_end_ts=$(date +%s)
48+
echoerr "$WAITFORIT_cmdname: $WAITFORIT_HOST:$WAITFORIT_PORT is available after $((WAITFORIT_end_ts - WAITFORIT_start_ts)) seconds"
49+
break
50+
fi
51+
sleep 1
52+
done
53+
return $WAITFORIT_result
54+
}
55+
56+
wait_for_wrapper()
57+
{
58+
# In order to support SIGINT during timeout: http://unix.stackexchange.com/a/57692
59+
if [[ $WAITFORIT_QUIET -eq 1 ]]; then
60+
timeout $WAITFORIT_BUSYTIMEFLAG $WAITFORIT_TIMEOUT $0 --quiet --child --host=$WAITFORIT_HOST --port=$WAITFORIT_PORT --timeout=$WAITFORIT_TIMEOUT &
61+
else
62+
timeout $WAITFORIT_BUSYTIMEFLAG $WAITFORIT_TIMEOUT $0 --child --host=$WAITFORIT_HOST --port=$WAITFORIT_PORT --timeout=$WAITFORIT_TIMEOUT &
63+
fi
64+
WAITFORIT_PID=$!
65+
trap "kill -INT -$WAITFORIT_PID" INT
66+
wait $WAITFORIT_PID
67+
WAITFORIT_RESULT=$?
68+
if [[ $WAITFORIT_RESULT -ne 0 ]]; then
69+
echoerr "$WAITFORIT_cmdname: timeout occurred after waiting $WAITFORIT_TIMEOUT seconds for $WAITFORIT_HOST:$WAITFORIT_PORT"
70+
fi
71+
return $WAITFORIT_RESULT
72+
}
73+
74+
# process arguments
75+
while [[ $# -gt 0 ]]
76+
do
77+
case "$1" in
78+
*:* )
79+
WAITFORIT_hostport=(${1//:/ })
80+
WAITFORIT_HOST=${WAITFORIT_hostport[0]}
81+
WAITFORIT_PORT=${WAITFORIT_hostport[1]}
82+
shift 1
83+
;;
84+
--child)
85+
WAITFORIT_CHILD=1
86+
shift 1
87+
;;
88+
-q | --quiet)
89+
WAITFORIT_QUIET=1
90+
shift 1
91+
;;
92+
-s | --strict)
93+
WAITFORIT_STRICT=1
94+
shift 1
95+
;;
96+
-h)
97+
WAITFORIT_HOST="$2"
98+
if [[ $WAITFORIT_HOST == "" ]]; then break; fi
99+
shift 2
100+
;;
101+
--host=*)
102+
WAITFORIT_HOST="${1#*=}"
103+
shift 1
104+
;;
105+
-p)
106+
WAITFORIT_PORT="$2"
107+
if [[ $WAITFORIT_PORT == "" ]]; then break; fi
108+
shift 2
109+
;;
110+
--port=*)
111+
WAITFORIT_PORT="${1#*=}"
112+
shift 1
113+
;;
114+
-t)
115+
WAITFORIT_TIMEOUT="$2"
116+
if [[ $WAITFORIT_TIMEOUT == "" ]]; then break; fi
117+
shift 2
118+
;;
119+
--timeout=*)
120+
WAITFORIT_TIMEOUT="${1#*=}"
121+
shift 1
122+
;;
123+
--)
124+
shift
125+
WAITFORIT_CLI=("$@")
126+
break
127+
;;
128+
--help)
129+
usage
130+
;;
131+
*)
132+
echoerr "Unknown argument: $1"
133+
usage
134+
;;
135+
esac
136+
done
137+
138+
if [[ "$WAITFORIT_HOST" == "" || "$WAITFORIT_PORT" == "" ]]; then
139+
echoerr "Error: you need to provide a host and port to test."
140+
usage
141+
fi
142+
143+
WAITFORIT_TIMEOUT=${WAITFORIT_TIMEOUT:-15}
144+
WAITFORIT_STRICT=${WAITFORIT_STRICT:-0}
145+
WAITFORIT_CHILD=${WAITFORIT_CHILD:-0}
146+
WAITFORIT_QUIET=${WAITFORIT_QUIET:-0}
147+
148+
# Check to see if timeout is from busybox?
149+
WAITFORIT_TIMEOUT_PATH=$(type -p timeout)
150+
WAITFORIT_TIMEOUT_PATH=$(realpath $WAITFORIT_TIMEOUT_PATH 2>/dev/null || readlink -f $WAITFORIT_TIMEOUT_PATH)
151+
152+
WAITFORIT_BUSYTIMEFLAG=""
153+
if [[ $WAITFORIT_TIMEOUT_PATH =~ "busybox" ]]; then
154+
WAITFORIT_ISBUSY=1
155+
# Check if busybox timeout uses -t flag
156+
# (recent Alpine versions don't support -t anymore)
157+
if timeout &>/dev/stdout | grep -q -e '-t '; then
158+
WAITFORIT_BUSYTIMEFLAG="-t"
159+
fi
160+
else
161+
WAITFORIT_ISBUSY=0
162+
fi
163+
164+
if [[ $WAITFORIT_CHILD -gt 0 ]]; then
165+
wait_for
166+
WAITFORIT_RESULT=$?
167+
exit $WAITFORIT_RESULT
168+
else
169+
if [[ $WAITFORIT_TIMEOUT -gt 0 ]]; then
170+
wait_for_wrapper
171+
WAITFORIT_RESULT=$?
172+
else
173+
wait_for
174+
WAITFORIT_RESULT=$?
175+
fi
176+
fi
177+
178+
if [[ $WAITFORIT_CLI != "" ]]; then
179+
if [[ $WAITFORIT_RESULT -ne 0 && $WAITFORIT_STRICT -eq 1 ]]; then
180+
echoerr "$WAITFORIT_cmdname: strict mode, refusing to execute subprocess"
181+
exit $WAITFORIT_RESULT
182+
fi
183+
exec "${WAITFORIT_CLI[@]}"
184+
else
185+
exit $WAITFORIT_RESULT
186+
fi
File renamed without changes.
File renamed without changes.
File renamed without changes.

stac_fastpi/mongo/setup.py renamed to stac_fastapi/mongo/setup.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,12 @@
99
"attrs",
1010
"pydantic[dotenv]",
1111
"stac_pydantic==2.0.*",
12-
"stac-fastapi.types",
13-
"stac-fastapi.api",
14-
"stac-fastapi.extensions",
12+
"stac-fastapi.types==2.3.0",
13+
"stac-fastapi.api==2.3.0",
14+
"stac-fastapi.extensions==2.3.0",
1515
"fastapi-utils",
1616
"pymongo",
17+
"pystac[validation]"
1718
]
1819

1920
extra_reqs = {

0 commit comments

Comments
 (0)