Skip to content

Commit 4f2a2f6

Browse files
committed
Clean up underscore classes, comment blocks, VocabFields
1 parent bb33e26 commit 4f2a2f6

31 files changed

Lines changed: 40 additions & 1378 deletions

stix/campaign/__init__.py

Lines changed: 2 additions & 127 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import stix
77
from stix.utils import deprecated
88
from stix.common import Activity, Confidence, Statement, VocabString
9+
from stix.common.statement import StatementField
910
from stix.common.related import (GenericRelationshipList, RelatedCampaign,
1011
RelatedIncident, RelatedIndicator, RelatedPackageRefs, RelatedThreatActor,
1112
RelatedTTP)
@@ -103,7 +104,7 @@ class Campaign(stix.BaseCoreComponent):
103104
confidence = fields.TypedField("Confidence", Confidence)
104105
# references = fields.TypedField("Reference", multiple=True)
105106
status = VocabField("Status", CampaignStatus)
106-
intended_effects = fields.TypedField("Intended_Effect", Statement, multiple=True, key_name="intended_effects")
107+
intended_effects = StatementField("Intended_Effect", Statement, vocab_type=vocabs.IntendedEffect, multiple=True, key_name="intended_effects")
107108
names = fields.TypedField("Names", Names)
108109
related_incidents = fields.TypedField("Related_Incidents", RelatedIncidents)
109110
related_indicators = fields.TypedField("Related_Indicators", RelatedIndicators)
@@ -157,7 +158,6 @@ def description(self):
157158

158159
@description.setter
159160
def description(self, value):
160-
from stix.common.structured_text import StructuredTextList
161161
self.descriptions = StructuredTextList(value)
162162

163163
def add_description(self, description):
@@ -167,128 +167,3 @@ def add_description(self, description):
167167
168168
"""
169169
self.descriptions.add(description)
170-
171-
#@property
172-
#def status(self):
173-
# """The status of the Campaign. This is a :class:`VocabString` field.
174-
175-
# If set to a string, an attempt will be made to convert it to a
176-
# :class:`.CampaignStatus` object.
177-
178-
# """
179-
# return self._status
180-
181-
#@status.setter
182-
#def status(self, value):
183-
# self._set_vocab(vocabs.CampaignStatus, status=value)
184-
185-
186-
187-
""" def to_obj(self, return_obj=None, ns_info=None):
188-
if not return_obj:
189-
return_obj = self._binding_class()
190-
191-
super(Campaign, self).to_obj(return_obj=return_obj, ns_info=ns_info)
192-
193-
if self.names:
194-
return_obj.Names = self.names.to_obj(ns_info=ns_info)
195-
if self.intended_effects:
196-
return_obj.Intended_Effect = self.intended_effects.to_obj(ns_info=ns_info)
197-
if self.status:
198-
return_obj.Status = self.status.to_obj(ns_info=ns_info)
199-
if self.related_ttps:
200-
return_obj.Related_TTPs = self.related_ttps.to_obj(ns_info=ns_info)
201-
if self.related_incidents:
202-
return_obj.Related_Incidents = self.related_incidents.to_obj(ns_info=ns_info)
203-
if self.related_indicators:
204-
return_obj.Related_Indicators = self.related_indicators.to_obj(ns_info=ns_info)
205-
if self.attribution:
206-
return_obj.Attribution = self.attribution.to_obj(ns_info=ns_info)
207-
if self.associated_campaigns:
208-
return_obj.Associated_Campaigns = self.associated_campaigns.to_obj(ns_info=ns_info)
209-
if self.confidence:
210-
return_obj.Confidence = self.confidence.to_obj(ns_info=ns_info)
211-
if self.activity:
212-
return_obj.Activity = self.activity.to_obj(ns_info=ns_info)
213-
if self.related_packages:
214-
return_obj.Related_Packages = self.related_packages.to_obj(ns_info=ns_info)
215-
216-
return return_obj
217-
218-
@classmethod
219-
def from_obj(cls, obj, return_obj=None):
220-
if not obj:
221-
return None
222-
223-
if not return_obj:
224-
return_obj = cls()
225-
226-
super(Campaign, cls).from_obj(obj, return_obj=return_obj)
227-
228-
if isinstance(obj, cls._binding_class):
229-
return_obj.names = Names.from_obj(obj.Names)
230-
return_obj.intended_effects = \
231-
_IntendedEffects.from_obj(obj.Intended_Effect)
232-
return_obj.status = VocabString.from_obj(obj.Status)
233-
return_obj.related_ttps = RelatedTTPs.from_obj(obj.Related_TTPs)
234-
return_obj.related_incidents = \
235-
RelatedIncidents.from_obj(obj.Related_Incidents)
236-
return_obj.related_indicators = \
237-
RelatedIndicators.from_obj(obj.Related_Indicators)
238-
return_obj.attribution = _AttributionList.from_obj(obj.Attribution)
239-
return_obj.associated_campaigns = \
240-
AssociatedCampaigns.from_obj(obj.Associated_Campaigns)
241-
return_obj.confidence = Confidence.from_obj(obj.Confidence)
242-
return_obj.activity = _Activities.from_obj(obj.Activity)
243-
return_obj.related_packages = \
244-
RelatedPackageRefs.from_obj(obj.Related_Packages)
245-
246-
return return_obj
247-
248-
def to_dict(self):
249-
return super(Campaign, self).to_dict()
250-
251-
@classmethod
252-
def from_dict(cls, dict_repr, return_obj=None):
253-
if not dict_repr:
254-
return None
255-
256-
if not return_obj:
257-
return_obj = cls()
258-
259-
super(Campaign, cls).from_dict(dict_repr, return_obj=return_obj)
260-
261-
get = dict_repr.get # PEP 8 line lengths
262-
return_obj.names = Names.from_dict(get('names'))
263-
return_obj.intended_effects = \
264-
_IntendedEffects.from_dict(get('intended_effects'))
265-
return_obj.status = VocabString.from_dict(get('status'))
266-
return_obj.related_ttps = \
267-
RelatedTTPs.from_dict(get('related_ttps'))
268-
return_obj.related_incidents = \
269-
RelatedIncidents.from_dict(get('related_incidents'))
270-
return_obj.related_indicators = \
271-
RelatedIndicators.from_dict(get('related_indicators'))
272-
return_obj.attribution = _AttributionList.from_list(get('attribution'))
273-
return_obj.associated_campaigns = \
274-
AssociatedCampaigns.from_dict(get('associated_campaigns'))
275-
return_obj.confidence = \
276-
Confidence.from_dict(get('confidence'))
277-
return_obj.activity = _Activities.from_dict(get('activity'))
278-
return_obj.related_packages = \
279-
RelatedPackageRefs.from_dict(get('related_packages'))
280-
281-
return return_obj
282-
"""
283-
284-
# Not Actual STIX Types!
285-
#class _Activities(stix.TypedList):
286-
# _contained_type = Activity
287-
288-
289-
class _IntendedEffects(stix.TypedList):
290-
_contained_type = Statement
291-
292-
def _fix_value(self, value):
293-
intended_effect = vocabs.IntendedEffect(value)
294-
return Statement(value=intended_effect)

