Basic structure of the extension & package
This commit is contained in:
parent
561d1282b3
commit
cfd3646fc3
38
CONTRIBUTING.md
Normal file
38
CONTRIBUTING.md
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
# Contributing guide
|
||||||
|
|
||||||
|
## How to add new functions
|
||||||
|
|
||||||
|
Try to put as little logic in the SQL extension as possible and
|
||||||
|
just use it as a wrapper to the Python module functionality.
|
||||||
|
|
||||||
|
### Python
|
||||||
|
|
||||||
|
...
|
||||||
|
|
||||||
|
### SQL
|
||||||
|
|
||||||
|
* Generate a **new subfolder version** for `sql` and `test` folders to define the new functions and tests
|
||||||
|
* Use symlinks to avoid file duplication between versions that don't update them
|
||||||
|
* Add or upgrade your SQL server functions
|
||||||
|
* Create tests for the client and server functions -- at least, to check that those are created
|
||||||
|
|
||||||
|
* Generate the **upgrade and downgrade files** for the extension for both client and server
|
||||||
|
|
||||||
|
* Update the control files and the Makefiles to generate the complete SQL file for the new created version
|
||||||
|
* These new version file (`crankshaft--X.Y.Z.sql`)
|
||||||
|
must be pushed and frozen. You should add it to the `.gitignore` file.
|
||||||
|
|
||||||
|
* Update the public docs! ;-)
|
||||||
|
|
||||||
|
## Naming things
|
||||||
|
|
||||||
|
# SQL
|
||||||
|
|
||||||
|
Use snake case (i.e. `snake_case` and not `CamelCase`) for all
|
||||||
|
functions. Prefix functions intended for public use with `cdb_`
|
||||||
|
and private functions (to be used only internally inside
|
||||||
|
the extension) with `_cdb_`.
|
||||||
|
|
||||||
|
# Python
|
||||||
|
|
||||||
|
...
|
17
DEPLOYING.md
Normal file
17
DEPLOYING.md
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
# Deployment
|
||||||
|
|
||||||
|
...
|
||||||
|
|
||||||
|
Deployment
|
||||||
|
|
||||||
|
```
|
||||||
|
# Install python module
|
||||||
|
sudo pip install {{path}}/python/crankshaft --upgrade
|
||||||
|
|
||||||
|
# Install extension
|
||||||
|
cd {{path}}/pg && sudo PGUSER=postgres make all install
|
||||||
|
```
|
||||||
|
|
||||||
|
Installing the extension in user databases:
|
||||||
|
|
||||||
|
...
|
18
README.md
18
README.md
@ -1 +1,17 @@
|
|||||||
# crankshaft
|
# crankshaft
|
||||||
|
|
||||||
|
CartoDB Spatial Analysis extension for PostgreSQL.
|
||||||
|
|
||||||
|
## Code organization
|
||||||
|
|
||||||
|
* *pg* contains the PostgreSQL extension source code
|
||||||
|
* *python* Python module
|
||||||
|
|
||||||
|
FIXME: should it be `./extension` and `./lib/python' ?
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
|
||||||
|
* pip
|
||||||
|
|
||||||
|
* sudo pip install nose
|
||||||
|
* CREATE LANGUAGE 'plpythonu';
|
||||||
|
3
pg/.gitignore
vendored
Normal file
3
pg/.gitignore
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
dist/
|
||||||
|
test/regression.diffs
|
||||||
|
test/regression.out
|
22
pg/Makefile
Normal file
22
pg/Makefile
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
EXTENSION = crankshaft
|
||||||
|
EXTVERSION = $(shell grep default_version $(EXTENSION).control | sed -e "s/default_version[[:space:]]*=[[:space:]]*'\([^']*\)'/\1/")
|
||||||
|
|
||||||
|
DATA = dist/$(EXTENSION)--$(EXTVERSION).sql
|
||||||
|
|
||||||
|
SOURCES_DATA_DIR = sql
|
||||||
|
SOURCES_DATA = $(wildcard sql/$(EXTVERSION)/*.sql)
|
||||||
|
|
||||||
|
dist/$(EXTENSION)--$(EXTVERSION).sql: $(SOURCES_DATA)
|
||||||
|
rm -f $@
|
||||||
|
cat $(SOURCES_DATA_DIR)/*.sql >> $@
|
||||||
|
|
||||||
|
dist/$(EXTENSION).control: $(EXTENSION).control
|
||||||
|
cp $< $@
|
||||||
|
|
||||||
|
REGRESS = $(notdir $(basename $(wildcard test/sql/*test.sql)))
|
||||||
|
TEST_DIR = test
|
||||||
|
REGRESS_OPTS = --inputdir='$(TEST_DIR)' --outputdir='$(TEST_DIR)'
|
||||||
|
|
||||||
|
PG_CONFIG = pg_config
|
||||||
|
PGXS := $(shell $(PG_CONFIG) --pgxs)
|
||||||
|
include $(PGXS)
|
7
pg/README.md
Normal file
7
pg/README.md
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
|
||||||
|
# Running the tests:
|
||||||
|
|
||||||
|
```
|
||||||
|
sudo make install
|
||||||
|
PGUSER=postgres make installcheck
|
||||||
|
```
|
5
pg/crankshaft.control
Normal file
5
pg/crankshaft.control
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
comment = 'CartoDB Spatial Analysis extension'
|
||||||
|
default_version = '0.0.1'
|
||||||
|
requires = 'plpythonu'
|
||||||
|
superuser = true
|
||||||
|
schema = cdb_crankshaft
|
5
pg/sql/poc_xyz.sql
Normal file
5
pg/sql/poc_xyz.sql
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
CREATE OR REPLACE FUNCTION cdb_poc_xyz()
|
||||||
|
RETURNS Text AS $$
|
||||||
|
from crankshaft.poc import xyz
|
||||||
|
return xyz()
|
||||||
|
$$ LANGUAGE plpythonu;
|
4
pg/test/expected/01_install_test.out
Normal file
4
pg/test/expected/01_install_test.out
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
-- Install dependencies
|
||||||
|
CREATE EXTENSION plpythonu;
|
||||||
|
-- Install the extension
|
||||||
|
CREATE EXTENSION crankshaft;
|
6
pg/test/expected/02_poc_xyz_test.out
Normal file
6
pg/test/expected/02_poc_xyz_test.out
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
SELECT cdb_crankshaft.cdb_poc_xyz();
|
||||||
|
cdb_poc_xyz
|
||||||
|
-------------
|
||||||
|
xyz-result
|
||||||
|
(1 row)
|
||||||
|
|
4
pg/test/results/01_install_test.out
Normal file
4
pg/test/results/01_install_test.out
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
-- Install dependencies
|
||||||
|
CREATE EXTENSION plpythonu;
|
||||||
|
-- Install the extension
|
||||||
|
CREATE EXTENSION crankshaft;
|
6
pg/test/results/02_poc_xyz_test.out
Normal file
6
pg/test/results/02_poc_xyz_test.out
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
SELECT cdb_crankshaft.cdb_poc_xyz();
|
||||||
|
cdb_poc_xyz
|
||||||
|
-------------
|
||||||
|
xyz-result
|
||||||
|
(1 row)
|
||||||
|
|
5
pg/test/sql/01_install_test.sql
Normal file
5
pg/test/sql/01_install_test.sql
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
-- Install dependencies
|
||||||
|
CREATE EXTENSION plpythonu;
|
||||||
|
|
||||||
|
-- Install the extension
|
||||||
|
CREATE EXTENSION crankshaft;
|
1
pg/test/sql/02_poc_xyz_test.sql
Normal file
1
pg/test/sql/02_poc_xyz_test.sql
Normal file
@ -0,0 +1 @@
|
|||||||
|
SELECT cdb_crankshaft.cdb_poc_xyz();
|
1
python/.gitignore
vendored
Normal file
1
python/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
*.pyc
|
9
python/README.md
Normal file
9
python/README.md
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
# Crankshaft Python Package
|
||||||
|
|
||||||
|
...
|
||||||
|
### Run the tests
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd crankshaft
|
||||||
|
nosetests test/
|
||||||
|
```
|
1
python/crankshaft/crankshaft/__init__.py
Normal file
1
python/crankshaft/crankshaft/__init__.py
Normal file
@ -0,0 +1 @@
|
|||||||
|
import poc
|
1
python/crankshaft/crankshaft/poc/__init__.py
Normal file
1
python/crankshaft/crankshaft/poc/__init__.py
Normal file
@ -0,0 +1 @@
|
|||||||
|
from xyz import *
|
3
python/crankshaft/crankshaft/poc/xyz.py
Normal file
3
python/crankshaft/crankshaft/poc/xyz.py
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
def xyz():
|
||||||
|
# print "XYZ"
|
||||||
|
return "xyz-result"
|
48
python/crankshaft/setup.py
Normal file
48
python/crankshaft/setup.py
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
|
||||||
|
"""
|
||||||
|
CartoDB Spatial Analysis Python Library
|
||||||
|
See:
|
||||||
|
https://github.com/CartoDB/crankshaft
|
||||||
|
"""
|
||||||
|
|
||||||
|
from setuptools import setup, find_packages
|
||||||
|
|
||||||
|
REQUIRES = [] # ['pysal','numpy']
|
||||||
|
|
||||||
|
setup(
|
||||||
|
name='crankshaft',
|
||||||
|
|
||||||
|
version='0.0.01',
|
||||||
|
|
||||||
|
description='CartoDB Spatial Analysis Python Library',
|
||||||
|
|
||||||
|
url='https://github.com/CartoDB/crankshaft',
|
||||||
|
|
||||||
|
author='Data Services Team - CartoDB',
|
||||||
|
author_email='dataservices@cartodb.com',
|
||||||
|
|
||||||
|
license='MIT',
|
||||||
|
|
||||||
|
classifiers=[
|
||||||
|
'Development Status :: 1 - Planning',
|
||||||
|
'Intended Audience :: Mapping comunity',
|
||||||
|
'Topic :: Maps :: Mapping Tools',
|
||||||
|
'License :: OSI Approved :: MIT License',
|
||||||
|
'Programming Language :: Python :: 2.7',
|
||||||
|
],
|
||||||
|
|
||||||
|
keywords='maps mapping tools spatial analysis geostatistics',
|
||||||
|
|
||||||
|
packages=find_packages(exclude=['contrib', 'docs', 'tests']),
|
||||||
|
|
||||||
|
extras_require={
|
||||||
|
'dev': ['unittest'],
|
||||||
|
'test': ['unittest', 'nose', 'mockredispy', 'mock'],
|
||||||
|
},
|
||||||
|
|
||||||
|
# install_requires=REQUIRES,
|
||||||
|
|
||||||
|
# requires=REQUIRES,
|
||||||
|
|
||||||
|
test_suite='test'
|
||||||
|
)
|
9
python/crankshaft/test/test_poc.py
Normal file
9
python/crankshaft/test/test_poc.py
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
#!/usr/local/bin/python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
import unittest
|
||||||
|
import crankshaft
|
||||||
|
|
||||||
|
class TestPoc(unittest.TestCase):
|
||||||
|
def test_should_have_xyz(self):
|
||||||
|
assert crankshaft.poc.xyz() == "xyz-result"
|
Loading…
Reference in New Issue
Block a user