import factory
import faker
import random
import uuid

from astral.models.stream import Stream
from astral.models.node import Node
from astral.models.ticket import Ticket


ELIXIR_CREATION = lambda class_to_create, **kwargs: class_to_create(**kwargs)
factory.Factory.set_creation_function(ELIXIR_CREATION)


class StreamFactory(factory.Factory):
    id = factory.Sequence(lambda n: int(n) + 1)
    name = factory.LazyAttribute(lambda a: ' '.join(faker.lorem.words()))


class NodeFactory(factory.Factory):
    ip_address = factory.LazyAttribute(lambda a: faker.internet.ip_address())
    uuid = factory.LazyAttribute(lambda a: random.randrange(1000, 1000000))
    port = factory.LazyAttribute(lambda a: random.randrange(1000, 10000))


class ThisNodeFactory(factory.Factory):
    FACTORY_FOR = Node

    ip_address = '127.0.0.1'
    uuid = factory.LazyAttribute(lambda a: uuid.getnode())
    port = factory.LazyAttribute(lambda a: random.randrange(1000, 10000))


class TicketFactory(factory.Factory):
    source = factory.LazyAttribute(lambda a: NodeFactory())
    destination = factory.LazyAttribute(lambda a: NodeFactory())
    stream = factory.LazyAttribute(lambda a: StreamFactory())

import factory
import faker
import random
import uuid

from astral.models.stream import Stream
from astral.models.node import Node
from astral.models.ticket import Ticket


ELIXIR_CREATION = lambda class_to_create, **kwargs: class_to_create(**kwargs)
factory.Factory.set_creation_function(ELIXIR_CREATION)


class StreamFactory(factory.Factory):
    id = factory.Sequence(lambda n: int(n) + 1)
    name = factory.LazyAttribute(lambda a: ' '.join(faker.lorem.words()))
    source = factory.LazyAttribute(lambda a: NodeFactory())


class NodeFactory(factory.Factory):
    ip_address = factory.LazyAttribute(lambda a: faker.internet.ip_address())
    uuid = factory.LazyAttribute(lambda a: random.randrange(1000, 1000000))
    port = factory.LazyAttribute(lambda a: random.randrange(1000, 10000))


class ThisNodeFactory(factory.Factory):
    FACTORY_FOR = Node

    ip_address = '127.0.0.1'
    uuid = factory.LazyAttribute(lambda a: uuid.getnode())
    port = factory.LazyAttribute(lambda a: random.randrange(1000, 10000))


class TicketFactory(factory.Factory):
    source = factory.LazyAttribute(lambda a: NodeFactory())
    destination = factory.LazyAttribute(lambda a: NodeFactory())
    stream = factory.LazyAttribute(lambda a: StreamFactory())

Make sure streams always have a source.
Make sure streams always have a source.

  import factory
  import faker
  import random
  import uuid
  
  from astral.models.stream import Stream
  from astral.models.node import Node
  from astral.models.ticket import Ticket
  
  
  ELIXIR_CREATION = lambda class_to_create, **kwargs: class_to_create(**kwargs)
  factory.Factory.set_creation_function(ELIXIR_CREATION)
  
  
  class StreamFactory(factory.Factory):
      id = factory.Sequence(lambda n: int(n) + 1)
      name = factory.LazyAttribute(lambda a: ' '.join(faker.lorem.words()))
+     source = factory.LazyAttribute(lambda a: NodeFactory())
  
  
  class NodeFactory(factory.Factory):
      ip_address = factory.LazyAttribute(lambda a: faker.internet.ip_address())
      uuid = factory.LazyAttribute(lambda a: random.randrange(1000, 1000000))
      port = factory.LazyAttribute(lambda a: random.randrange(1000, 10000))
  
  
  class ThisNodeFactory(factory.Factory):
      FACTORY_FOR = Node
  
      ip_address = '127.0.0.1'
      uuid = factory.LazyAttribute(lambda a: uuid.getnode())
      port = factory.LazyAttribute(lambda a: random.randrange(1000, 10000))
  
  
  class TicketFactory(factory.Factory):
      source = factory.LazyAttribute(lambda a: NodeFactory())
      destination = factory.LazyAttribute(lambda a: NodeFactory())
      stream = factory.LazyAttribute(lambda a: StreamFactory())
  
Make sure streams always have a source.
## Code Before:
import factory
import faker
import random
import uuid

from astral.models.stream import Stream
from astral.models.node import Node
from astral.models.ticket import Ticket


ELIXIR_CREATION = lambda class_to_create, **kwargs: class_to_create(**kwargs)
factory.Factory.set_creation_function(ELIXIR_CREATION)


class StreamFactory(factory.Factory):
    id = factory.Sequence(lambda n: int(n) + 1)
    name = factory.LazyAttribute(lambda a: ' '.join(faker.lorem.words()))


class NodeFactory(factory.Factory):
    ip_address = factory.LazyAttribute(lambda a: faker.internet.ip_address())
    uuid = factory.LazyAttribute(lambda a: random.randrange(1000, 1000000))
    port = factory.LazyAttribute(lambda a: random.randrange(1000, 10000))


class ThisNodeFactory(factory.Factory):
    FACTORY_FOR = Node

    ip_address = '127.0.0.1'
    uuid = factory.LazyAttribute(lambda a: uuid.getnode())
    port = factory.LazyAttribute(lambda a: random.randrange(1000, 10000))


class TicketFactory(factory.Factory):
    source = factory.LazyAttribute(lambda a: NodeFactory())
    destination = factory.LazyAttribute(lambda a: NodeFactory())
    stream = factory.LazyAttribute(lambda a: StreamFactory())

## Instruction:
Make sure streams always have a source.
## Code After:
import factory
import faker
import random
import uuid

from astral.models.stream import Stream
from astral.models.node import Node
from astral.models.ticket import Ticket


ELIXIR_CREATION = lambda class_to_create, **kwargs: class_to_create(**kwargs)
factory.Factory.set_creation_function(ELIXIR_CREATION)


class StreamFactory(factory.Factory):
    id = factory.Sequence(lambda n: int(n) + 1)
    name = factory.LazyAttribute(lambda a: ' '.join(faker.lorem.words()))
    source = factory.LazyAttribute(lambda a: NodeFactory())


class NodeFactory(factory.Factory):
    ip_address = factory.LazyAttribute(lambda a: faker.internet.ip_address())
    uuid = factory.LazyAttribute(lambda a: random.randrange(1000, 1000000))
    port = factory.LazyAttribute(lambda a: random.randrange(1000, 10000))


class ThisNodeFactory(factory.Factory):
    FACTORY_FOR = Node

    ip_address = '127.0.0.1'
    uuid = factory.LazyAttribute(lambda a: uuid.getnode())
    port = factory.LazyAttribute(lambda a: random.randrange(1000, 10000))


class TicketFactory(factory.Factory):
    source = factory.LazyAttribute(lambda a: NodeFactory())
    destination = factory.LazyAttribute(lambda a: NodeFactory())
    stream = factory.LazyAttribute(lambda a: StreamFactory())