stix/common/activity.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ class Activity(stix.Entity):
2121

2222
def __init__(self):
2323
super(Activity, self).__init__()
24-
self.date_time = None
2524
self.descriptions = StructuredTextList()
2625

2726
@property

stix/common/campaign_reference.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ def __init__(self, idref=None, timestamp=None):
2626

2727
self.idref = idref
2828
self.timestamp = timestamp
29-
self.names = None
3029

3130
def add_name(self, name):
3231
self.names.append(name)

stix/common/information_source.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,4 +94,5 @@ class ContributingSources(stix.EntityList):
9494

9595
@classmethod
9696
def _dict_as_list(cls):
97-
return False
97+
return False
98+

stix/core/stix_header.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ class STIXHeader(stix.Entity):
3838

3939
title = fields.TypedField("Title", preset_hook=deprecated.field)
4040
package_intents = VocabField("Package_Intent", PackageIntent, multiple=True, preset_hook=deprecated.field)
41-
descriptions = fields.TypedField("Description", type_=StructuredTextList)#, preset_hook=deprecated.field)
41+
descriptions = fields.TypedField("Description", type_=StructuredTextList, preset_hook=deprecated.field)
4242
short_descriptions = fields.TypedField("Short_Description", type_=StructuredTextList, preset_hook=deprecated.field)
4343
handling = fields.TypedField("Handling", Marking)
4444
information_source = fields.TypedField("Information_Source", InformationSource)

stix/exploit_target/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
# relative
1616
from .vulnerability import Vulnerability, _Vulnerabilities # noqa
1717
from .weakness import Weakness, _Weaknesses # noqa
18-
from .configuration import Configuration, _Configurations # noqa
18+
from .configuration import Configuration # noqa
1919
from stix.common import InformationSource
2020

2121
class ExploitTarget(stix.BaseCoreComponent):

stix/exploit_target/configuration.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,9 @@ def description(self):
4242
Returns:
4343
An instance of :class:`.StructuredText`
4444
"""
45-
return next(iter(self.descriptions or []), None)
45+
if self.descriptions is None:
46+
return None
47+
return next(iter(self.descriptions), None)
4648

4749
@description.setter
4850
def description(self, value):
@@ -53,6 +55,8 @@ def add_description(self, description):
5355
5456
This is the same as calling "foo.descriptions.add(bar)".
5557
"""
58+
if self.descriptions is None:
59+
self.descriptions = StructuredTextList()
5660
self.descriptions.add(description)
5761

5862
@property
@@ -69,7 +73,9 @@ def short_description(self):
6973
Returns:
7074
An instance of :class:`.StructuredText`
7175
"""
72-
return next(iter(self.short_descriptions or []), None)
76+
if self.short_descriptions is None:
77+
self.short_descriptions = StructuredTextList()
78+
return next(iter(self.short_descriptions), None)
7379

7480
@short_description.setter
7581
def short_description(self, value):
@@ -81,7 +87,3 @@ def add_short_description(self, description):
8187
This is the same as calling "foo.short_descriptions.add(bar)".
8288
"""
8389
self.short_descriptions.add(description)
84-
85-
# NOT AN ACTUAL STIX TYPE!
86-
class _Configurations(stix.TypedList):
87-
_contained_type = Configuration

stix/extensions/structured_coa/generic_structured_coa.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ def description(self):
5050

5151
@description.setter
5252
def description(self, value):
53-
self.descriptions = value
53+
self.descriptions = StructuredTextList(value)
5454

5555
def add_description(self, description):
5656
"""Adds a description to the ``descriptions`` collection.

stix/extensions/test_mechanism/generic_test_mechanism.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,4 +54,6 @@ def add_description(self, description):
5454
This is the same as calling "foo.descriptions.add(bar)".
5555
5656
"""
57+
if self.descriptions is None:
58+
self.descriptions = StructuredTextList()
5759
self.descriptions.add(description)

stix/incident/__init__.py

Lines changed: 2 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from stix.common import vocabs
88
from stix.common import Statement, VocabString, InformationSource, Confidence
99
from stix.common.vocabs import VocabField
10+
from stix.common.statement import StatementField
1011
from stix.common.identity import Identity, IdentityFactory
1112
from stix.common.related import (GenericRelationshipList, RelatedIndicator,
1213
RelatedThreatActor, RelatedTTP, RelatedObservable, RelatedIncident,
@@ -56,7 +57,7 @@ class Incident(stix.BaseCoreComponent):
5657
related_packages = fields.TypedField("Related_Packages", RelatedPackageRefs)
5758
affected_assets = fields.TypedField("Affected_Assets", type_="stix.incident.AffectedAssets")
5859
categories = fields.TypedField("Categories", type_="stix.incident.IncidentCategories")
59-
intended_effects = fields.TypedField("Intended_Effect", Statement, multiple=True, key_name="intended_effects")
60+
intended_effects = StatementField("Intended_Effect", Statement, vocab_type=vocabs.IntendedEffect, multiple=True, key_name="intended_effects")
6061
leveraged_ttps = fields.TypedField("Leveraged_TTPs", type_="stix.incident.LeveragedTTPs")
6162
discovery_methods = vocabs.VocabField("Discovery_Method", vocabs.DiscoveryMethod, multiple=True, key_name="discovery_methods")
6263
reporter = fields.TypedField("Reporter", InformationSource)
@@ -323,42 +324,3 @@ class AffectedAssets(stix.EntityList):
323324
multiple=True,
324325
key_name="affected_assets"
325326
)
326-
327-
328-
# NOT ACTUAL STIX TYPES!
329-
#
330-
# class DiscoveryMethods(stix.TypedList):
331-
# _contained_type = VocabString
332-
#
333-
# def _fix_value(self, value):
334-
# return vocabs.DiscoveryMethod(value)
335-
#
336-
#
337-
# class _COAsTaken(stix.TypedList):
338-
# _contained_type = COATaken
339-
#
340-
#
341-
# class _COAsRequested(stix.TypedList):
342-
# _contained_type = COARequested
343-
#
344-
#
345-
# class _ExternalIDs(stix.TypedList):
346-
# _contained_type = ExternalID
347-
#
348-
#
349-
# class _InformationSources(stix.TypedList):
350-
# _contained_type = InformationSource
351-
#
352-
#
353-
# class _Victims(stix.TypedList):
354-
# _contained_type = Identity
355-
#
356-
# def _fix_value(self, value):
357-
# return Identity(name=value)
358-
#
359-
#
360-
# class _IntendedEffects(stix.TypedList):
361-
# _contained_type = Statement
362-
#
363-
# def _fix_value(self, value):
364-
# return Statement(value=vocabs.IntendedEffect(value))

0 commit comments

Comments
 (0)