class AcceptedMessage(JsonObject): message_id = IntegerProperty(required=True) from_field = ObjectProperty(User, name='from', required=True) date = IntegerProperty() chat = ObjectProperty(Chat, required=True) text = StringProperty(required=True)
class Fields(JsonObject): """ Fields model for issue""" status = ObjectProperty(Status) components = ListProperty(Component, default=None) labels = ListProperty(StringProperty, default=None) summary = StringProperty(default='') assignee = ObjectProperty(User) closed_sprints = ListProperty(Sprint, default=None, name='closedSprints') reporter = ObjectProperty(User) issue_type = ObjectProperty(IssueType) parent_ = DefaultProperty(default=None, name='parent') subtasks_ = DefaultProperty(default=None, name='subtasks') @property def parent(self): """ Getter for parent issue """ if self.parent_: return Issue(self.parent_) return None @property def subtasks(self): """ Getter for subtasks """ if self.subtasks_: return list(map(Issue, self.subtasks_)) return None
class Customer(JsonObject): ownId = StringProperty(required=True) fullname = StringProperty(required=True) email = StringProperty(required=True) birthDate = StringProperty(required=True) taxDocument = ObjectProperty(TaxDocument, required=True) phone = ObjectProperty(Phone, required=True) shippingAddress = ObjectProperty(ShippingAddress, required=True)
class ProtectedSaleOrder(JsonObject): ownId = StringProperty(required=True) amount = ObjectProperty(Amount, exclude_if_none=True) items = ListProperty(Item, required=True) customer = ObjectProperty(Customer, required=True) checkoutPreferences = ObjectProperty(CheckoutPreferences, exclude_if_none=True, default=None)
class SSMMutationOutput(JsonObject): mutation = StringProperty(required=True) non_optimality = FloatProperty(required=True) parameters_in_range = BooleanProperty(required=True) # This is no longer used by the backend because we have second best. # The frontend however still requires it, which is why we're keeping it. result_found = BooleanProperty(required=True) forward_primer = ObjectProperty(PrimerOutput) reverse_primer = ObjectProperty(PrimerOutput) overlap = ObjectProperty(OverlapOutput)
class SSMInput(JsonObject): sequences = ObjectProperty(SSMSequences, required=True) config = ObjectProperty(SSMConfig, required=True) mutations = ListProperty(str, required=True) degenerate_codon = StringProperty(required=True, default="NNS") def parse_mutations(self, goi_offset): return [ parse_codon_mutation(mutation, goi_offset) for mutation in self.mutations ]
class QCLMInput(JsonObject): sequences = ObjectProperty(QCLMSequences, required=True) config = ObjectProperty(QCLMConfig, required=True) mutations = ListProperty(str, required=True) def parse_mutations(self, goi_offset: int) -> List[MutationSite]: """ Parses the user input in the format "E32W E32L E49K" and produces multi-amino mutations in the format of "E32WL E49K" """ codon_muts = [parse_codon_mutation(mutation, goi_offset) for mutation in self.mutations] return create_multi_amino_mutations(codon_muts)
class PASInput(JsonObject): # Sequences for the synthesized gene. # Expressed as ATGC or amino acid sequence. sequences = ObjectProperty(PASSequences, required=True) # Is the gene sequence a DNA (ATGC) sequence? is_dna_sequence = BooleanProperty(required=True) # Input parameters config = ObjectProperty(PASConfig, required=True) # List of mutations by position in the gene mutations = ListProperty(PASMutationFormattedInput, required=False) # Are mutations given as codons? is_mutations_as_codons = BooleanProperty(required=True)
class _QuestionDiff(JsonObject): question = ObjectProperty(_Change) label = ObjectProperty(_Change) type = ObjectProperty(_Change) value = ObjectProperty(_Change) calculate = ObjectProperty(_Change) relevant = ObjectProperty(_Change) required = ObjectProperty(_Change) comment = ObjectProperty(_Change) setvalue = ObjectProperty(_Change) constraint = ObjectProperty(_Change) options = DictProperty() # {option: _Change} load_properties = DictProperty() # {case_type: {property: _Change}} save_properties = DictProperty() # {case_type: {property: _Change}}
class TaxJarTax(JsonObject): order_total_amount = TaxJarFloatProperty() shipping = TaxJarFloatProperty() taxable_amount = TaxJarFloatProperty() amount_to_collect = TaxJarFloatProperty() rate = TaxJarFloatProperty() has_nexus = BooleanProperty() freight_taxable = BooleanProperty() tax_source = StringProperty() jurisdictions = ObjectProperty(TaxJarJurisdictions) breakdown = ObjectProperty(TaxJarBreakdown)
class Status(JsonObject): """ Status model for issue fields """ description = StringProperty() iconUrl = StringProperty() name = StringProperty() id_ = StringProperty(name='id') statusCategory = ObjectProperty(StatusCategory)
class ByTypeWithTotal(JsonObject): by_type = ListProperty(TypedIndicator) totals = ObjectProperty(BasicIndicator) all_types = BooleanProperty(default=False) @property def enabled(self): return self.totals.enabled or self.all_types or len(self.enabled_types) > 0 @property def enabled_types(self): return [type_ for type_ in self.by_type if type_.enabled] def types_by_date_range(self): types_list = sorted([ TypeRange(type_.type, date_range) for type_ in self.enabled_types for date_range in type_.date_ranges ], key=lambda x: x.range_slug) return { range_slug: {type_.type for type_ in group} for range_slug, group in itertools.groupby(types_list, lambda x: x.range_slug) } def get_or_add_for_type(self, type_): try: return [by_type for by_type in self.by_type if by_type.type == type_][0] except IndexError: indicator = TypedIndicator(enabled=True, type=type_) self.by_type.append( indicator ) return indicator
class Epic(JsonObject): """ Epic model """ id_ = IntegerProperty(name='id') done = BooleanProperty() key = IntegerProperty() name = StringProperty() color = ObjectProperty(EpicColor)
class TaxJarBreakdown(JsonObject): taxable_amount = TaxJarFloatProperty() tax_collectable = TaxJarFloatProperty() combined_tax_rate = TaxJarFloatProperty() state_taxable_amount = TaxJarFloatProperty() state_tax_rate = TaxJarFloatProperty() state_tax_collectable = TaxJarFloatProperty() county_taxable_amount = TaxJarFloatProperty() county_tax_rate = TaxJarFloatProperty() county_tax_collectable = TaxJarFloatProperty() city_taxable_amount = TaxJarFloatProperty() city_tax_rate = TaxJarFloatProperty() city_tax_collectable = TaxJarFloatProperty() special_district_taxable_amount = TaxJarFloatProperty() special_tax_rate = TaxJarFloatProperty() special_district_tax_collectable = TaxJarFloatProperty() country_taxable_amount = TaxJarFloatProperty() country_tax_rate = TaxJarFloatProperty() country_tax_collectable = TaxJarFloatProperty() gst_taxable_amount = TaxJarFloatProperty() gst_tax_rate = TaxJarFloatProperty() gst = TaxJarFloatProperty() pst_taxable_amount = TaxJarFloatProperty() pst_tax_rate = TaxJarFloatProperty() pst = TaxJarFloatProperty() qst_taxable_amount = TaxJarFloatProperty() qst_tax_rate = TaxJarFloatProperty() qst = TaxJarFloatProperty() shipping = ObjectProperty(TaxJarShipping) line_items = ListProperty(TaxJarBreakdownLineItem)
class PullRequest(JsonObject): id_ = IntegerProperty(name='id') version = IntegerProperty() title = StringProperty() description = StringProperty() state = StringProperty() open_ = BooleanProperty(name="open") closed = BooleanProperty() createdDate = EpochProperty() updatedDate = EpochProperty() fromRef = ObjectProperty(Ref) toRef = ObjectProperty(Ref) locked = BooleanProperty() author = ObjectProperty(PullRequestUser) reviewers = ListProperty(PullRequestUser, default=[]) participants = ListProperty(PullRequestUser, default=[]) properties = ObjectProperty(PullRequestProperties)
class _FormMetadata(JsonObject): unique_id = StringProperty() name = DictProperty() short_comment = StringProperty() action_type = StringProperty() form_filter = StringProperty() questions = ListProperty(_FormMetadataQuestion) error = DictProperty() changes = ObjectProperty(_FormDiff)
class _ModuleMetadata(JsonObject): unique_id = StringProperty() name = DictProperty() short_comment = StringProperty() module_type = StringProperty() is_surveys = BooleanProperty() module_filter = StringProperty() forms = ListProperty(_FormMetadata) changes = ObjectProperty(_ModuleDiff)
class MessageContainer(JsonObject): # retry section # Flow should be next # try to send message -> received response with retry_after -> put to queue back # and set retry_after and set create_time retry_after = IntegerProperty(exclude_if_none=True) create_time = IntegerProperty(exclude_if_none=True) retry_count = IntegerProperty(exclude_if_none=True) message_type = StringProperty(choices=['error', 'response'], required=True) message = ObjectProperty(Message, required=True)
class QCLMConfig(JsonObject): min_primer_size = IntegerProperty(default=23) opt_primer_size = IntegerProperty(default=23) max_primer_size = IntegerProperty(default=60) min_gc_content = FloatProperty(default=40) opt_gc_content = FloatProperty(default=50) max_gc_content = FloatProperty(default=60) min_three_end_size = IntegerProperty(default=10) opt_three_end_size = IntegerProperty(default=10) max_three_end_size = IntegerProperty(default=40) min_five_end_size = IntegerProperty(default=10) opt_five_end_size = IntegerProperty(default=10) max_five_end_size = IntegerProperty(default=40) min_temperature = FloatProperty(default=75) max_temperature = FloatProperty(default=90) gc_clamp = IntegerProperty(default=1) use_degeneracy_codon = BooleanProperty(default=True) codon_usage_frequency_threshold = FloatProperty(default=0.1) # Search only for solutions with non-overlapping primers? non_overlapping_primers = BooleanProperty(default=False) # Should we use the primer3 to check generated primers? use_primer3 = BooleanProperty(default=True) # The allowed range for primer melting temperatures, in deg C temp_range_size = FloatProperty(default=5) # Temperature calculator configuration temperature_config = ObjectProperty(TemperatureConfig, default=create_default_qclm_temperature_config()) # Weights used for non_optimality calculation. temp_weight = FloatProperty(default=16) # for 1 deg C difference from the reaction temperature primer_size_weight = FloatProperty(default=4) # for 1 base difference from the optimal primer size three_end_size_weight = FloatProperty(default=8) five_end_size_weight = FloatProperty(default=1) gc_content_weight = FloatProperty(default=0) mutation_coverage_weight = FloatProperty(default=160) # multiplies (1- <total mutation coverage>) # For primers which break the hairpin/primer-dimer temperature constraints hairpin_temperature_weight = FloatProperty(default=32) # for each deg C higher primer_dimer_temperature_weight = FloatProperty(default=32) # formation temperature # Step for iteration over possible melting temperature thresholds, in deg C temp_threshold_step = FloatProperty(default=1) organism=StringProperty(default="e-coli")
class SSMOutput(JsonObject): input_data = ObjectProperty(SSMInput, required=True) results = ListProperty(SSMMutationOutput, required=True) full_sequence = StringProperty(required=True) goi_offset = IntegerProperty(required=True) new_sequence_start = IntegerProperty(required=True) forward_flanking_primer_temperature = FloatProperty(required=True) reverse_flanking_primer_temperature = FloatProperty(required=True) min_three_end_temperature = FloatProperty() max_three_end_temperature = FloatProperty() min_overlap_temperature = FloatProperty() max_overlap_temperature = FloatProperty()
class PASConfig(JsonObject): min_oligo_size = IntegerProperty(default=40) max_oligo_size = IntegerProperty(default=90) opt_oligo_size = IntegerProperty(default=56) min_overlap_tm = FloatProperty(default=50) max_overlap_tm = FloatProperty(default=65) opt_overlap_tm = IntegerProperty(default=56) # this optimal temperature is for NEB like temperature calculator min_overlap_length = IntegerProperty(default=15) max_overlap_length = IntegerProperty(default=25) opt_overlap_length = IntegerProperty(default=21) min_gc_content = FloatProperty(default=40) max_gc_content = FloatProperty(default=60) use_degeneracy_codon = BooleanProperty(default=False) organism = StringProperty(default="e-coli") avoided_motifs = ListProperty(str) codon_usage_frequency_threshold = FloatProperty(default=0.1) # The allowed range for melting temperatures of fragment overlaps, in deg C temp_range_size = FloatProperty(default=5) # Temperature calculator configuration temperature_config = ObjectProperty(TemperatureConfig, default=create_default_pas_temperature_config()) # Weights used for non_optimality calculation. temp_weight = FloatProperty(default=1) gc_content_weight = FloatProperty(default=1) length_weight = FloatProperty(default=1) hairpin_homodimer_weight = FloatProperty(default=2) # "Safe" temperature difference between a hairpin or homodimer formation and the reaction temperature safe_temp_difference = FloatProperty(default=10) # Step for iteration over possible melting temperature thresholds, in deg C temp_threshold_step = FloatProperty(default=1)
class StagingMeterData(JsonObject): usage_point = ( IntegerProperty() ) # DEPRECATED : OID of usage point objects in green button staging. usage_point_id = StringProperty() # Use this instead. duration = IntegerProperty() address = ObjectProperty(StagingAddress) account_number = StringProperty() service_id = StringProperty() utility = StringProperty() tariff = StringProperty() commodity = StringProperty() def is_complete(self): record = self.to_json() record.pop("usage_point") return all(x is not None for x in record.values()) def __eq__(self, other): if not isinstance(other, StagingMeterData): return False return self.to_json() == other.to_json()
class SSMSequences(JsonObject): forward_primer = StringProperty(required=True) reverse_primer = StringProperty(required=True) gene_of_interest = StringProperty(required=True) five_end_flanking_sequence = StringProperty(default=None) three_end_flanking_sequence = StringProperty(default=None) plasmid = ObjectProperty(Plasmid, default=None) def get_full_sequence_with_offset(self) -> Tuple[str, Tuple[int, int]]: if self.plasmid is None: # TODO finish implementation of this option and write tests if self.five_end_flanking_sequence is None or self.three_end_flanking_sequence is None: raise ValueError("""If plasmid is not specified - \ five end flanking sequence and three end flanking sequence must be specified""" ) five_end = self.get_five_end(self.five_end_flanking_sequence, self.forward_primer) three_end = self.get_three_end(self.three_end_flanking_sequence, self.reverse_primer) else: if self.five_end_flanking_sequence is not None or \ self.three_end_flanking_sequence is not None: raise ValueError( "If plasmid is specified - flanking sequences must be empty" ) five_end = self.plasmid.get_five_end(self.gene_of_interest, self.forward_primer) three_end = self.plasmid.get_three_end(self.gene_of_interest, self.reverse_primer) full_sequence = five_end + self.gene_of_interest + three_end offset = len(five_end) return full_sequence, (offset, offset + len(self.gene_of_interest))
class CallCenterIndicatorConfig(JsonObject): forms_submitted = ObjectProperty(BasicIndicator) cases_total = ObjectProperty(ByTypeWithTotal) cases_active = ObjectProperty(ByTypeWithTotal) cases_opened = ObjectProperty(ByTypeWithTotal) cases_closed = ObjectProperty(ByTypeWithTotal) legacy_forms_submitted = BooleanProperty(False) legacy_cases_total = BooleanProperty(False) legacy_cases_active = BooleanProperty(False) custom_form = ListProperty(TypedIndicator) def includes_legacy(self): return (self.legacy_forms_submitted or self.legacy_cases_total or self.legacy_cases_active) @classmethod def default_config(cls, domain_name=None, include_legacy=True): def default_basic(): return BasicIndicator(enabled=True, date_ranges=set(const.DATE_RANGES)) def default_typed(): return ByTypeWithTotal(totals=default_basic(), all_types=True) config = cls( forms_submitted=default_basic(), cases_total=default_typed(), cases_active=default_typed(), cases_opened=default_typed(), cases_closed=default_typed(), ) config.legacy_forms_submitted = include_legacy config.legacy_cases_total = include_legacy config.legacy_cases_active = include_legacy for slug in const.PER_DOMAIN_FORM_INDICATORS.get(domain_name, {}): for range in const.DATE_RANGES: config.custom_form.append( TypedIndicator(type=slug, date_range=range)) return config def set_indicator(self, parsed_indicator): if parsed_indicator.is_legacy: indicator = getattr(self, parsed_indicator.category) setattr(self, 'legacy_{}'.format(parsed_indicator.category), True) if parsed_indicator.date_range: date_range = parsed_indicator.date_range if isinstance(indicator, ByTypeWithTotal): indicator.totals.date_ranges.add(date_range) else: indicator.date_ranges.add(date_range) elif parsed_indicator.category == const.CUSTOM_FORM: self.custom_form.append( TypedIndicator(enabled=True, date_range=parsed_indicator.date_range, type=parsed_indicator.type)) elif parsed_indicator.category == const.FORMS_SUBMITTED: self.forms_submitted.enabled = True if parsed_indicator.date_range: self.forms_submitted.date_ranges.add( parsed_indicator.date_range) else: indicator = getattr(self, parsed_indicator.category) if parsed_indicator.type: indicator = indicator.get_or_add_for_type( parsed_indicator.type) else: indicator = indicator.totals indicator.enabled = True if parsed_indicator.date_range: indicator.date_ranges.add(parsed_indicator.date_range)
class Foo(JsonObject): # default string conversions bar = ObjectProperty(Bar)
class Foo(JsonObject): bar = ObjectProperty(Bar) class Meta(object): string_conversions = ()
class PASOutput(JsonObject): input_data = ObjectProperty(PASInput, required=True) results = ListProperty(PASResult, required=False) message = StringProperty()
class _FormMetadataQuestion(FormQuestionResponse): form_id = StringProperty() load_properties = ListProperty(LoadSaveProperty) save_properties = ListProperty(LoadSaveProperty) changes = ObjectProperty(_QuestionDiff)
class InvalidCredentialsResponse(JsonObject): success = BooleanProperty(required=True) errors = ObjectProperty(_InvalidCredentialsErrors) def __eq__(self, other): return self.success == other.success and self.errors == other.errors
class TelegramResponse(JsonObject): success = BooleanProperty(name='ok') result = ObjectProperty(SentMessage) description = StringProperty() parameters = ObjectProperty(ResponseParameters)