ejplatform/ej-server

View on GitHub
src/ej/all.py

Summary

Maintainability
A
0 mins
Test Coverage
import os

import bs4
import django
import sidekick as sk
from django.apps import apps
from django.test.client import Client
from hyperpython import Blob  # noqa: F401
from sidekick import deferred, import_later, namespace

# Pydata
pd = import_later("pandas")
np = import_later("numpy")
plt = import_later("matplotlib.pyplot")

# Scikit learn
pca = import_later("sklearn.decomposition.pca")
svm = import_later("sklearn.svm")
decomposition = import_later("sklearn.decomposition")
model_selection = import_later("sklearn.model_selection")
preprocessing = import_later("sklearn.preprocessing")
impute = import_later("sklearn.impute")

# Start django
os.environ.setdefault("DJANGO_SETTINGS_MODEL", "ej.settings")
django.setup()

#
# Django imports
#
from boogie.models import F, Q, Sum, Max, Min  # noqa: E402
from django.conf import settings  # noqa: E402
from django.contrib.auth.models import AnonymousUser  # noqa: E402
from ej_clusters.enums import ClusterStatus  # noqa: E402
from ej_profiles.enums import Race, Gender  # noqa: E402
from ej_conversations.enums import Choice, RejectionReason  # noqa: E402

_export = {F, Q, Max, Min, Sum, sk}
_enums = {ClusterStatus, Choice, RejectionReason, Race, Gender}

#
# Create models, manager accessors and examples
#
settings.ALLOWED_HOSTS.append("testserver")

_first = lambda obj: deferred(lambda: obj.first())


def extract(obj):
    return obj._obj__


# Conversation app
from ej_conversations.models import (
    Conversation,
    Comment,
    Vote,
    FavoriteConversation,
    ConversationTag,
)  # noqa: E402

conversations = Conversation.objects
conversation = _first(conversations)
comments = Comment.objects
comment = _first(Comment)
votes = Vote.objects
favorite_conversations = FavoriteConversation.objects
favorite_conversation = _first(FavoriteConversation)
conversation_tags = ConversationTag.objects
conversation_tag = _first(ConversationTag)

# User app
if apps.is_installed("ej_users"):
    from ej_users.models import User  # noqa: E402

    users = User.objects
    anonymous = AnonymousUser()
    admin = deferred(lambda: users.filter(is_superuser=True).first())
    user = deferred(lambda: users.filter(is_superuser=False).first())

# Profiles app
if apps.is_installed("ej_profiles"):
    from ej_profiles.models import Profile  # noqa: E402

    profiles = Profile.objects
    profile = _first(Profile)

# Clusterization app
if apps.is_installed("ej_clusters"):
    from ej_clusters.models import Clusterization, Stereotype, Cluster, StereotypeVote  # noqa: E402

    clusterizations = Clusterization.objects
    clusterization = _first(clusterizations)
    stereotypes = Stereotype.objects
    stereotype = _first(stereotypes)
    clusters = Cluster.objects
    cluster = _first(Cluster)
    stereotype_votes = StereotypeVote.objects
    stereotype_vote = _first(StereotypeVote)


def fix_links(data, prefix="http://localhost:8000"):
    soup = bs4.BeautifulSoup(data)
    for link in soup.find_all("a"):
        if link["href"].starswith("/"):
            link["href"] = prefix + link["href"]


#
# Math module
#
from ej_clusters import math as _cmath  # noqa: E402
from ej_clusters.math import factories as _factories  # noqa: E402

math = namespace(clusters=_cmath, kmeans=_cmath.kmeans, pipeline=_cmath.pipeline, factories=_factories)


#
# Fetch user pages
#
class EjClient(Client):
    def get_data(self, *args, fix_links=False, **kwargs):
        response = self.get(*args, **kwargs)
        if getattr(response, "url", None):
            return self.get_data(response.url, fix_links=fix_links)
        return response.content.decode(response.charset)

    def get_html(self, *args, **kwargs):
        return Blob(self.get_data(*args, **kwargs))

    def get_soup(self, *args, **kwargs):
        return bs4.BeautifulSoup(self.get_data(*args, **kwargs))


client = EjClient()