Skip to content
Snippets Groups Projects
Commit c7c7ded1 authored by xaingling's avatar xaingling
Browse files

add app_common to pypi

parent bcfd22ac
No related branches found
No related tags found
1 merge request!32add app_common to pypi
......@@ -2,4 +2,6 @@
*.pyc
build/*
*.egg-info/*
dist/*
\ No newline at end of file
dist/*
.pytest_cache
lib
\ No newline at end of file
image: continuumio/miniconda3:latest
stages:
- deploy
install_dependencies:
stage: deploy
rules:
- if: $CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
tags:
- prod
script:
- echo "installing requirements"
- if [ -d "/home/ceotr/miniconda3/envs/app_common" ]; then CONDA_COMMAND="conda env update -f environment.yml --prune"; else CONDA_COMMAND="conda env create -f environment.yml"; fi
- ${CONDA_COMMAND}
- conda init bash
- source ~/.bashrc
- conda activate app_common
- echo "Building package"
- python setup.py sdist
- echo "uploading to PyPI"
- python -m twine upload --config-file ~/resource/pypi/.pypirc dist/*
"""
Solution for people who love Django ORM but don't want to use Django as a web framework
Please call the init_django_orm function and provided the setting parameter before using the django database functions
the setting parameter must be a object or a dictionary format which contain DATABASES for database config and
INSTALLED_APPS for app module path variables
"""
from app_common.django_orm import orm_config
from .django_orm import init_django_orm
import os
import sys
DATABASE_CONFIG_NAME = "DATABASES"
INSTALLED_APP_CONFIG_NAME = "INSTALLED_APPS"
def init_django_orm(setting):
database, installed_apps = setting_content_validation(setting)
database = database_config_validation_and_proxy(database)
os.environ["DJANGO_SETTINGS_MODULE"] = "app_common.django_orm.orm_config"
# bypass Django setting
module_database_config_replace_adapter(database)
from django.apps import apps
# bypass Django apps module necessary for database init
def populate_django_apps(app_location):
apps.populate(app_location)
from django.apps import AppConfig
the_apps = installed_apps
def create():
the_app_list = []
for x in the_apps:
the_app_list.append(AppConfig.create(x))
populate_django_apps(the_app_list)
create()
def setting_content_validation(setting):
# make sure setting contain the variables we want
try:
if type(setting) is dict:
DATABASE = setting["DATABASES"]
INSTALLED_APPS = setting["INSTALLED_APPS"]
return DATABASE, INSTALLED_APPS
else:
DATABASE = setting.DATABASES
INSTALLED_APPS = setting.INSTALLED_APPS
return DATABASE, INSTALLED_APPS
except AttributeError or KeyError as e:
msg = "{}\nsetting must be dictionary format or obj format which contain the variables DATABASE, INSTALLED_APPS".format(
e)
raise AttributeError(msg)
def database_config_validation_and_proxy(database_setting):
# make sure database config has variables
if type(database_setting) is not dict:
msg = "database setting must be dictionary format"
raise AttributeError(msg)
SQLLITE_DJANGO_ENGINE = "django.db.backends.sqlite3"
default_database = database_setting
if "default" in database_setting:
default_database = database_setting["default"]
require_variables = ["ENGINE", "NAME"]
condition_item = ["USER", "PASSWORD"]
option_variables = ["HOST", "PORT"]
for item in require_variables:
if item in default_database:
if item == "ENGINE":
if default_database[item] != SQLLITE_DJANGO_ENGINE:
for condition_item in condition_item:
if condition_item not in default_database:
msg = "Variable {} is required".format(condition_item)
raise AttributeError(msg)
else:
for condition_item in condition_item:
if condition_item not in condition_item:
default_database[condition_item] = ""
else:
msg = "Variable {} is required".format(item)
raise AttributeError(msg)
for option_item in option_variables:
if option_item not in default_database:
default_database[option_item] = ""
return default_database
def module_database_config_replace_adapter(default_dataset_config):
# replace content which already loaded
for module_name, module_content in sys.modules.items():
if module_name == "app_common.django_orm.orm_config":
module_content.DATABASES["default"]["ENGINE"] = default_dataset_config["ENGINE"]
module_content.DATABASES["default"]["NAME"] = default_dataset_config["NAME"]
module_content.DATABASES["default"]["USER"] = default_dataset_config["USER"]
module_content.DATABASES["default"]["PASSWORD"] = default_dataset_config["PASSWORD"]
module_content.DATABASES["default"]["HOST"] = default_dataset_config["HOST"]
break
DATABASES = {
'default': {
# Use the PSql as default
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'database_name',
'USER': 'database_user_name',
'PASSWORD': 'database_password',
'HOST': 'database_host',
'PORT': '',
}
}
# make django happy
SECRET_KEY = 'PLACE_HOLDER'
name: app_common
channels:
- conda-forge
- anaconda
- hargup
- pypi
- hargup/label/pypi
dependencies:
- python=3.7
- django=2.2
- pandas
- netCDF4
- PyYAML
- pexpect
- mysql-connector-python
- pip
- pip:
- twine
import platform
import os
from setuptools import setup, find_packages
path_to_my_project = os.path.dirname(__file__) # Do any sort of fancy resolving of the path here if you need to
if platform.system().lower() == 'windows':
......@@ -23,7 +24,8 @@ else:
"pexpect",
"mockssh",
"mysql-connector-python",
"erddapy"
"erddapy",
"urllib3"
]
setup(name='app_common',
......@@ -33,10 +35,10 @@ setup(name='app_common',
author_email="support@ceotr.ca",
url="https://gitlab.oceantrack.org/ceotr/app_common.git",
packages=find_packages(exclude=['tests']).append('.twisted_iocpsupport-1.0.2-pp38-pypy38_pp73-win_amd64.whl'),
package_data={'': ['*.yml-tpl', 'cf-standard-name-table.xml']},
include_package_data=True,
python_requires='>3.5',
python_requires='>=3.5',
license="GNU General Public License v3 (GPLv3)",
install_requires=install_requires,
zip_safe=True
)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment