Exemplo n.º 1
0
class User(BaseTable):
    __tablename__ = "users"
    id = db.Column(db.BigInteger, primary_key=True, autoincrement=True)
    username = db.Column(db.String(50), nullable=False)
    email = db.Column(db.EmailType, nullable=False)
    is_active = db.Column(db.Boolean(), default=True)
    is_superuser = db.Column(db.Boolean(), default=False)
    first_name = db.Column(db.String(255))
    last_name = db.Column(db.String(255))
    phone_number = db.Column(db.Unicode(20))
    country_code = db.Column(db.Unicode(20))
    hashed_password = db.Column(db.String(), nullable=False)
    uq_username = db.UniqueConstraint("username")
    uq_email = db.UniqueConstraint("email")
    ix_username = db.Index(f"ix_{__tablename__}_username", "username")
    ix_email = db.Index(f"ix_{__tablename__}_email", "email")
    oauth2_clients = relationship("OAuth2Client", back_populates="owner_id")

    @classmethod
    async def get_by_email(cls, email: str) -> Optional[User]:
        return await cls.query.where(User.email == email).gino.first()

    @classmethod
    async def get_by_username(cls, username: str) -> Optional[User]:
        return await cls.query.where(User.username == username).gino.first()

    @classmethod
    async def get_by_email_or_username(cls,
                                       email_or_username: str,
                                       prefer: str = None) -> Optional[User]:

        if prefer == "email":
            result = await cls.get_by_email(email_or_username
                                            ) or await cls.get_by_username(
                                                email_or_username)
        else:
            result = await cls.get_by_username(
                email_or_username) or await cls.get_by_email(email_or_username)

        return result

    @classmethod
    async def authenticate(cls,
                           email_or_username: str,
                           password: str,
                           prefer: str = None) -> Optional[User]:
        user = await cls.get_by_email_or_username(email_or_username,
                                                  prefer=prefer)
        if not user:
            return None
        if not verify_password(password, user.hashed_password):
            return None
        return user

    @classmethod
    def create(cls, **values):
        password: Optional[str] = values.pop("password", None)
        if password:
            values["hashed_password"] = get_password_hash(password)
        return super().create(**values)
Exemplo n.º 2
0
class TestModel(BaseTable):
    __tablename__ = "test"
    id = db.Column(db.BigInteger, primary_key=True, autoincrement=True)
    username = db.Column(db.String(50), nullable=False)
    email = db.Column(db.EmailType, nullable=False)
    is_active = db.Column(db.Boolean(), default=True)
    is_superuser = db.Column(db.Boolean(), default=False)
    first_name = db.Column(db.String(255))
    last_name = db.Column(db.String(255))
    phone_number = db.Column(db.Unicode(20))
    country_code = db.Column(db.Unicode(20))
    hashed_password = db.Column(db.String())
    uq_username = db.UniqueConstraint("username")
    uq_email = db.UniqueConstraint("email")
    ix_username = db.Index("ix_test_username", "username")
    ix_email = db.Index("ix_test_email", "email")
Exemplo n.º 3
0
class IPTest(WellBase):
    __tablename__ = "ip_tests"

    test_number = db.Column(db.Integer(), primary_key=True)
    test_date = db.Column(db.Date(), index=True)
    type_code = db.Column(db.String(10))
    test_method = db.Column(db.String())
    completion = db.Column(db.Integer())
    oil = db.Column(db.Integer())
    oil_per10k = db.Column(db.Integer())
    oil_uom = db.Column(db.String(10))
    gas = db.Column(db.Integer())
    gas_per10k = db.Column(db.Integer())
    gas_uom = db.Column(db.String(10))
    water = db.Column(db.Integer())
    water_per10k = db.Column(db.Integer())
    water_uom = db.Column(db.String(10))
    choke = db.Column(db.String(25))
    depth_top = db.Column(db.Integer())
    depth_top_uom = db.Column(db.String(10))
    depth_base = db.Column(db.Integer())
    depth_base_uom = db.Column(db.String(10))
    sulfur = db.Column(db.Boolean())
    oil_gravity = db.Column(db.Float())
    oil_gravity_uom = db.Column(db.String(10))
    gor = db.Column(db.Integer())
    gor_uom = db.Column(db.String(10))
    perf_upper = db.Column(db.Integer())
    perf_upper_uom = db.Column(db.String(10))
    perf_lower = db.Column(db.Integer())
    perf_lower_uom = db.Column(db.String(10))
    perfll = db.Column(db.Integer())
    perfll_uom = db.Column(db.String(10))
