class Tweet(neomodel.StructuredNode): id_str = neomodel.StringProperty(unique_index=True, required=True) created_at = neomodel.DateTimeProperty(required=False) modified = neomodel.DateTimeProperty(required=False) retweeted = neomodel.BooleanProperty(required=False) retweet_id_str = neomodel.StringProperty(required=False, default='') reply_id_str = neomodel.StringProperty(required=False, default='') quote_id_str = neomodel.StringProperty(required=False, default='') mention_ids_str = neomodel.ArrayProperty(required=False, default=[]) text = neomodel.StringProperty(required=False) coordinates = neomodel.ArrayProperty(required=False, default=[]) lang = neomodel.StringProperty(required=False) features = neomodel.JSONProperty(required=False, default={}) sentiment_polarity = neomodel.FloatProperty(required=False) sentiment_subjectivity = neomodel.FloatProperty(required=False) retweets = neomodel.RelationshipTo('Tweet', 'RETWEETS') mentions = neomodel.RelationshipTo('User', 'MENTIONS') replies = neomodel.RelationshipTo('Tweet', 'REPLIES') tags = neomodel.RelationshipTo('Hashtag', 'TAGS') contains = neomodel.RelationshipTo('Link', 'CONTAINS') quotes = neomodel.Relationship('Tweet', 'QUOTES') tweet_about = neomodel.RelationshipTo('Company', 'TWEETS') def save(self): self.modified = datetime.datetime.now() super(Tweet, self).save() return self
class Post(nm.StructuredNode): uid = nm.StringProperty(unique_index=True, default=uuid4) create_datetime = nm.DateTimeProperty(default_now=True) content = nm.StringProperty(required=True) comments = nm.Relationship('Comment', 'COMMENTED') written_by = nm.Relationship('User', 'WRITTEN_BY')
class PersonalRelationship(neomodel.StructuredRel): """ A very simple relationship between two basePersons that simply records the date at which an acquaintance was established. This relationship should be carried over to anything that inherits from basePerson without any further effort. """ on_date = neomodel.DateTimeProperty(default_now=True)
class Company(neomodel.StructuredNode): id_str = neomodel.StringProperty(unique_index=True, required=True) name = neomodel.StringProperty(required=False) created_at = neomodel.DateTimeProperty(required=False) modified = neomodel.DateTimeProperty(required=False) description = neomodel.StringProperty(required=False) brand_score = neomodel.FloatProperty(required=False) tweet_score = neomodel.FloatProperty(required=False) news_score = neomodel.FloatProperty(required=False) stock_price = neomodel.FloatProperty(required=False) stock_change = neomodel.FloatProperty(required=False) mkt_cap = neomodel.FloatProperty(required=False) def save(self): self.modified = datetime.datetime.now() super(Company, self).save() return self
class User(nm.StructuredNode): uid = nm.StringProperty(index=True, default=uuid4) create_datetime = nm.DateTimeProperty(default_now=True) email = nm.StringProperty(unique_index=True, required=True) password = nm.StringProperty(required=True) name = nm.StringProperty(required=True) liked_posts = nm.RelationshipTo('Post', 'LIKED', model=Like) followings = nm.RelationshipTo('User', 'FOLLOW')
class specificModelClass1(baseModelClass1): '''Models a class that is a specialisation of baseModelClass1 NOTE: This class inherits the someLink relationship. Notice here that we are not re-specifying someLink to be pointing to specificModelClass2 ''' someOtherAttribute = neomodel.DateTimeProperty()
class News(neomodel.StructuredNode): headline = neomodel.StringProperty(unique_index=True, required=True) url = neomodel.StringProperty(required=False) publisher = neomodel.StringProperty(required=False) created_at = neomodel.DateTimeProperty(required=False) keywords = neomodel.ArrayProperty(neomodel.StringProperty(), required=False) score = neomodel.FloatProperty(required=False) cites = neomodel.RelationshipTo('Company', 'CITES')
class order(nm.StructuredNode): price = nm.FloatProperty() shares = nm.FloatProperty() date = nm.DateTimeProperty(default_now=True) if shares.__gt__ == 0: side = 'buy' else: side = 'sell' company = nm.RelationshipTo('Company', side.upper())
class User(neomodel.StructuredNode): id_str = neomodel.StringProperty(unique_index=True, required=True) name = neomodel.StringProperty(required=False) screen_name = neomodel.StringProperty(required=False) followers_count = neomodel.IntegerProperty(required=False) friends_count = neomodel.IntegerProperty(required=False) modified = neomodel.DateTimeProperty(required=False) created_at = neomodel.DateTimeProperty(required=False) description = neomodel.StringProperty(required=False) location = neomodel.StringProperty(required=False) coordinates = neomodel.ArrayProperty(required=False, default=[]) time_zone = neomodel.StringProperty(required=False) url = neomodel.StringProperty(required=False) lang = neomodel.StringProperty(required=False) follows = neomodel.RelationshipTo('User', 'FOLLOWS') posts = neomodel.RelationshipTo('Tweet', 'POSTS') def save(self): self.modified = datetime.datetime.now() super(User, self).save()
class Event(neomodel.StructuredNode): name = neomodel.StringProperty(unique_index=True, required=True) weighting = neomodel.FloatProperty(required=False) modified = neomodel.DateTimeProperty(required=False) related_to = neomodel.RelationshipTo('Company', 'ABOUT') tweet_from = neomodel.RelationshipFrom('Tweet', 'TWEET_FROM') cited_from = neomodel.RelationshipFrom('News', 'CITE_FROM') def save(self): self.modified = datetime.datetime.now() super(Event, self).save() return self
class Company(nm.StructuredNode): name = nm.StringProperty(unique_index=True, require=True) symbol = nm.StringProperty() market = nm.StringProperty() list_date = nm.IntegerProperty() updated = nm.DateTimeProperty(default_now=True) concept = nm.RelationshipTo('Concept', 'COMPONENT_OF', cardinality=nm.ZeroOrMore, model=ComponentRel) industry = nm.RelationshipTo('Industry', 'COMPONENT_OF', cardinality=nm.ZeroOrMore, model=ComponentRel) index = nm.RelationshipTo('Industry', 'COMPONENT_OF', cardinality=nm.ZeroOrMore, model=ComponentRel) customer = nm.RelationshipTo('Company', 'SUPPLIES_TO', cardinality=nm.ZeroOrMore) product = nm.RelationshipTo('Product', 'PRODUCES', model=ProductRel)
class Contribution(neo.StructuredRel): time = neo.DateTimeProperty() contribtype = neo.StringProperty() comment = neo.StringProperty()
class Comment(nm.StructuredNode): create_datetime = nm.DateTimeProperty(default_now=True) content = nm.StringProperty(required=True) written_by = nm.Relationship('User', 'WRITTEN_BY')
class ProductRel(nm.StructuredRel): updated = nm.DateTimeProperty(default_now=True) rating = nm.IntegerProperty() contribution = nm.IntegerProperty()
class Like(nm.StructuredRel): create_datetime = nm.DateTimeProperty(default_now=True)
class StakeRel(nm.StructuredRel): updated = nm.DateTimeProperty(default_now=True) shareholding_ratio = nm.FloatProperty()
class ComponentRel(nm.StructuredRel): updated = nm.DateTimeProperty(default_now=True) rating = nm.IntegerProperty() relevancy = nm.IntegerProperty() weight = nm.FloatProperty()
class Index(nm.StructuredNode): name = nm.StringProperty(unique_index=True, require=True) symbol = nm.StringProperty() market = nm.StringProperty() list_date = nm.IntegerProperty() updated = nm.DateTimeProperty(default_now=True)
from flask_login import LoginManager, UserMixin, login_user, logout_user, current_user, login_required from flask.views import MethodView from builder import settings from builder.oauth import OAuthSignIn, GitHubSignin import optparse from neomodel import config import neomodel config.DATABASE_URL = settings.NEO4J_URL from crm import models fields = { 'value': lambda: neomodel.StringProperty(index=True, unique=True), 'created': lambda: neomodel.DateTimeProperty(default_now=True), 'created_by': lambda: neomodel.StringProperty(index=True), } rel_fields = { 'value': neomodel.StringProperty, 'evidence': neomodel.StringProperty, 'confidence': neomodel.FloatProperty, 'created': lambda: neomodel.DateTimeProperty(default_now=True), 'created_by': neomodel.StringProperty, 'updated': neomodel.DateTimeProperty, } models.build_models(settings.CRM_URL, fields=fields, rel_fields=rel_fields) app = Flask(__name__, static_url_path=settings.STATIC_URL) app.config['SECRET_KEY'] = settings.SECRET_KEY app.config['SQLALCHEMY_DATABASE_URI'] = settings.SQLALCHEMY_DATABASE_URI