Exemplo n.º 4
0
class ProdStat(Base):
    __tablename__ = "prodstats"

    api10 = db.Column(db.String(10), primary_key=True)
    name = db.Column(db.String(50), primary_key=True, index=True)
    value = db.Column(db.Numeric(19, 2))
    property_name = db.Column(db.String(50), index=True)
    aggregate_type = db.Column(db.String(25), index=True)
    is_peak_norm = db.Column(db.Boolean())
    is_ll_norm = db.Column(db.Boolean())
    ll_norm_value = db.Column(db.Integer())
    includes_zeroes = db.Column(db.Boolean())
    start_date = db.Column(db.Date())
    end_date = db.Column(db.Date())
    start_month = db.Column(db.Integer())
    end_month = db.Column(db.Integer())
    comments = db.Column(db.JSONB(), nullable=False, server_default="{}")

    ix_prodstat_api10_prop_agg = db.Index("ix_prodstat_api10_prop_agg",
                                          "api10", "property_name",
                                          "aggregate_type")
Exemplo n.º 5
0
class WellDepth(WellBase):
    __tablename__ = "depths"

    name = db.Column(db.String(50), index=True, primary_key=True)
    value = db.Column(db.Integer())
    property_name = db.Column(db.String(50), index=True)
    aggregate_type = db.Column(db.String(25), index=True)
    grid_id = db.Column(db.Integer(), index=True)
    formation = db.Column(db.String(50), index=True)
    into_formation_feet = db.Column(db.Integer())
    into_formation_percent = db.Column(db.Float())
    above_next_formation_feet = db.Column(db.Integer())
    above_next_formation_percent = db.Column(db.Float())
    overlap_feet = db.Column(db.Integer())
    overlap_percent = db.Column(db.Float())
    in_target = db.Column(db.Boolean())
    assignment_method = db.Column(db.String())  # TODO: enum
Exemplo n.º 6
0
class SurveyPoint(WellBase):
    __tablename__ = "survey_points"

    md = db.Column(db.Integer(), primary_key=True)
    tvd = db.Column(db.Integer())
    dip = db.Column(db.Float())
    sequence = db.Column(db.Integer())
    theta = db.Column(db.Float())
    is_in_lateral = db.Column(db.Boolean(), nullable=False, default=False)
    is_heel_point = db.Column(db.Boolean(), nullable=False, default=False)
    is_mid_point = db.Column(db.Boolean(), nullable=False, default=False)
    is_toe_point = db.Column(db.Boolean(), nullable=False, default=False)
    is_soft_corner = db.Column(db.Boolean(), nullable=False, default=False)
    is_hard_corner = db.Column(db.Boolean(), nullable=False, default=False)
    is_kop = db.Column(db.Boolean(), nullable=False, default=False)
    geom = db.Column(db.Geometry("POINT", srid=4326, spatial_index=False))
    ix_lateral_partial = db.Index(
        "ix_lateral_partial",
        "api14",
        "is_in_lateral",
        postgresql_where=(is_in_lateral),
    )
    ix_heel_partial = db.Index(
        "ix_heel_partial",
        "api14",
        "is_heel_point",
        postgresql_where=(is_heel_point),
    )
    ix_mid_partial = db.Index(
        "ix_mid_partial",
        "api14",
        "is_mid_point",
        postgresql_where=(is_mid_point),
    )
    ix_toe_partial = db.Index(
        "ix_toe_partial",
        "api14",
        "is_toe_point",
        postgresql_where=(is_toe_point),
    )
    ix_survey_point_geom = db.Index("ix_survey_point_geom",
                                    "geom",
                                    postgresql_using="gist")
Exemplo n.º 7
0
class WellHeader(WellBase):
    __tablename__ = "wells"

    api10 = db.Column(db.String(10), index=True)
    well_name = db.Column(db.String())
    hole_direction = db.Column(db.String(1))
    status = db.Column(db.String(50))
    is_producing = db.Column(db.Boolean(), index=True)
    operator = db.Column(db.String(), index=True)
    operator_alias = db.Column(db.String(), index=True)
    hist_operator = db.Column(db.String(), index=True)
    hist_operator_alias = db.Column(db.String(), index=True)
    tvd = db.Column(db.Integer())
    md = db.Column(db.Integer())
    perfll = db.Column(db.Integer())
    lateral_length = db.Column(db.Integer())
    ground_elev = db.Column(db.Integer())
    kb_elev = db.Column(db.Integer())
    comp_date = db.Column(db.Date())
    spud_date = db.Column(db.Date())
    permit_date = db.Column(db.Date())
    permit_number = db.Column(db.String())
    permit_status = db.Column(db.String())
    rig_release_date = db.Column(db.Date())  # rr_date
    last_activity_date = db.Column(db.Date())
    basin = db.Column(db.String(50), index=True)  # basin
    sub_basin = db.Column(db.String(50), index=True)  # basin
    state = db.Column(db.String(50))  # state_name
    state_code = db.Column(db.String(10))  # state_name
    county = db.Column(db.String(50), index=True)  # county_name
    county_code = db.Column(db.String(10))  # county_name
    provider_status = db.Column(db.String(50))
    provider = db.Column(db.String())
    provider_last_update_at = db.Column(db.DateTime(timezone=True))
    basin_holedir_isprod_idx = db.Index("ix_well_basin_holedir_isprod",
                                        "basin", "hole_direction",
                                        "is_producing")
    basin_status_idx = db.Index("ix_well_basin_status", "basin", "status")